250 lines
9.7 KiB
C#
250 lines
9.7 KiB
C#
|
using System;
|
|||
|
using System.Globalization;
|
|||
|
using domain.UseCase;
|
|||
|
using ui;
|
|||
|
|
|||
|
namespace ui
|
|||
|
{
|
|||
|
public class MainMenuUI
|
|||
|
{
|
|||
|
private readonly UserConsoleUI _userConsoleUI;
|
|||
|
private readonly GroupConsoleUI _groupConsoleUI;
|
|||
|
private readonly PresenceConsoleUI _presenceConsoleUI;
|
|||
|
|
|||
|
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, PresenceUseCase presenceUseCase)
|
|||
|
{
|
|||
|
_userConsoleUI = new UserConsoleUI(userUseCase, groupUseCase);
|
|||
|
_groupConsoleUI = new GroupConsoleUI(userUseCase, groupUseCase);
|
|||
|
_presenceConsoleUI = new PresenceConsoleUI(presenceUseCase);
|
|||
|
}
|
|||
|
|
|||
|
public void Start()
|
|||
|
{
|
|||
|
while (true)
|
|||
|
{
|
|||
|
ShowNavigation();
|
|||
|
string choice = Console.ReadLine();
|
|||
|
Console.WriteLine();
|
|||
|
|
|||
|
switch (choice)
|
|||
|
{
|
|||
|
case "1":
|
|||
|
_userConsoleUI.ShowAllUsers();
|
|||
|
break;
|
|||
|
|
|||
|
case "2":
|
|||
|
HandleMemberRemoval();
|
|||
|
break;
|
|||
|
|
|||
|
case "3":
|
|||
|
HandleMemberUpdate();
|
|||
|
break;
|
|||
|
|
|||
|
case "4":
|
|||
|
SearchMember();
|
|||
|
break;
|
|||
|
|
|||
|
case "5":
|
|||
|
_groupConsoleUI.ShowAllGroups();
|
|||
|
break;
|
|||
|
|
|||
|
case "6":
|
|||
|
CreateNewGroup();
|
|||
|
break;
|
|||
|
|
|||
|
case "7":
|
|||
|
ModifyGroupName();
|
|||
|
break;
|
|||
|
|
|||
|
case "8":
|
|||
|
FindGroup();
|
|||
|
break;
|
|||
|
|
|||
|
case "9":
|
|||
|
CreateDailyAttendance();
|
|||
|
break;
|
|||
|
|
|||
|
case "10":
|
|||
|
CreateWeeklyAttendance();
|
|||
|
break;
|
|||
|
|
|||
|
case "11":
|
|||
|
ViewAttendanceRecords();
|
|||
|
break;
|
|||
|
|
|||
|
case "12":
|
|||
|
RecordAbsence();
|
|||
|
break;
|
|||
|
|
|||
|
/*case "13":
|
|||
|
ShowGroupAttendanceHistory();
|
|||
|
break;
|
|||
|
|
|||
|
case "14":
|
|||
|
DisplayAttendanceSummary();
|
|||
|
break;
|
|||
|
|
|||
|
case "15":
|
|||
|
GenerateExcelReport();
|
|||
|
break;*/
|
|||
|
|
|||
|
case "0":
|
|||
|
Console.WriteLine("Завершение работы...");
|
|||
|
return;
|
|||
|
|
|||
|
default:
|
|||
|
Console.WriteLine("Некорректный ввод, повторите попытку.");
|
|||
|
break;
|
|||
|
}
|
|||
|
Console.WriteLine();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void ShowNavigation()
|
|||
|
{
|
|||
|
Console.WriteLine("\n=== Управление системой ===\n");
|
|||
|
|
|||
|
Console.WriteLine("Управление участниками:");
|
|||
|
Console.WriteLine("1. Список всех участников");
|
|||
|
Console.WriteLine("2. Удалить участника");
|
|||
|
Console.WriteLine("3. Обновить данные участника");
|
|||
|
Console.WriteLine("4. Найти участника\n");
|
|||
|
|
|||
|
Console.WriteLine("Управление группами:");
|
|||
|
Console.WriteLine("5. Показать все группы");
|
|||
|
Console.WriteLine("6. Создать новую группу");
|
|||
|
Console.WriteLine("7. Переименовать группу");
|
|||
|
Console.WriteLine("8. Найти группу\n");
|
|||
|
|
|||
|
Console.WriteLine("Управление посещаемостью:");
|
|||
|
Console.WriteLine("9. Создать записи за день");
|
|||
|
Console.WriteLine("10. Создать записи за неделю");
|
|||
|
Console.WriteLine("11. Просмотр посещаемости");
|
|||
|
Console.WriteLine("12. Зарегистрировать отсутствие");
|
|||
|
Console.WriteLine("13. История посещаемости группы");
|
|||
|
Console.WriteLine("14. Статистика посещаемости");
|
|||
|
Console.WriteLine("15. Экспорт в Excel\n");
|
|||
|
|
|||
|
Console.Write("Выберите действие: ");
|
|||
|
}
|
|||
|
|
|||
|
private int GetValidNumberInput(string prompt)
|
|||
|
{
|
|||
|
int result;
|
|||
|
Console.Write(prompt);
|
|||
|
while (!int.TryParse(Console.ReadLine(), out result))
|
|||
|
{
|
|||
|
Console.WriteLine("Ошибка формата ввода. Повторите попытку.");
|
|||
|
Console.Write(prompt);
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
private DateTime GetValidDateInput(string prompt)
|
|||
|
{
|
|||
|
DateTime date;
|
|||
|
Console.Write(prompt);
|
|||
|
while (!DateTime.TryParseExact(Console.ReadLine(), "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
|
|||
|
{
|
|||
|
Console.WriteLine("Некорректный формат даты. Используйте дд.мм.гггг");
|
|||
|
Console.Write(prompt);
|
|||
|
}
|
|||
|
return date;
|
|||
|
}
|
|||
|
|
|||
|
private void HandleMemberRemoval()
|
|||
|
{
|
|||
|
int userId = GetValidNumberInput("Введите id студента: ");
|
|||
|
_userConsoleUI.RemoveUserByUserId(userId);
|
|||
|
}
|
|||
|
|
|||
|
private void HandleMemberUpdate()
|
|||
|
{
|
|||
|
int userId = GetValidNumberInput("Введите идентификатор участника: ");
|
|||
|
_userConsoleUI.UpdateUserByUserId(userId);
|
|||
|
}
|
|||
|
|
|||
|
private void SearchMember()
|
|||
|
{
|
|||
|
int userId = GetValidNumberInput("Введите идентификатор участника: ");
|
|||
|
_userConsoleUI.FindUserByUserId(userId);
|
|||
|
}
|
|||
|
|
|||
|
private void CreateNewGroup()
|
|||
|
{
|
|||
|
Console.Write("Введите название группы: ");
|
|||
|
var groupName = Console.ReadLine();
|
|||
|
_groupConsoleUI.AddGroup(groupName);
|
|||
|
Console.WriteLine($"\nГруппа {groupName} успешно добавлена");
|
|||
|
}
|
|||
|
|
|||
|
private void ModifyGroupName()
|
|||
|
{
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
Console.Write("Введите новое название: ");
|
|||
|
_groupConsoleUI.UpdateGroup(groupId, Console.ReadLine());
|
|||
|
}
|
|||
|
|
|||
|
private void FindGroup()
|
|||
|
{
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
_groupConsoleUI.GetGroupById(groupId);
|
|||
|
}
|
|||
|
|
|||
|
private void CreateDailyAttendance()
|
|||
|
{
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
int firstLesson = GetValidNumberInput("Начальный номер занятия: ");
|
|||
|
int lastLesson = GetValidNumberInput("Конечный номер занятия: ");
|
|||
|
|
|||
|
_presenceConsoleUI.GeneratePresenceForDay(firstLesson, lastLesson, groupId);
|
|||
|
Console.WriteLine("Записи за день созданы успешно.");
|
|||
|
}
|
|||
|
|
|||
|
private void CreateWeeklyAttendance()
|
|||
|
{
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
int firstLesson = GetValidNumberInput("Начальный номер занятия: ");
|
|||
|
int lastLesson = GetValidNumberInput("Конечный номер занятия: ");
|
|||
|
|
|||
|
_presenceConsoleUI.GeneratePresenceForWeek(firstLesson, lastLesson, groupId);
|
|||
|
Console.WriteLine("Записи за неделю созданы успешно.");
|
|||
|
}
|
|||
|
|
|||
|
private void ViewAttendanceRecords()
|
|||
|
{
|
|||
|
DateTime date = GetValidDateInput("Введите дату (дд.мм.гггг): ");
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
_presenceConsoleUI.ShowPresenceForDateAndGroup(DateOnly.FromDateTime(date), groupId);
|
|||
|
}
|
|||
|
|
|||
|
private void RecordAbsence()
|
|||
|
{
|
|||
|
DateTime date = GetValidDateInput("Введите дату отсутствия (дд.мм.гггг): ");
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
int userId = GetValidNumberInput("Введите идентификатор участника: ");
|
|||
|
int startSession = GetValidNumberInput("Начальный номер занятия: ");
|
|||
|
int endSession = GetValidNumberInput("Конечный номер занятия: ");
|
|||
|
|
|||
|
_presenceConsoleUI.MarkUserAbsent(DateOnly.FromDateTime(date), groupId, userId, startSession, endSession);
|
|||
|
}
|
|||
|
|
|||
|
/*private void ShowGroupAttendanceHistory()
|
|||
|
{
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
_presenceConsoleUI.DisplayAllPresenceByGroup(groupId);
|
|||
|
}
|
|||
|
|
|||
|
private void DisplayAttendanceSummary()
|
|||
|
{
|
|||
|
int groupId = GetValidNumberInput("Введите идентификатор группы: ");
|
|||
|
_presenceConsoleUI.DisplayGeneralPresence(groupId);
|
|||
|
}
|
|||
|
|
|||
|
private void GenerateExcelReport()
|
|||
|
{
|
|||
|
_presenceConsoleUI.ExportAttendanceToExcel();
|
|||
|
Console.WriteLine("Отчёт успешно экспортирован.");
|
|||
|
}*/
|
|||
|
}
|
|||
|
}
|