presence/Demo/UI/MainMenu.cs
Class_Student fee8b37eb3 init
2024-10-25 11:47:11 +03:00

462 lines
21 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Demo.Data.LocalData.Entity;
using Demo.Domain.Models;
using Demo.Domain.UseCase;
using System;
namespace Demo.UI
{
public class MainMenu
{
private readonly UserUseCase _userUseCase;
private readonly GroupUseCase _groupUseCase;
private readonly AttendanceUseCase _attendanceUseCase;
private readonly UseCaseGeneratePresence _presenceGenerator;
// Конструктор с инициализацией всех необходимых зависимостей
public MainMenu(UserUseCase userUseCase, GroupUseCase groupUseCase, AttendanceUseCase attendanceUseCase, UseCaseGeneratePresence presenceGenerator)
{
_userUseCase = userUseCase ?? throw new ArgumentNullException(nameof(userUseCase));
_groupUseCase = groupUseCase ?? throw new ArgumentNullException(nameof(groupUseCase));
_attendanceUseCase = attendanceUseCase ?? throw new ArgumentNullException(nameof(attendanceUseCase));
_presenceGenerator = presenceGenerator ?? throw new ArgumentNullException(nameof(presenceGenerator));
}
public void DisplayMenu()
{
while (true)
{
Console.Clear();
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. Удалить посещаемость");
Console.WriteLine("14. Генерация посещаемости на день");
Console.WriteLine("15. Генерация посещаемости на неделю");
Console.WriteLine("16. Показать посещаемость по группе и дате");
Console.WriteLine("17. Показать посещаемость по группе за диапазон дат");
Console.WriteLine("0. Выход");
var choice = Console.ReadLine();
switch (choice)
{
case "1": ShowAllUsers(); break;
case "2": RemoveUser(); break;
case "3": UpdateUser(); break;
case "4": FindUserByGuid(); break;
case "5": ShowAllGroups(); break;
case "6": AddGroup(); break;
case "7": UpdateGroup(); break;
case "8": RemoveGroup(); break;
case "9": FindGroupById(); break;
case "10": ShowAllAttendances(); break;
case "11": AddAttendance(); break;
case "12": UpdateAttendance(); break;
case "13": RemoveAttendance(); break;
case "14": GeneratePresenceForDay(); break;
case "15": GeneratePresenceForWeek(); break;
case "16": ShowAttendancesByGroupAndDate(); break;
case "17": ShowAttendancesByGroupAndDateRange(); break;
case "0": return;
default: Console.WriteLine("Неверный ввод. Попробуйте снова."); break;
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
}
private void ShowAllUsers()
{
var users = _userUseCase.GetAllUsers();
Console.WriteLine("Все пользователи:");
foreach (var user in users)
{
Console.WriteLine($"GUID: {user.Guid}, ФИО: {user.FIO}, Группа ID: {user.GroupID}");
}
}
private void RemoveUser()
{
Console.Write("Введите GUID пользователя для удаления: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
var removed = _userUseCase.RemoveUser(userGuid);
Console.WriteLine(removed ? "Пользователь удалён." : "Пользователь не найден.");
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void UpdateUser()
{
Console.Write("Введите GUID пользователя для обновления: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
var user = _userUseCase.FindUserByGuid(userGuid);
if (user != null)
{
Console.Write("Введите новое имя пользователя: ");
user.FIO = Console.ReadLine();
var updated = _userUseCase.UpdateUser(user);
Console.WriteLine(updated ? "Пользователь обновлён." : "Не удалось обновить пользователя.");
}
else
{
Console.WriteLine("Пользователь не найден.");
}
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void FindUserByGuid()
{
Console.Write("Введите GUID пользователя для поиска: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
var userModel = _userUseCase.GetUserModelByGuid(userGuid);
Console.WriteLine(userModel != null ? $"Пользователь найден: GUID = {userModel.Guid}, ФИО = {userModel.FIO}" : "Пользователь не найден.");
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void ShowAllGroups()
{
var groups = _groupUseCase.GetAllGroups();
Console.WriteLine("Все группы:");
foreach (var group in groups)
{
Console.WriteLine($"ID: {group.Id}, Название: {group.Name}");
}
}
private void AddGroup()
{
Console.Write("Введите название новой группы: ");
var groupName = Console.ReadLine();
var group = new Demo.Domain.Models.Group { Name = groupName };
_groupUseCase.AddGroup(group);
Console.WriteLine("Группа добавлена.");
}
private void UpdateGroup()
{
Console.Write("Введите ID группы для обновления: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
var group = _groupUseCase.GetGroupById(groupId);
if (group != null)
{
Console.Write("Введите новое название группы: ");
group.Name = Console.ReadLine();
var updated = _groupUseCase.UpdateGroup(group);
Console.WriteLine(updated ? "Группа обновлена." : "Не удалось обновить группу.");
}
else
{
Console.WriteLine("Группа не найдена.");
}
}
else
{
Console.WriteLine("Некорректный ID.");
}
}
private void RemoveGroup()
{
Console.Write("Введите ID группы для удаления: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
var removed = _groupUseCase.RemoveGroupById(groupId);
Console.WriteLine(removed ? "Группа удалена." : "Группа не найдена.");
}
else
{
Console.WriteLine("Некорректный ID.");
}
}
private void FindGroupById()
{
Console.Write("Введите ID группы для поиска: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine(group != null ? $"Группа найдена: ID = {group.Id}, Название = {group.Name}" : "Группа не найдена.");
}
else
{
Console.WriteLine("Некорректный ID.");
}
}
private void ShowAllAttendances()
{
var attendances = _attendanceUseCase.GetAllAttendances();
Console.WriteLine("Все посещаемости:");
foreach (var attendance in attendances)
{
Console.WriteLine($"User ID: {attendance.UserGuid}, Date: {attendance.Date}, Present: {attendance.IsPresent}");
}
}
private void AddAttendance()
{
Console.Write("Введите GUID пользователя: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
Console.Write("Введите номер урока: ");
if (int.TryParse(Console.ReadLine(), out var lessonNumber))
{
var attendance = new Attendance { UserGuid = userGuid, Date = date, LessonNumber = lessonNumber, IsPresent = true };
_attendanceUseCase.AddAttendance(attendance);
Console.WriteLine("Посещаемость добавлена.");
}
else
{
Console.WriteLine("Некорректный номер урока.");
}
}
else
{
Console.WriteLine("Некорректная дата.");
}
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void UpdateAttendance()
{
Console.Write("Введите GUID пользователя: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
Console.Write("Введите статус присутствия (true/false): ");
if (bool.TryParse(Console.ReadLine(), out var isPresent))
{
var attendance = new Attendance { UserGuid = userGuid, Date = date, LessonNumber = 1, IsPresent = isPresent };
var updated = _attendanceUseCase.UpdateAttendance(attendance);
Console.WriteLine(updated ? "Посещаемость обновлена." : "Запись о посещаемости не найдена.");
}
else
{
Console.WriteLine("Некорректный статус присутствия.");
}
}
else
{
Console.WriteLine("Некорректная дата.");
}
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void RemoveAttendance()
{
Console.Write("Введите GUID пользователя: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
var removed = _attendanceUseCase.RemoveAttendance(userGuid, date);
Console.WriteLine(removed ? "Посещаемость удалена." : "Запись о посещаемости не найдена.");
}
else
{
Console.WriteLine("Некорректная дата.");
}
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void GeneratePresenceForDay()
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out var firstLesson))
{
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out var lastLesson))
{
var currentDate = DateOnly.FromDateTime(DateTime.Now);
_presenceGenerator.GeneratePresenceForDay(firstLesson, lastLesson, groupId, currentDate);
Console.WriteLine("Посещаемость на текущий день сгенерирована.");
}
else
{
Console.WriteLine("Некорректный номер последнего занятия.");
}
}
else
{
Console.WriteLine("Некорректный номер первого занятия.");
}
}
else
{
Console.WriteLine("Некорректный ID группы.");
}
}
private void GeneratePresenceForWeek()
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out var firstLesson))
{
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out var lastLesson))
{
var startDate = DateOnly.FromDateTime(DateTime.Now);
_presenceGenerator.GeneratePresenceForWeek(firstLesson, lastLesson, groupId, startDate);
Console.WriteLine("Посещаемость на неделю сгенерирована.");
}
else
{
Console.WriteLine("Некорректный номер последнего занятия.");
}
}
else
{
Console.WriteLine("Некорректный номер первого занятия.");
}
}
else
{
Console.WriteLine("Некорректный ID группы.");
}
}
private void ShowAttendancesByGroupAndDate()
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
var attendances = _attendanceUseCase.GetAttendancesByGroupAndDate(groupId, date);
if (attendances.Any())
{
// Построение таблицы
Console.WriteLine($"\nПосещаемость для группы {groupId} на дату {date:yyyy-MM-dd}:\n");
// Заголовок таблицы
Console.WriteLine("+------------------------------------------+-----------+");
Console.WriteLine($"| {"UserGuid",-40} | {"IsPresent",-9} |");
Console.WriteLine("+------------------------------------------+-----------+");
// Данные таблицы
foreach (var attendance in attendances)
{
Console.WriteLine($"| {attendance.UserGuid,-40} | {attendance.IsPresent,-9} |");
Console.WriteLine("+------------------------------------------+-----------+");
}
}
else
{
Console.WriteLine($"\nНет данных о посещаемости для группы {groupId} на дату {date:yyyy-MM-dd}.");
}
}
else
{
Console.WriteLine("Некорректная дата.");
}
}
else
{
Console.WriteLine("Некорректный ID группы.");
}
}
private void ShowAttendancesByGroupAndDateRange()
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
Console.Write("Введите начальную дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var startDate))
{
Console.Write("Введите конечную дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var endDate))
{
var attendances = _attendanceUseCase.GetAttendancesByGroupAndDateRange(groupId, startDate, endDate);
if (attendances.Any())
{
// Построение таблицы
Console.WriteLine($"\nПосещаемость для группы {groupId} с {startDate:yyyy-MM-dd} по {endDate:yyyy-MM-dd}:\n");
// Заголовок таблицы
Console.WriteLine("+------------+------------------------------------------+-----------+");
Console.WriteLine($"| {"Date",-10} | {"UserGuid",-40} | {"IsPresent",-9} |");
Console.WriteLine("+------------+------------------------------------------+-----------+");
// Данные таблицы
foreach (var attendance in attendances)
{
Console.WriteLine($"| {attendance.Date,-10} | {attendance.UserGuid,-40} | {attendance.IsPresent,-9} |");
Console.WriteLine("+------------+------------------------------------------+-----------+");
}
}
else
{
Console.WriteLine($"\nНет данных о посещаемости для группы {groupId} за период с {startDate:yyyy-MM-dd} по {endDate:yyyy-MM-dd}.");
}
}
else
{
Console.WriteLine("Некорректная конечная дата.");
}
}
else
{
Console.WriteLine("Некорректная начальная дата.");
}
}
else
{
Console.WriteLine("Некорректный ID группы.");
}
}
}
}