slarny4/Demo1/UI/MainMenu.cs

524 lines
21 KiB
C#
Raw Normal View History

2024-10-28 12:42:04 +00:00
// C:\Users\class_Student\source\repos\slarny4\Demo1\UI\MainMenu.cs
using System;
using System.Globalization;
using System.Linq;
using Demo.Domain.Models;
using Demo.Domain.UseCase;
using Demo.Data.Repository;
using Demo.Data.LocalData.Entity;
using Demo.Data.RemoteData.RemoteDataBase;
using Microsoft.EntityFrameworkCore;
2024-10-24 08:50:32 +00:00
2024-10-28 12:42:04 +00:00
namespace Demo.UI
2024-10-21 22:57:01 +00:00
{
2024-10-24 08:50:32 +00:00
public class MainMenu
2024-10-21 22:57:01 +00:00
{
2024-10-28 12:42:04 +00:00
private readonly UserUseCase _userUseCase;
private readonly GroupUseCase _groupUseCase;
private readonly UseCaseGeneratePresence _presenceGenerator;
private readonly PresenceUseCase _presenceUseCase;
2024-10-24 08:50:32 +00:00
2024-10-28 12:42:04 +00:00
private readonly RemoteDatabaseContext _context;
public MainMenu(RemoteDatabaseContext context = null)
2024-10-21 22:57:01 +00:00
{
2024-10-28 12:42:04 +00:00
if (context == null)
{
// Если контекст не предоставлен, создаем новый
var optionsBuilder = new DbContextOptionsBuilder<RemoteDatabaseContext>();
2024-11-14 11:24:07 +00:00
optionsBuilder.UseNpgsql("Host=45.67.56.214;Port=5421;Database=user5;Username=user5;Password=EtEJqhsf");
2024-10-28 12:42:04 +00:00
_context = new RemoteDatabaseContext(optionsBuilder.Options);
}
else
{
_context = context;
}
2024-10-24 08:50:32 +00:00
2024-10-28 12:42:04 +00:00
// Инициализация репозиториев
IUserRepository userRepository = new SQLUserRepositoryImpl(_context);
IGroupRepository groupRepository = new GroupRepositoryImpl(_context);
IPresenceRepository presenceRepository = new PresenceRepositoryImpl(_context);
2024-10-24 08:50:32 +00:00
2024-10-28 12:42:04 +00:00
// Инициализация use cases
_userUseCase = new UserUseCase(userRepository);
_groupUseCase = new GroupUseCase(groupRepository);
_presenceGenerator = new UseCaseGeneratePresence(presenceRepository, userRepository);
_presenceUseCase = new PresenceUseCase(presenceRepository, groupRepository, userRepository);
2024-10-24 08:50:32 +00:00
}
public void Show()
{
2024-10-28 12:42:04 +00:00
bool exit = false;
while (!exit)
2024-10-24 08:50:32 +00:00
{
Console.Clear();
2024-10-28 12:42:04 +00:00
Console.WriteLine("=== Учёт Посещаемости ===");
2024-10-24 08:50:32 +00:00
Console.WriteLine("1. Показать всех пользователей");
Console.WriteLine("2. Удалить пользователя по GUID");
Console.WriteLine("3. Обновить пользователя");
Console.WriteLine("4. Найти пользователя по GUID");
Console.WriteLine("5. Показать все группы");
Console.WriteLine("6. Добавить группу");
Console.WriteLine("7. Обновить группу");
Console.WriteLine("8. Удалить группу по ID");
Console.WriteLine("9. Найти группу по ID");
Console.WriteLine("10. Генерация посещаемости на текущий день");
Console.WriteLine("11. Генерация посещаемости на неделю");
Console.WriteLine("12. Показать посещаемость по группе и дате");
Console.WriteLine("13. Отметить пользователя как отсутствующего");
2024-10-28 12:42:04 +00:00
Console.WriteLine("14. Вывести всю посещаемость");
2024-10-24 08:50:32 +00:00
Console.WriteLine("0. Выход");
2024-10-28 12:42:04 +00:00
Console.Write("Выберите пункт меню: ");
var input = Console.ReadLine() ?? string.Empty;
Console.WriteLine();
2024-10-24 08:50:32 +00:00
switch (input)
{
case "1":
2024-10-28 12:42:04 +00:00
ShowAllUsers();
2024-10-24 08:50:32 +00:00
break;
case "2":
2024-10-28 12:42:04 +00:00
DeleteUserByGuid();
2024-10-24 08:50:32 +00:00
break;
case "3":
2024-10-28 12:42:04 +00:00
UpdateUser();
2024-10-24 08:50:32 +00:00
break;
case "4":
2024-10-28 12:42:04 +00:00
FindUserByGuid();
2024-10-24 08:50:32 +00:00
break;
case "5":
2024-10-28 12:42:04 +00:00
ShowAllGroups();
2024-10-24 08:50:32 +00:00
break;
case "6":
2024-10-28 12:42:04 +00:00
AddGroup();
2024-10-24 08:50:32 +00:00
break;
case "7":
2024-10-28 12:42:04 +00:00
UpdateGroup();
2024-10-24 08:50:32 +00:00
break;
case "8":
2024-10-28 12:42:04 +00:00
DeleteGroupById();
2024-10-24 08:50:32 +00:00
break;
case "9":
2024-10-28 12:42:04 +00:00
FindGroupById();
2024-10-24 08:50:32 +00:00
break;
case "10":
2024-10-28 12:42:04 +00:00
GenerateDailyPresence();
2024-10-24 08:50:32 +00:00
break;
case "11":
2024-10-28 12:42:04 +00:00
GenerateWeeklyPresence();
2024-10-24 08:50:32 +00:00
break;
case "12":
2024-10-28 12:42:04 +00:00
ShowPresenceByGroupAndDate();
2024-10-24 08:50:32 +00:00
break;
case "13":
2024-10-28 12:42:04 +00:00
MarkUserAbsent();
2024-10-24 08:50:32 +00:00
break;
case "14":
2024-10-28 12:42:04 +00:00
ShowAllPresences();
2024-10-24 08:50:32 +00:00
break;
case "0":
2024-10-28 12:42:04 +00:00
exit = true;
break;
2024-10-24 08:50:32 +00:00
default:
2024-10-28 12:42:04 +00:00
Console.WriteLine("Неверный выбор. Нажмите любую клавишу для продолжения...");
2024-10-24 08:50:32 +00:00
Console.ReadKey();
break;
}
}
2024-10-21 22:57:01 +00:00
}
2024-10-28 12:42:04 +00:00
private void ShowAllUsers()
{
var users = _userUseCase.GetAllUsers();
Console.WriteLine("Список пользователей:");
foreach (var user in users)
{
var group = _groupUseCase.GetGroupById(user.GroupID);
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа: {group?.Name ?? "Неизвестно"}");
}
Pause();
}
private void DeleteUserByGuid()
{
Console.Write("Введите GUID пользователя для удаления: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
_userUseCase.DeleteUser(userId);
Console.WriteLine("Пользователь удалён.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Pause();
}
private void UpdateUser()
{
Console.Write("Введите GUID пользователя для обновления: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
var user = _userUseCase.GetUserById(userId);
Console.WriteLine($"Текущие данные: ФИО: {user.FIO}, Группа ID: {user.GroupID}");
Console.Write("Введите новое ФИО (оставьте пустым, чтобы сохранить текущее): ");
var newFIO = Console.ReadLine();
Console.Write("Введите новый ID группы (оставьте пустым, чтобы сохранить текущую): ");
var groupInput = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newFIO))
{
user.FIO = newFIO;
}
if (!string.IsNullOrWhiteSpace(groupInput))
{
if (int.TryParse(groupInput, out int newGroupId))
{
var group = _groupUseCase.GetGroupById(newGroupId);
if (group != null)
{
user.GroupID = newGroupId;
}
else
{
Console.WriteLine("Группа с таким ID не найдена. Группа не обновлена.");
}
}
else
{
Console.WriteLine("Неверный формат ID группы. Группа не обновлена.");
}
}
_userUseCase.UpdateUser(user);
Console.WriteLine("Пользователь обновлён.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Pause();
}
private void FindUserByGuid()
{
Console.Write("Введите GUID пользователя для поиска: ");
var input = Console.ReadLine();
if (Guid.TryParse(input, out Guid userId))
{
try
{
var user = _userUseCase.GetUserById(userId);
var group = _groupUseCase.GetGroupById(user.GroupID);
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа: {group?.Name ?? "Неизвестно"}");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат GUID.");
}
Pause();
}
private void ShowAllGroups()
{
var groups = _groupUseCase.GetAllGroups();
Console.WriteLine("Список групп:");
foreach (var group in groups)
{
Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
}
Pause();
}
private void AddGroup()
{
Console.Write("Введите ID группы: ");
var idInput = Console.ReadLine();
Console.Write("Введите название группы: ");
var name = Console.ReadLine() ?? string.Empty;
if (int.TryParse(idInput, out int groupId))
{
var existingGroup = _groupUseCase.GetGroupById(groupId);
if (existingGroup != null)
{
Console.WriteLine("Группа с таким ID уже существует.");
}
else
{
var group = new Group
{
Id = groupId,
Name = name
};
try
{
_groupUseCase.AddGroup(group);
Console.WriteLine("Группа добавлена.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void UpdateGroup()
{
Console.Write("Введите ID группы для обновления: ");
var idInput = Console.ReadLine();
if (int.TryParse(idInput, out int groupId))
{
try
{
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine($"Текущие данные: Название: {group.Name}");
Console.Write("Введите новое название группы: ");
var newName = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(newName))
{
group.Name = newName;
_groupUseCase.UpdateGroup(group);
Console.WriteLine("Группа обновлена.");
}
else
{
Console.WriteLine("Название не может быть пустым. Группа не обновлена.");
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void DeleteGroupById()
{
Console.Write("Введите ID группы для удаления: ");
var input = Console.ReadLine();
if (int.TryParse(input, out int groupId))
{
try
{
_groupUseCase.DeleteGroup(groupId);
Console.WriteLine("Группа удалена.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void FindGroupById()
{
Console.Write("Введите ID группы для поиска: ");
var input = Console.ReadLine();
if (int.TryParse(input, out int groupId))
{
try
{
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Pause();
}
private void GenerateDailyPresence()
{
Console.Write("Введите номер первой пары: ");
var firstLessonInput = Console.ReadLine();
Console.Write("Введите номер последней пары: ");
var lastLessonInput = Console.ReadLine();
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (int.TryParse(firstLessonInput, out int firstLesson) &&
int.TryParse(lastLessonInput, out int lastLesson) &&
int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParseExact(dateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
try
{
_presenceGenerator.GenerateDailyPresence(groupId, firstLesson, lastLesson, date);
Console.WriteLine("Посещаемость сгенерирована.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void GenerateWeeklyPresence()
{
Console.Write("Введите номер первой пары: ");
var firstLessonInput = Console.ReadLine();
Console.Write("Введите номер последней пары: ");
var lastLessonInput = Console.ReadLine();
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите начальную дату недели (yyyy-MM-dd): ");
var startDateInput = Console.ReadLine();
if (int.TryParse(firstLessonInput, out int firstLesson) &&
int.TryParse(lastLessonInput, out int lastLesson) &&
int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParseExact(startDateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDate))
{
try
{
_presenceGenerator.GenerateWeeklyPresence(groupId, firstLesson, lastLesson, startDate);
Console.WriteLine("Посещаемость на неделю сгенерирована.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void ShowPresenceByGroupAndDate()
{
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParseExact(dateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
try
{
var presences = _presenceUseCase.GetPresencesByGroupAndDate(groupId, date);
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine($"Посещаемость группы {group?.Name ?? "Неизвестно"} на {date.ToString("yyyy-MM-dd")}:");
foreach (var presence in presences)
{
var user = _userUseCase.GetUserById(presence.UserId);
Console.WriteLine($"Пользователь: {user.FIO} | Пара: {presence.LessonNumber} | Был/Не был: {(presence.WasPresent ? "Был" : "Не был")}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void MarkUserAbsent()
{
Console.Write("Введите GUID пользователя: ");
var userIdInput = Console.ReadLine();
Console.Write("Введите номер пары: ");
var lessonInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (Guid.TryParse(userIdInput, out Guid userId) &&
int.TryParse(lessonInput, out int lessonNumber) &&
DateTime.TryParseExact(dateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
{
try
{
_presenceUseCase.MarkUserAbsent(userId, lessonNumber, date);
Console.WriteLine("Пользователь отмечен как отсутствующий.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверные входные данные.");
}
Pause();
}
private void ShowAllPresences()
{
var presences = _presenceUseCase.GetAllPresences();
Console.WriteLine("Вся посещаемость:");
foreach (var presence in presences)
{
var user = _userUseCase.GetUserById(presence.UserId);
var group = _groupUseCase.GetGroupById(user.GroupID);
Console.WriteLine($"Пользователь: {user.FIO} | Группа: {group?.Name ?? "Неизвестно"} | Дата: {presence.ClassDate.ToString("yyyy-MM-dd")} | Пара: {presence.LessonNumber} | Был/Не был: {(presence.WasPresent ? "Был" : "Не был")}");
}
Pause();
}
private void Pause()
{
Console.WriteLine("\nНажмите любую клавишу для продолжения...");
Console.ReadKey();
}
2024-10-21 22:57:01 +00:00
}
2024-10-24 08:50:32 +00:00
}