init
This commit is contained in:
parent
aa3336ca1b
commit
ad36f40a57
9
Demo1/Data/Exceptions/GroupNotFoundException.cs
Normal file
9
Demo1/Data/Exceptions/GroupNotFoundException.cs
Normal file
@ -0,0 +1,9 @@
|
||||
using System;
|
||||
|
||||
namespace AttendanceApp.Data.Exceptions
|
||||
{
|
||||
public class GroupNotFoundException : Exception
|
||||
{
|
||||
public GroupNotFoundException(string message) : base(message) { }
|
||||
}
|
||||
}
|
9
Demo1/Data/Exceptions/RepositoryException.cs
Normal file
9
Demo1/Data/Exceptions/RepositoryException.cs
Normal file
@ -0,0 +1,9 @@
|
||||
using System;
|
||||
|
||||
namespace AttendanceApp.Data.Exceptions
|
||||
{
|
||||
public class RepositoryException : Exception
|
||||
{
|
||||
public RepositoryException(string message) : base(message) { }
|
||||
}
|
||||
}
|
9
Demo1/Data/Exceptions/UserNotFoundException.cs
Normal file
9
Demo1/Data/Exceptions/UserNotFoundException.cs
Normal file
@ -0,0 +1,9 @@
|
||||
using System;
|
||||
|
||||
namespace AttendanceApp.Data.Exceptions
|
||||
{
|
||||
public class UserNotFoundException : Exception
|
||||
{
|
||||
public UserNotFoundException(string message) : base(message) { }
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
{
|
||||
public class ClassGroup
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty; // Название группы
|
||||
public List<User>? Users { get; internal set; }
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Demo.Data.LocalData.Entity
|
||||
{
|
||||
public class DailyAttendance
|
||||
{
|
||||
public Guid UserId { get; set; }
|
||||
public bool[] Attendance { get; set; }
|
||||
|
||||
public DailyAttendance(Guid userId, int days)
|
||||
{
|
||||
UserId = userId;
|
||||
Attendance = new bool[days];
|
||||
for (int i = 0; i < days; i++)
|
||||
{
|
||||
Attendance[i] = true; // По умолчанию все присутствуют
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Demo.Data.LocalData.Entity
|
||||
{
|
||||
public class Group
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty; // По умолчанию пустая строка
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
using Demo.Domain.Models;
|
||||
|
||||
namespace Demo.Data.LocalData.Entity
|
||||
{
|
||||
public class LocalUser
|
||||
{
|
||||
public Guid Id { get; set; } // Это будет уникальный идентификатор
|
||||
public string FIO { get; set; } = string.Empty;
|
||||
public int GroupID { get; set; }
|
||||
public ClassGroup ClassGroup { get; set; } = new ClassGroup();
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
{
|
||||
public class StudentAttendance
|
||||
{
|
||||
public Guid UserId { get; set; }
|
||||
public bool[] Attendance { get; set; }
|
||||
|
||||
public StudentAttendance(Guid userId, int lessonsCount)
|
||||
{
|
||||
UserId = userId;
|
||||
Attendance = new bool[lessonsCount];
|
||||
for (int i = 0; i < lessonsCount; i++)
|
||||
{
|
||||
Attendance[i] = true; // По умолчанию все присутствуют
|
||||
}
|
||||
}
|
||||
|
||||
// Добавьте здесь новые свойства, если хотите хранить дополнительные данные
|
||||
public int LessonId { get; set; } // Идентификатор урока
|
||||
public bool IsPresent { get; set; } // Статус присутствия
|
||||
public DateTime AttendanceDate { get; set; } // Дата посещаемости
|
||||
}
|
||||
}
|
8
Demo1/Data/LocalData/LocalGroup.cs
Normal file
8
Demo1/Data/LocalData/LocalGroup.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace AttendanceApp.Data.LocalData
|
||||
{
|
||||
public class LocalGroup
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
12
Demo1/Data/LocalData/LocalPresence.cs
Normal file
12
Demo1/Data/LocalData/LocalPresence.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
|
||||
namespace AttendanceApp.Data.LocalData
|
||||
{
|
||||
public class LocalPresence
|
||||
{
|
||||
public DateTime ClassDate { get; set; }
|
||||
public int ClassNumber { get; set; }
|
||||
public bool IsPresent { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
using Demo.Data.LocalData.Entity;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Demo.Domain.Models;
|
||||
|
||||
namespace Demo.Data.LocalData
|
||||
{
|
||||
public static class LocalStaticData
|
||||
{
|
||||
public static List<LocalUser> Users { get; } = new List<LocalUser>
|
||||
{
|
||||
new LocalUser { Id = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9"), FIO = "Иванов Иван Иванович", GroupID = 1 },
|
||||
new LocalUser { Id = Guid.Parse("8388d931-5bef-41be-a152-78f1aca980ed"), FIO = "Петров Петр Петрович", GroupID = 2 },
|
||||
new LocalUser { Id = Guid.Parse("ed174548-49ed-4503-a902-c970cbf27173"), FIO = "Мендалиев Наиль", GroupID = 3 },
|
||||
new LocalUser { Id = Guid.Parse("614c0a23-5bd5-43ae-b48e-d5750afbc282"), FIO = "Сидоров Сидор Сидорович", GroupID = 1 },
|
||||
new LocalUser { Id = Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), FIO = "Кузнецов Алексей Викторович", GroupID = 2 },
|
||||
new LocalUser { Id = Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), FIO = "Смирнова Анна Сергеевна", GroupID = 3 }
|
||||
};
|
||||
|
||||
public static List<string> Groups { get; } = new List<string>
|
||||
{
|
||||
"ИП1-22",
|
||||
"ИП1-23",
|
||||
"С1-23"
|
||||
};
|
||||
|
||||
// Список посещаемостей
|
||||
public static List<Presence> Presences { get; } = new List<Presence>();
|
||||
|
||||
public static void InitializePresences()
|
||||
{
|
||||
// Инициализация списка посещаемости для текущей недели
|
||||
foreach (var user in Users)
|
||||
{
|
||||
var lessons = new List<bool>(new bool[3]); // Предположим, что у нас 3 занятия
|
||||
Presences.Add(new Presence(user.Id, DateTime.Today, user.GroupID, lessons));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Класс для хранения посещаемости
|
||||
public class Presence
|
||||
{
|
||||
public Guid UserID { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public int GroupID { get; set; }
|
||||
public List<bool> Lessons { get; set; } // true - присутствует, false - отсутствует
|
||||
|
||||
public Presence(Guid userId, DateTime date, int groupId, List<bool> lessons)
|
||||
{
|
||||
UserID = userId;
|
||||
Date = date;
|
||||
GroupID = groupId;
|
||||
Lessons = lessons;
|
||||
}
|
||||
}
|
||||
}
|
11
Demo1/Data/LocalData/LocalUser.cs
Normal file
11
Demo1/Data/LocalData/LocalUser.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
|
||||
namespace AttendanceApp.Data.LocalData
|
||||
{
|
||||
public class LocalUser
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string FIO { get; set; }
|
||||
public int GroupID { get; set; }
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
{
|
||||
public class WeeklyAttendance
|
||||
{
|
||||
public Guid UserId { get; set; }
|
||||
public int GroupID { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public List<bool> Lessons { get; set; }
|
||||
|
||||
public WeeklyAttendance(Guid userId, int groupId)
|
||||
{
|
||||
UserId = userId;
|
||||
GroupID = groupId;
|
||||
Date = DateTime.Now; // или передайте дату в качестве параметра
|
||||
Lessons = new List<bool>();
|
||||
}
|
||||
}
|
||||
}
|
28
Demo1/Data/LocalStaticData.cs
Normal file
28
Demo1/Data/LocalStaticData.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using AttendanceApp.Data.LocalData;
|
||||
|
||||
namespace AttendanceApp.Data
|
||||
{
|
||||
public static class LocalStaticData
|
||||
{
|
||||
public static List<LocalUser> Users { get; set; } = new List<LocalUser>
|
||||
{
|
||||
new LocalUser { Id = Guid.Parse("e6b9964d-ea9f-420a-84b9-af9633bbfab9"), FIO = "Иванов Иван Иванович", GroupID = 1 },
|
||||
new LocalUser { Id = Guid.Parse("8388d931-5bef-41be-a152-78f1aca980ed"), FIO = "Петров Петр Петрович", GroupID = 2 },
|
||||
new LocalUser { Id = Guid.Parse("ed174548-49ed-4503-a902-c970cbf27173"), FIO = "Мендалиев Наиль", GroupID = 3 },
|
||||
new LocalUser { Id = Guid.Parse("614c0a23-5bd5-43ae-b48e-d5750afbc282"), FIO = "Сидоров Сидор Сидорович", GroupID = 1 },
|
||||
new LocalUser { Id = Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), FIO = "Кузнецов Алексей Викторович", GroupID = 2 },
|
||||
new LocalUser { Id = Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), FIO = "Смирнова Анна Сергеевна", GroupID = 3 }
|
||||
};
|
||||
|
||||
public static List<LocalGroup> Groups { get; set; } = new List<LocalGroup>
|
||||
{
|
||||
new LocalGroup { Id = 1, Name = "ИП1-22" },
|
||||
new LocalGroup { Id = 2, Name = "ИП1-23" },
|
||||
new LocalGroup { Id = 3, Name = "С1-23" }
|
||||
};
|
||||
|
||||
public static List<LocalPresence> Presences { get; set; } = new List<LocalPresence>();
|
||||
}
|
||||
}
|
@ -1,37 +1,60 @@
|
||||
using Demo.Data.LocalData.Entity;
|
||||
using Demo.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using AttendanceApp.Data.Exceptions;
|
||||
using AttendanceApp.Data.LocalData;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace Demo.Data.Repository
|
||||
namespace AttendanceApp.Data.Repository
|
||||
{
|
||||
public class GroupRepositoryImpl
|
||||
public class GroupRepositoryImpl : IGroupRepository
|
||||
{
|
||||
private List<ClassGroup> groups;
|
||||
private readonly List<LocalGroup> _groups = LocalStaticData.Groups;
|
||||
|
||||
public GroupRepositoryImpl()
|
||||
public IEnumerable<Group> GetAllGroups()
|
||||
{
|
||||
groups = new List<ClassGroup>();
|
||||
return _groups.Select(g => new Group
|
||||
{
|
||||
Id = g.Id,
|
||||
Name = g.Name
|
||||
});
|
||||
}
|
||||
|
||||
public List<ClassGroup> GetAllGroups()
|
||||
public Group GetGroupById(int id)
|
||||
{
|
||||
return groups;
|
||||
var localGroup = _groups.FirstOrDefault(g => g.Id == id);
|
||||
if (localGroup == null)
|
||||
throw new GroupNotFoundException($"Группа с ID {id} не найдена.");
|
||||
|
||||
return new Group
|
||||
{
|
||||
Id = localGroup.Id,
|
||||
Name = localGroup.Name
|
||||
};
|
||||
}
|
||||
|
||||
public void AddGroup(ClassGroup group)
|
||||
public void AddGroup(Group group)
|
||||
{
|
||||
if (group == null) throw new ArgumentNullException(nameof(group));
|
||||
groups.Add(group);
|
||||
_groups.Add(new LocalGroup
|
||||
{
|
||||
Id = group.Id,
|
||||
Name = group.Name
|
||||
});
|
||||
}
|
||||
|
||||
// Метод для получения пользователей по ID группы
|
||||
public List<User> GetUsersByGroup(int groupId)
|
||||
public void UpdateGroup(Group group)
|
||||
{
|
||||
// Предполагаем, что ClassGroup имеет свойство Users, содержащее список пользователей
|
||||
var group = groups.FirstOrDefault(g => g.Id == groupId);
|
||||
return group?.Users ?? new List<User>(); // Возвращаем пользователей или пустой список, если группа не найдена
|
||||
var localGroup = _groups.FirstOrDefault(g => g.Id == group.Id);
|
||||
if (localGroup == null)
|
||||
throw new GroupNotFoundException($"Группа с ID {group.Id} не найдена.");
|
||||
|
||||
localGroup.Name = group.Name;
|
||||
}
|
||||
|
||||
public void DeleteGroup(int id)
|
||||
{
|
||||
var group = _groups.FirstOrDefault(g => g.Id == id);
|
||||
if (group == null)
|
||||
throw new GroupNotFoundException($"Группа с ID {id} не найдена.");
|
||||
|
||||
_groups.Remove(group);
|
||||
}
|
||||
}
|
||||
}
|
14
Demo1/Data/Repository/IGroupRepository.cs
Normal file
14
Demo1/Data/Repository/IGroupRepository.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace AttendanceApp.Data.Repository
|
||||
{
|
||||
public interface IGroupRepository
|
||||
{
|
||||
IEnumerable<Group> GetAllGroups();
|
||||
Group GetGroupById(int id);
|
||||
void AddGroup(Group group);
|
||||
void UpdateGroup(Group group);
|
||||
void DeleteGroup(int id);
|
||||
}
|
||||
}
|
@ -1,18 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Demo.Domain.Models;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace Demo.Data.Repository
|
||||
namespace AttendanceApp.Data.Repository
|
||||
{
|
||||
public interface IPresenceRepository
|
||||
{
|
||||
List<User> GetUsersByGroup(int groupNumber);
|
||||
void SavePresence(List<LessonPresence> presenceList);
|
||||
List<LessonPresence> GetPresenceByGroup(int groupNumber);
|
||||
List<LessonPresence> GetPresenceByGroupAndDate(int groupNumber, DateTime date);
|
||||
void MarkUserAbsent(Guid userId, int groupNumber, int lessonIndex, DateTime date);
|
||||
|
||||
// Добавляем метод для обновления записи о посещаемости
|
||||
void UpdatePresence(LessonPresence presence); // Обновление присутствия
|
||||
IEnumerable<Presence> GetPresenceByGroupAndDate(int groupId, DateTime date);
|
||||
IEnumerable<Presence> GetPresenceByGroup(int groupId);
|
||||
void AddPresence(Presence presence);
|
||||
void UpdatePresence(Presence presence);
|
||||
// Дополнительные методы по необходимости
|
||||
}
|
||||
}
|
13
Demo1/Data/Repository/IUserRepository.cs
Normal file
13
Demo1/Data/Repository/IUserRepository.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace AttendanceApp.Data.Repository
|
||||
{
|
||||
public interface IUserRepository
|
||||
{
|
||||
IEnumerable<User> GetAllUsers();
|
||||
User GetUserById(Guid id);
|
||||
void AddUser(User user);
|
||||
void UpdateUser(User user);
|
||||
void DeleteUser(Guid id);
|
||||
}
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
{
|
||||
public class LessonPresence
|
||||
{
|
||||
public Guid UserId { get; set; } // Идентификатор пользователя
|
||||
public DateTime Date { get; set; } // Дата посещаемости
|
||||
public int GroupID { get; set; } // ID группы
|
||||
public List<bool> Lessons { get; set; } // Список посещаемости по занятиям
|
||||
|
||||
// Конструктор класса
|
||||
public LessonPresence(Guid userId, DateTime date, int groupId, List<bool> lessons)
|
||||
{
|
||||
UserId = userId;
|
||||
Date = date;
|
||||
GroupID = groupId;
|
||||
Lessons = lessons;
|
||||
}
|
||||
}
|
||||
}
|
70
Demo1/Data/Repository/PresenceRepositoryImpl.cs
Normal file
70
Demo1/Data/Repository/PresenceRepositoryImpl.cs
Normal file
@ -0,0 +1,70 @@
|
||||
using AttendanceApp.Data.Exceptions;
|
||||
using AttendanceApp.Data.LocalData;
|
||||
using AttendanceApp.Domain.Models;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace AttendanceApp.Data.Repository
|
||||
{
|
||||
public class PresenceRepositoryImpl : IPresenceRepository
|
||||
{
|
||||
private readonly List<LocalPresence> _presences = LocalStaticData.Presences;
|
||||
|
||||
public IEnumerable<Presence> GetPresenceByGroupAndDate(int groupId, DateTime date)
|
||||
{
|
||||
var usersInGroup = LocalStaticData.Users.Where(u => u.GroupID == groupId).Select(u => u.Id);
|
||||
return _presences
|
||||
.Where(p => usersInGroup.Contains(p.UserId) && p.ClassDate.Date == date.Date)
|
||||
.Select(p => new Presence
|
||||
{
|
||||
ClassDate = p.ClassDate,
|
||||
ClassNumber = p.ClassNumber,
|
||||
IsPresent = p.IsPresent,
|
||||
UserId = p.UserId
|
||||
});
|
||||
}
|
||||
|
||||
public IEnumerable<Presence> GetPresenceByGroup(int groupId)
|
||||
{
|
||||
var usersInGroup = LocalStaticData.Users
|
||||
.Where(u => u.GroupID == groupId)
|
||||
.Select(u => u.Id);
|
||||
|
||||
return _presences
|
||||
.Where(p => usersInGroup.Contains(p.UserId))
|
||||
.Select(p => new Presence
|
||||
{
|
||||
ClassDate = p.ClassDate,
|
||||
ClassNumber = p.ClassNumber,
|
||||
IsPresent = p.IsPresent,
|
||||
UserId = p.UserId
|
||||
})
|
||||
.OrderBy(p => p.ClassDate)
|
||||
.ThenBy(p => p.ClassNumber);
|
||||
}
|
||||
|
||||
public void AddPresence(Presence presence)
|
||||
{
|
||||
_presences.Add(new LocalPresence
|
||||
{
|
||||
ClassDate = presence.ClassDate,
|
||||
ClassNumber = presence.ClassNumber,
|
||||
IsPresent = presence.IsPresent,
|
||||
UserId = presence.UserId
|
||||
});
|
||||
}
|
||||
|
||||
public void UpdatePresence(Presence presence)
|
||||
{
|
||||
var localPresence = _presences.FirstOrDefault(p =>
|
||||
p.UserId == presence.UserId &&
|
||||
p.ClassDate.Date == presence.ClassDate.Date &&
|
||||
p.ClassNumber == presence.ClassNumber);
|
||||
|
||||
if (localPresence == null)
|
||||
throw new RepositoryException("Посещаемость не найдена.");
|
||||
|
||||
localPresence.IsPresent = presence.IsPresent;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Demo.Data.LocalData;
|
||||
using Demo.Domain.Models;
|
||||
|
||||
namespace Demo.Data.Repository
|
||||
{
|
||||
public class PresenceRepositoryImpl : IPresenceRepository
|
||||
{
|
||||
private readonly List<LessonPresence> _presences = new List<LessonPresence>();
|
||||
|
||||
public List<User> GetUsersByGroup(int groupNumber)
|
||||
{
|
||||
// Здесь должна быть логика получения пользователей по номеру группы
|
||||
return new List<User>
|
||||
{
|
||||
new User { Id = Guid.NewGuid(), FullName = "Иванов Иван", ClassId = groupNumber },
|
||||
new User { Id = Guid.NewGuid(), FullName = "Петров Пётр", ClassId = groupNumber },
|
||||
// Добавьте других пользователей по аналогии
|
||||
};
|
||||
}
|
||||
|
||||
public void SavePresence(List<LessonPresence> presenceList)
|
||||
{
|
||||
_presences.AddRange(presenceList);
|
||||
}
|
||||
|
||||
public List<LessonPresence> GetPresenceByGroup(int groupNumber)
|
||||
{
|
||||
return _presences.FindAll(p => p.GroupID == groupNumber);
|
||||
}
|
||||
|
||||
public List<LessonPresence> GetPresenceByGroupAndDate(int groupNumber, DateTime date)
|
||||
{
|
||||
return _presences.FindAll(p => p.GroupID == groupNumber && p.Date.Date == date.Date);
|
||||
}
|
||||
|
||||
public void MarkUserAbsent(Guid userId, int groupNumber, int lessonIndex, DateTime date)
|
||||
{
|
||||
var presence = _presences.Find(p => p.UserId == userId && p.GroupID == groupNumber && p.Date.Date == date.Date);
|
||||
if (presence != null && lessonIndex >= 0 && lessonIndex < presence.Lessons.Count)
|
||||
{
|
||||
presence.Lessons[lessonIndex] = false; // Отметим занятие как отсутствующее
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdatePresence(LessonPresence presence)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,38 +1,64 @@
|
||||
using Demo.Data.LocalData;
|
||||
using Demo.Data.LocalData.Entity;
|
||||
using Demo.Domain.Models; // Убедитесь, что эта директива используется только один раз
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using AttendanceApp.Data.Exceptions;
|
||||
using AttendanceApp.Data.LocalData;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace Demo.Data.Repository
|
||||
namespace AttendanceApp.Data.Repository
|
||||
{
|
||||
public class UserRepositoryImpl
|
||||
public class UserRepositoryImpl : IUserRepository
|
||||
{
|
||||
private List<LocalUser> users;
|
||||
private readonly List<LocalUser> _users = LocalStaticData.Users;
|
||||
|
||||
public UserRepositoryImpl()
|
||||
public IEnumerable<User> GetAllUsers()
|
||||
{
|
||||
users = LocalStaticData.Users; // Инициализируем пользователей из статических данных
|
||||
return _users.Select(u => new User
|
||||
{
|
||||
Id = u.Id,
|
||||
FIO = u.FIO,
|
||||
GroupId = u.GroupID
|
||||
});
|
||||
}
|
||||
|
||||
public List<User> GetAllUsers()
|
||||
public User GetUserById(Guid id)
|
||||
{
|
||||
return users.Select(u => (User)u).ToList();
|
||||
var localUser = _users.FirstOrDefault(u => u.Id == id);
|
||||
if (localUser == null)
|
||||
throw new UserNotFoundException($"Пользователь с ID {id} не найден.");
|
||||
|
||||
return new User
|
||||
{
|
||||
Id = localUser.Id,
|
||||
FIO = localUser.FIO,
|
||||
GroupId = localUser.GroupID
|
||||
};
|
||||
}
|
||||
|
||||
public User GetUserById(Guid userId) // Изменено на Guid
|
||||
public void AddUser(User user)
|
||||
{
|
||||
var entityUser = users.FirstOrDefault(u => u.Id == userId);
|
||||
if (entityUser == null) throw new InvalidOperationException("User not found");
|
||||
|
||||
return (User)entityUser;
|
||||
_users.Add(new LocalUser
|
||||
{
|
||||
Id = user.Id,
|
||||
FIO = user.FIO,
|
||||
GroupID = user.GroupId
|
||||
});
|
||||
}
|
||||
|
||||
public void AddUser(LocalUser user)
|
||||
public void UpdateUser(User user)
|
||||
{
|
||||
if (user == null) throw new ArgumentNullException(nameof(user));
|
||||
users.Add(user);
|
||||
var localUser = _users.FirstOrDefault(u => u.Id == user.Id);
|
||||
if (localUser == null)
|
||||
throw new UserNotFoundException($"Пользователь с ID {user.Id} не найден.");
|
||||
|
||||
localUser.FIO = user.FIO;
|
||||
localUser.GroupID = user.GroupId;
|
||||
}
|
||||
|
||||
public void DeleteUser(Guid id)
|
||||
{
|
||||
var user = _users.FirstOrDefault(u => u.Id == id);
|
||||
if (user == null)
|
||||
throw new UserNotFoundException($"Пользователь с ID {id} не найден.");
|
||||
|
||||
_users.Remove(user);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
using System;
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
namespace AttendanceApp.Domain.Models
|
||||
{
|
||||
public class Group
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty; // Переименован на Name
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
@ -1,22 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
namespace AttendanceApp.Domain.Models
|
||||
{
|
||||
public class Presence
|
||||
{
|
||||
public Guid UserId { get; set; } // Идентификатор пользователя
|
||||
public DateTime Date { get; set; } // Дата посещаемости
|
||||
public int GroupID { get; set; } // ID группы
|
||||
public List<bool> Lessons { get; set; } // Список посещаемости по занятиям
|
||||
|
||||
// Конструктор класса
|
||||
public Presence(Guid userId, DateTime date, int groupId, List<bool> lessons)
|
||||
{
|
||||
UserId = userId;
|
||||
Date = date;
|
||||
GroupID = groupId;
|
||||
Lessons = lessons;
|
||||
}
|
||||
public DateTime ClassDate { get; set; }
|
||||
public int ClassNumber { get; set; }
|
||||
public bool IsPresent { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
}
|
||||
}
|
@ -1,24 +1,11 @@
|
||||
using System;
|
||||
|
||||
namespace Demo.Domain.Models
|
||||
namespace AttendanceApp.Domain.Models
|
||||
{
|
||||
public class User
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string FullName { get; set; } = string.Empty;
|
||||
public ClassGroup ClassGroup { get; set; } = new ClassGroup();
|
||||
public int ClassId { get; set; }
|
||||
public Guid UserId { get; internal set; }
|
||||
|
||||
public static explicit operator User(Data.LocalData.Entity.LocalUser v)
|
||||
{
|
||||
return new User
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
FullName = v.FIO,
|
||||
ClassGroup = v.ClassGroup,
|
||||
ClassId = v.GroupID
|
||||
};
|
||||
}
|
||||
public string FIO { get; set; }
|
||||
public int GroupId { get; set; }
|
||||
}
|
||||
}
|
@ -1,82 +1,41 @@
|
||||
using Demo.Data.Repository;
|
||||
using Demo.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using AttendanceApp.Data.Repository;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace Demo.Domain.UseCases
|
||||
namespace AttendanceApp.Domain.UseCases
|
||||
{
|
||||
public class GroupUseCase
|
||||
{
|
||||
private readonly IPresenceRepository _presenceRepository;
|
||||
private readonly GroupRepositoryImpl _groupRepository; // Измените на GroupRepositoryImpl
|
||||
private readonly IGroupRepository _groupRepository;
|
||||
|
||||
public GroupUseCase(GroupRepositoryImpl groupRepository, IPresenceRepository presenceRepository) // Конструктор
|
||||
public GroupUseCase(IGroupRepository groupRepository)
|
||||
{
|
||||
_groupRepository = groupRepository;
|
||||
_presenceRepository = presenceRepository;
|
||||
}
|
||||
|
||||
// Метод для генерации посещаемости на текущий день
|
||||
public List<LessonPresence> GeneratePresence(int firstLessonNumber, int lastLessonNumber, int groupId, DateTime currentDate)
|
||||
public IEnumerable<Group> GetAllGroups()
|
||||
{
|
||||
var users = _groupRepository.GetUsersByGroup(groupId); // Получаем пользователей группы
|
||||
List<LessonPresence> presenceList = new List<LessonPresence>();
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
var lessons = new List<bool>(new bool[lastLessonNumber - firstLessonNumber + 1]); // По умолчанию все посещены
|
||||
var presence = new LessonPresence(user.Id, currentDate, groupId, lessons); // Измените на LessonPresence
|
||||
presenceList.Add(presence);
|
||||
}
|
||||
|
||||
return presenceList;
|
||||
return _groupRepository.GetAllGroups();
|
||||
}
|
||||
|
||||
// Метод для генерации посещаемости на неделю
|
||||
public Dictionary<DateTime, List<LessonPresence>> GenerateWeeklyPresence(int firstLessonNumber, int lastLessonNumber, int groupId, DateTime startDate)
|
||||
public Group GetGroupById(int id)
|
||||
{
|
||||
var weeklyPresence = new Dictionary<DateTime, List<LessonPresence>>();
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
var currentDate = startDate.AddDays(i);
|
||||
var dailyPresence = GeneratePresence(firstLessonNumber, lastLessonNumber, groupId, currentDate);
|
||||
weeklyPresence[currentDate] = dailyPresence;
|
||||
}
|
||||
|
||||
return weeklyPresence;
|
||||
return _groupRepository.GetGroupById(id);
|
||||
}
|
||||
|
||||
// Метод для вывода посещаемости по группе
|
||||
public List<LessonPresence> GetPresenceByGroup(int groupId)
|
||||
public void AddGroup(Group group)
|
||||
{
|
||||
return _presenceRepository.GetPresenceByGroup(groupId);
|
||||
_groupRepository.AddGroup(group);
|
||||
}
|
||||
|
||||
// Метод для вывода посещаемости по группе по дате
|
||||
public List<LessonPresence> GetPresenceByGroupAndDate(int groupId, DateTime date)
|
||||
public void UpdateGroup(Group group)
|
||||
{
|
||||
return _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
|
||||
_groupRepository.UpdateGroup(group);
|
||||
}
|
||||
|
||||
// Метод для отметки пользователя как отсутствующего
|
||||
public void MarkUserAbsent(Guid userId, int groupId, DateTime date, List<int> lessonNumbers)
|
||||
public void DeleteGroup(int id)
|
||||
{
|
||||
var presenceRecords = _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
|
||||
|
||||
var presenceRecord = presenceRecords.FirstOrDefault(p => p.UserId == userId);
|
||||
if (presenceRecord != null)
|
||||
{
|
||||
foreach (var lessonNumber in lessonNumbers)
|
||||
{
|
||||
if (lessonNumber >= 0 && lessonNumber < presenceRecord.Lessons.Count)
|
||||
{
|
||||
presenceRecord.Lessons[lessonNumber] = false; // Отмечаем как отсутствующего
|
||||
}
|
||||
}
|
||||
_presenceRepository.UpdatePresence(presenceRecord); // Обновляем запись в репозитории
|
||||
}
|
||||
_groupRepository.DeleteGroup(id);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Demo.Data.Repository;
|
||||
using Demo.Domain.Models;
|
||||
|
||||
namespace Demo.Domain.UseCases
|
||||
{
|
||||
public class PresenceUseCase
|
||||
{
|
||||
private readonly IPresenceRepository _presenceRepository;
|
||||
|
||||
public PresenceUseCase(IPresenceRepository presenceRepository) // Конструктор
|
||||
{
|
||||
_presenceRepository = presenceRepository;
|
||||
}
|
||||
|
||||
public void GeneratePresence(int groupNumber, DateTime date)
|
||||
{
|
||||
var users = _presenceRepository.GetUsersByGroup(groupNumber);
|
||||
var presenceList = new List<LessonPresence>();
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
// Создаем список посещаемости, по умолчанию все отмечены как присутствующие
|
||||
var lessons = new List<bool> { true, true, true }; // Пример, 3 занятия
|
||||
presenceList.Add(new LessonPresence(user.UserId, date, groupNumber, lessons));
|
||||
}
|
||||
|
||||
_presenceRepository.SavePresence(presenceList);
|
||||
}
|
||||
|
||||
public List<LessonPresence> GetPresenceByGroup(int groupNumber)
|
||||
{
|
||||
return _presenceRepository.GetPresenceByGroup(groupNumber);
|
||||
}
|
||||
|
||||
public List<LessonPresence> GetPresenceByGroupAndDate(int groupNumber, DateTime date)
|
||||
{
|
||||
return _presenceRepository.GetPresenceByGroupAndDate(groupNumber, date);
|
||||
}
|
||||
|
||||
public void MarkUserAbsent(Guid userId, int groupNumber, int lessonId, DateTime date)
|
||||
{
|
||||
_presenceRepository.MarkUserAbsent(userId, groupNumber, lessonId, date);
|
||||
}
|
||||
}
|
||||
}
|
52
Demo1/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
52
Demo1/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using AttendanceApp.Data.Repository;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace AttendanceApp.Domain.UseCases
|
||||
{
|
||||
public class UseCaseGeneratePresence
|
||||
{
|
||||
private readonly IPresenceRepository _presenceRepository;
|
||||
private readonly IUserRepository _userRepository;
|
||||
private readonly IGroupRepository _groupRepository;
|
||||
|
||||
public UseCaseGeneratePresence(IPresenceRepository presenceRepository, IUserRepository userRepository, IGroupRepository groupRepository)
|
||||
{
|
||||
_presenceRepository = presenceRepository;
|
||||
_userRepository = userRepository;
|
||||
_groupRepository = groupRepository;
|
||||
}
|
||||
|
||||
public void GenerateDailyPresence(int firstClassNumber, int lastClassNumber, int groupId, DateTime date)
|
||||
{
|
||||
var group = _groupRepository.GetGroupById(groupId);
|
||||
var users = _userRepository.GetAllUsers().Where(u => u.GroupId == groupId);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
for (int classNum = firstClassNumber; classNum <= lastClassNumber; classNum++)
|
||||
{
|
||||
var presence = new Presence
|
||||
{
|
||||
ClassDate = date.Date,
|
||||
ClassNumber = classNum,
|
||||
IsPresent = true,
|
||||
UserId = user.Id
|
||||
};
|
||||
_presenceRepository.AddPresence(presence);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateWeeklyPresence(int firstClassNumber, int lastClassNumber, int groupId, DateTime startDate)
|
||||
{
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
var currentDate = startDate.AddDays(i);
|
||||
GenerateDailyPresence(firstClassNumber, lastClassNumber, groupId, currentDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
using Demo.Data.LocalData.Entity;
|
||||
using Demo.Domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Demo.Domain.UseCase
|
||||
{
|
||||
public class UseCasePresence
|
||||
{
|
||||
private List<StudentAttendance> _studentAttendances = new(); // Хранилище для посещаемости студентов
|
||||
|
||||
// Метод для добавления посещаемости по занятию
|
||||
public void AddLessonAttendance(LocalUser student, DateTime attendanceDate, int lessonId, bool isPresent)
|
||||
{
|
||||
var studentAttendance = new StudentAttendance(student.Id, 1) // Замените на 1, так как это один урок
|
||||
{
|
||||
AttendanceDate = attendanceDate,
|
||||
LessonId = lessonId,
|
||||
IsPresent = isPresent
|
||||
};
|
||||
_studentAttendances.Add(studentAttendance);
|
||||
}
|
||||
|
||||
// Метод для получения посещаемости по занятию
|
||||
public List<StudentAttendance> GetLessonAttendance(int lessonId)
|
||||
{
|
||||
return _studentAttendances.FindAll(sa => sa.LessonId == lessonId);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
|
||||
internal class UserModel
|
||||
{
|
||||
public string FIO { get; set; }
|
||||
public Guid Guid { get; set; }
|
||||
}
|
@ -1,16 +1,42 @@
|
||||
using Demo.Data.Repository;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using AttendanceApp.Data.Repository;
|
||||
using AttendanceApp.Domain.Models;
|
||||
|
||||
namespace Demo.Domain.UseCases
|
||||
namespace AttendanceApp.Domain.UseCases
|
||||
{
|
||||
public class UserUseCase
|
||||
{
|
||||
private UserRepositoryImpl _userRepository;
|
||||
private readonly IUserRepository _userRepository;
|
||||
|
||||
public UserUseCase(UserRepositoryImpl userRepository) // Конструктор
|
||||
public UserUseCase(IUserRepository userRepository)
|
||||
{
|
||||
_userRepository = userRepository;
|
||||
}
|
||||
|
||||
// Другие методы
|
||||
public IEnumerable<User> GetAllUsers()
|
||||
{
|
||||
return _userRepository.GetAllUsers();
|
||||
}
|
||||
|
||||
public User GetUserById(Guid id)
|
||||
{
|
||||
return _userRepository.GetUserById(id);
|
||||
}
|
||||
|
||||
public void AddUser(User user)
|
||||
{
|
||||
_userRepository.AddUser(user);
|
||||
}
|
||||
|
||||
public void UpdateUser(User user)
|
||||
{
|
||||
_userRepository.UpdateUser(user);
|
||||
}
|
||||
|
||||
public void DeleteUser(Guid id)
|
||||
{
|
||||
_userRepository.DeleteUser(id);
|
||||
}
|
||||
}
|
||||
}
|
367
Demo1/Program.cs
367
Demo1/Program.cs
@ -1,371 +1,14 @@
|
||||
using Demo.Data.LocalData;
|
||||
using Demo.Data.LocalData.Entity;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using AttendanceApp.UI;
|
||||
|
||||
namespace Demo
|
||||
namespace AttendanceApp
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
bool exit = false;
|
||||
|
||||
while (!exit)
|
||||
{
|
||||
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("0. Выход");
|
||||
Console.Write("Выберите опцию: ");
|
||||
|
||||
var choice = Console.ReadLine();
|
||||
|
||||
switch (choice)
|
||||
{
|
||||
case "1": ShowUsers(); break;
|
||||
case "2": DeleteUserByGuid(); break;
|
||||
case "3": UpdateUser(); break;
|
||||
case "4": FindUserByGuid(); break;
|
||||
case "5": ShowGroups(); break;
|
||||
case "6": AddGroup(); break;
|
||||
case "7": UpdateGroup(); break;
|
||||
case "8": DeleteGroupById(); break;
|
||||
case "9": FindGroupById(); break;
|
||||
case "10": GeneratePresenceForToday(); break;
|
||||
case "11": GeneratePresenceForWeek(); break;
|
||||
case "12": ShowPresenceByGroupAndDate(); break;
|
||||
case "13": MarkUserAsAbsent(); break;
|
||||
case "0": exit = true; break;
|
||||
default:
|
||||
Console.WriteLine("Неверный выбор. Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ShowUsers()
|
||||
{
|
||||
Console.Clear();
|
||||
foreach (var user in LocalStaticData.Users)
|
||||
{
|
||||
Console.WriteLine($"ID: {user.Id}, ФИО: {user.FIO}, GroupID: {user.GroupID}");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void DeleteUserByGuid()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите GUID пользователя для удаления: ");
|
||||
if (Guid.TryParse(Console.ReadLine(), out Guid userId))
|
||||
{
|
||||
var user = LocalStaticData.Users.FirstOrDefault(u => u.Id == userId);
|
||||
if (user != null)
|
||||
{
|
||||
LocalStaticData.Users.Remove(user);
|
||||
Console.WriteLine("Пользователь удалён.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Пользователь не найден.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void UpdateUser()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите GUID пользователя для обновления: ");
|
||||
if (Guid.TryParse(Console.ReadLine(), out Guid userId))
|
||||
{
|
||||
var user = LocalStaticData.Users.FirstOrDefault(u => u.Id == userId);
|
||||
if (user != null)
|
||||
{
|
||||
Console.Write("Введите новое ФИО: ");
|
||||
user.FIO = Console.ReadLine();
|
||||
Console.Write("Введите новый GroupID: ");
|
||||
if (int.TryParse(Console.ReadLine(), out int groupId))
|
||||
{
|
||||
user.GroupID = groupId;
|
||||
Console.WriteLine("Пользователь обновлён.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GroupID.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Пользователь не найден.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void FindUserByGuid()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите GUID пользователя для поиска: ");
|
||||
if (Guid.TryParse(Console.ReadLine(), out Guid userId))
|
||||
{
|
||||
var user = LocalStaticData.Users.FirstOrDefault(u => u.Id == userId);
|
||||
if (user != null)
|
||||
{
|
||||
Console.WriteLine($"ID: {user.Id}, ФИО: {user.FIO}, GroupID: {user.GroupID}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Пользователь не найден.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void ShowGroups()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("Список групп:");
|
||||
foreach (var group in LocalStaticData.Groups)
|
||||
{
|
||||
Console.WriteLine(group);
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void AddGroup()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите название группы для добавления: ");
|
||||
var groupName = Console.ReadLine();
|
||||
LocalStaticData.Groups.Add(groupName);
|
||||
Console.WriteLine("Группа добавлена.");
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void UpdateGroup()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите индекс группы для обновления (начиная с 0): ");
|
||||
if (int.TryParse(Console.ReadLine(), out int index) && index >= 0 && index < LocalStaticData.Groups.Count)
|
||||
{
|
||||
Console.Write("Введите новое название группы: ");
|
||||
LocalStaticData.Groups[index] = Console.ReadLine();
|
||||
Console.WriteLine("Группа обновлена.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный индекс группы.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void DeleteGroupById()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите индекс группы для удаления (начиная с 0): ");
|
||||
if (int.TryParse(Console.ReadLine(), out int index) && index >= 0 && index < LocalStaticData.Groups.Count)
|
||||
{
|
||||
LocalStaticData.Groups.RemoveAt(index);
|
||||
Console.WriteLine("Группа удалена.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный индекс группы.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void FindGroupById()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите индекс группы для поиска (начиная с 0): ");
|
||||
if (int.TryParse(Console.ReadLine(), out int index) && index >= 0 && index < LocalStaticData.Groups.Count)
|
||||
{
|
||||
Console.WriteLine($"Группа: {LocalStaticData.Groups[index]}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Группа не найдена.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void GeneratePresenceForToday()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите номер группы: ");
|
||||
var groupIdInput = Console.ReadLine();
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
var firstLesson = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
var lastLesson = int.Parse(Console.ReadLine());
|
||||
|
||||
var currentDate = DateTime.Now.Date;
|
||||
|
||||
// Преобразуйте groupIdInput в int для сравнения
|
||||
if (int.TryParse(groupIdInput, out int groupId))
|
||||
{
|
||||
// Получите идентификатор пользователя
|
||||
var user = LocalStaticData.Users.FirstOrDefault(u => u.GroupID == groupId);
|
||||
var userId = user != null ? user.Id : Guid.NewGuid(); // Если пользователь не найден, создайте новый идентификатор
|
||||
|
||||
// Создание посещаемости с параметрами
|
||||
var presence = new Presence(userId, currentDate, groupId, Enumerable.Range(firstLesson, lastLesson - firstLesson + 1).Select(lesson => true).ToList());
|
||||
|
||||
LocalStaticData.Presences.Add(presence);
|
||||
Console.WriteLine("Посещаемость сгенерирована для сегодняшнего дня.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Некорректный ввод номера группы.");
|
||||
}
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void GeneratePresenceForWeek()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите номер группы: ");
|
||||
var groupIdInput = Console.ReadLine();
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
var firstLesson = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
var lastLesson = int.Parse(Console.ReadLine());
|
||||
|
||||
var startDate = DateTime.Now.Date;
|
||||
|
||||
// Преобразуйте groupIdInput в int для сравнения
|
||||
if (int.TryParse(groupIdInput, out int groupId))
|
||||
{
|
||||
// Получите идентификатор пользователя
|
||||
var user = LocalStaticData.Users.FirstOrDefault(u => u.GroupID == groupId);
|
||||
var userId = user != null ? user.Id : Guid.NewGuid(); // Если пользователь не найден, создайте новый идентификатор
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
var currentDate = startDate.AddDays(i);
|
||||
// Создание посещаемости с параметрами
|
||||
var presence = new Presence(userId, currentDate, groupId, Enumerable.Range(firstLesson, lastLesson - firstLesson + 1).Select(lesson => true).ToList());
|
||||
LocalStaticData.Presences.Add(presence);
|
||||
}
|
||||
|
||||
Console.WriteLine("Посещаемость сгенерирована на текущую неделю.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Некорректный ввод номера группы.");
|
||||
}
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void ShowPresenceByGroupAndDate()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите номер группы: ");
|
||||
var groupId = Console.ReadLine();
|
||||
Console.Write("Введите дату (yyyy-MM-dd): ");
|
||||
if (DateTime.TryParse(Console.ReadLine(), out DateTime date))
|
||||
{
|
||||
var presence = LocalStaticData.Presences.FirstOrDefault(p => p.GroupID == int.Parse(groupId) && p.Date.Date == date);
|
||||
if (presence != null)
|
||||
{
|
||||
Console.WriteLine($"Посещаемость для группы {groupId} на {date.ToShortDateString()}:");
|
||||
for (int i = 0; i < presence.Lessons.Count; i++)
|
||||
{
|
||||
Console.WriteLine($"Занятие {i + 1}: {(presence.Lessons[i] ? "Присутствует" : "Отсутствует")}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Посещаемость не найдена.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат даты.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static void MarkUserAsAbsent()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.Write("Введите номер группы: ");
|
||||
var groupId = Console.ReadLine();
|
||||
Console.Write("Введите дату (yyyy-MM-dd): ");
|
||||
if (DateTime.TryParse(Console.ReadLine(), out DateTime date))
|
||||
{
|
||||
Console.Write("Введите GUID пользователя для отметки отсутствия: ");
|
||||
if (Guid.TryParse(Console.ReadLine(), out Guid userId))
|
||||
{
|
||||
var presence = LocalStaticData.Presences.FirstOrDefault(p => p.GroupID == int.Parse(groupId) && p.Date.Date == date);
|
||||
if (presence != null)
|
||||
{
|
||||
// Поиск занятия пользователя
|
||||
var userIndex = LocalStaticData.Users.FindIndex(u => u.Id == userId && u.GroupID.ToString() == groupId);
|
||||
if (userIndex >= 0)
|
||||
{
|
||||
presence.Lessons[userIndex] = false;
|
||||
Console.WriteLine("Пользователь отмечен как отсутствующий.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Пользователь не найден в этой группе.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Посещаемость не найдена.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат даты.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения.");
|
||||
Console.ReadKey();
|
||||
var mainMenu = new MainMenu();
|
||||
mainMenu.Show();
|
||||
}
|
||||
}
|
||||
}
|
154
Demo1/UI/GroupConsole.cs
Normal file
154
Demo1/UI/GroupConsole.cs
Normal file
@ -0,0 +1,154 @@
|
||||
using System;
|
||||
using AttendanceApp.Domain.UseCases;
|
||||
using AttendanceApp.Domain.Models;
|
||||
using AttendanceApp.Data.Exceptions;
|
||||
|
||||
namespace AttendanceApp.UI
|
||||
{
|
||||
public class GroupConsole
|
||||
{
|
||||
private readonly GroupUseCase _groupUseCase;
|
||||
|
||||
public GroupConsole(GroupUseCase groupUseCase)
|
||||
{
|
||||
_groupUseCase = groupUseCase;
|
||||
}
|
||||
|
||||
public void ShowAllGroups()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Список всех групп ===");
|
||||
var groups = _groupUseCase.GetAllGroups();
|
||||
foreach (var group in groups)
|
||||
{
|
||||
Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void AddGroup()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Добавление новой группы ===");
|
||||
Console.Write("Введите название группы: ");
|
||||
var groupName = Console.ReadLine();
|
||||
if (!string.IsNullOrWhiteSpace(groupName))
|
||||
{
|
||||
var newGroup = new Group
|
||||
{
|
||||
Id = GenerateNewGroupId(),
|
||||
Name = groupName
|
||||
};
|
||||
_groupUseCase.AddGroup(newGroup);
|
||||
Console.WriteLine("Группа успешно добавлена.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Название группы не может быть пустым.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
private int GenerateNewGroupId()
|
||||
{
|
||||
var groups = _groupUseCase.GetAllGroups();
|
||||
if (groups != null && groups.Any())
|
||||
{
|
||||
return groups.Max(g => g.Id) + 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
public void UpdateGroup()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Обновление группы ===");
|
||||
Console.Write("Введите ID группы: ");
|
||||
var input = Console.ReadLine();
|
||||
if (int.TryParse(input, 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 (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ID группы.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void DeleteGroup()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Удаление группы ===");
|
||||
Console.Write("Введите ID группы: ");
|
||||
var input = Console.ReadLine();
|
||||
if (int.TryParse(input, out int groupId))
|
||||
{
|
||||
try
|
||||
{
|
||||
_groupUseCase.DeleteGroup(groupId);
|
||||
Console.WriteLine("Группа успешно удалена.");
|
||||
}
|
||||
catch (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ID группы.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void FindGroupById()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Поиск группы по ID ===");
|
||||
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 (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ID группы.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,107 @@
|
||||
namespace Demo
|
||||
using AttendanceApp.Domain.UseCases;
|
||||
using AttendanceApp.Data.Repository;
|
||||
using Demo1;
|
||||
|
||||
namespace AttendanceApp.UI
|
||||
{
|
||||
public static class MainMenu
|
||||
public class MainMenu
|
||||
{
|
||||
public static void DisplayMenu() // Метод для отображения меню
|
||||
private readonly UserConsole _userConsole;
|
||||
private readonly GroupConsole _groupConsole;
|
||||
private readonly PresenceConsole _presenceConsole;
|
||||
|
||||
public MainMenu()
|
||||
{
|
||||
// Логика отображения меню
|
||||
Console.WriteLine("1. Показать пользователей");
|
||||
Console.WriteLine("2. Показать группы");
|
||||
// Добавь остальные опции по необходимости
|
||||
// Инициализация репозиториев и use cases
|
||||
var userRepository = new UserRepositoryImpl();
|
||||
var groupRepository = new GroupRepositoryImpl();
|
||||
var presenceRepository = new PresenceRepositoryImpl();
|
||||
|
||||
var userUseCase = new UserUseCase(userRepository);
|
||||
var groupUseCase = new GroupUseCase(groupRepository);
|
||||
var generatePresenceUseCase = new UseCaseGeneratePresence(presenceRepository, userRepository, groupRepository);
|
||||
|
||||
_userConsole = new UserConsole(userUseCase);
|
||||
_groupConsole = new GroupConsole(groupUseCase);
|
||||
_presenceConsole = new PresenceConsole(generatePresenceUseCase, presenceRepository, groupRepository);
|
||||
}
|
||||
|
||||
public void Show()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Меню ===");
|
||||
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("0. Выход");
|
||||
Console.Write("Выберите опцию: ");
|
||||
|
||||
var input = Console.ReadLine();
|
||||
switch (input)
|
||||
{
|
||||
case "1":
|
||||
_userConsole.ShowAllUsers();
|
||||
break;
|
||||
case "2":
|
||||
_userConsole.DeleteUser();
|
||||
break;
|
||||
case "3":
|
||||
_userConsole.UpdateUser();
|
||||
break;
|
||||
case "4":
|
||||
_userConsole.FindUserById();
|
||||
break;
|
||||
case "5":
|
||||
_groupConsole.ShowAllGroups();
|
||||
break;
|
||||
case "6":
|
||||
_groupConsole.AddGroup();
|
||||
break;
|
||||
case "7":
|
||||
_groupConsole.UpdateGroup();
|
||||
break;
|
||||
case "8":
|
||||
_groupConsole.DeleteGroup();
|
||||
break;
|
||||
case "9":
|
||||
_groupConsole.FindGroupById();
|
||||
break;
|
||||
case "10":
|
||||
_presenceConsole.GenerateDailyPresence();
|
||||
break;
|
||||
case "11":
|
||||
_presenceConsole.GenerateWeeklyPresence();
|
||||
break;
|
||||
case "12":
|
||||
_presenceConsole.ShowPresenceByGroupAndDate();
|
||||
break;
|
||||
case "13":
|
||||
_presenceConsole.MarkUserAbsent();
|
||||
break;
|
||||
case "14":
|
||||
_presenceConsole.ShowPresenceByGroup();
|
||||
break;
|
||||
case "0":
|
||||
return;
|
||||
default:
|
||||
Console.WriteLine("Неверная опция. Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
207
Demo1/UI/PresenceConsole.cs
Normal file
207
Demo1/UI/PresenceConsole.cs
Normal file
@ -0,0 +1,207 @@
|
||||
using System;
|
||||
using AttendanceApp.Domain.UseCases;
|
||||
using AttendanceApp.Data.Repository;
|
||||
using AttendanceApp.Domain.Models;
|
||||
using AttendanceApp.Data.Exceptions;
|
||||
|
||||
namespace AttendanceApp.UI
|
||||
{
|
||||
public class PresenceConsole
|
||||
{
|
||||
private readonly UseCaseGeneratePresence _generatePresenceUseCase;
|
||||
private readonly IPresenceRepository _presenceRepository;
|
||||
private readonly IGroupRepository _groupRepository;
|
||||
|
||||
public PresenceConsole(UseCaseGeneratePresence generatePresenceUseCase, IPresenceRepository presenceRepository, IGroupRepository groupRepository)
|
||||
{
|
||||
_generatePresenceUseCase = generatePresenceUseCase;
|
||||
_presenceRepository = presenceRepository;
|
||||
_groupRepository = groupRepository;
|
||||
}
|
||||
|
||||
public void GenerateDailyPresence()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Генерация посещаемости на текущий день ===");
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
var firstClassInput = Console.ReadLine();
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
var lastClassInput = Console.ReadLine();
|
||||
Console.Write("Введите ID группы: ");
|
||||
var groupIdInput = Console.ReadLine();
|
||||
var currentDate = DateTime.Now.Date;
|
||||
|
||||
if (int.TryParse(firstClassInput, out int firstClassNum) &&
|
||||
int.TryParse(lastClassInput, out int lastClassNum) &&
|
||||
int.TryParse(groupIdInput, out int groupId))
|
||||
{
|
||||
try
|
||||
{
|
||||
_generatePresenceUseCase.GenerateDailyPresence(firstClassNum, lastClassNum, groupId, currentDate);
|
||||
Console.WriteLine("Посещаемость успешно сгенерирована на текущий день.");
|
||||
}
|
||||
catch (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ввода.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void GenerateWeeklyPresence()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Генерация посещаемости на неделю ===");
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
var firstClassInput = Console.ReadLine();
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
var lastClassInput = Console.ReadLine();
|
||||
Console.Write("Введите ID группы: ");
|
||||
var groupIdInput = Console.ReadLine();
|
||||
Console.Write("Введите стартовую дату (yyyy-MM-dd): ");
|
||||
var startDateInput = Console.ReadLine();
|
||||
|
||||
if (int.TryParse(firstClassInput, out int firstClassNum) &&
|
||||
int.TryParse(lastClassInput, out int lastClassNum) &&
|
||||
int.TryParse(groupIdInput, out int groupId) &&
|
||||
DateTime.TryParse(startDateInput, out DateTime startDate))
|
||||
{
|
||||
try
|
||||
{
|
||||
_generatePresenceUseCase.GenerateWeeklyPresence(firstClassNum, lastClassNum, groupId, startDate);
|
||||
Console.WriteLine("Посещаемость успешно сгенерирована на неделю.");
|
||||
}
|
||||
catch (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ввода.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void ShowPresenceByGroupAndDate()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Показать посещаемость по группе и дате ===");
|
||||
Console.Write("Введите ID группы: ");
|
||||
var groupIdInput = Console.ReadLine();
|
||||
Console.Write("Введите дату (yyyy-MM-dd): ");
|
||||
var dateInput = Console.ReadLine();
|
||||
|
||||
if (int.TryParse(groupIdInput, out int groupId) &&
|
||||
DateTime.TryParse(dateInput, out DateTime date))
|
||||
{
|
||||
try
|
||||
{
|
||||
var group = _groupRepository.GetGroupById(groupId);
|
||||
var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
|
||||
Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:");
|
||||
foreach (var presence in presences)
|
||||
{
|
||||
Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.ClassNumber} | Присутствует: {presence.IsPresent}");
|
||||
}
|
||||
}
|
||||
catch (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ввода.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void MarkUserAbsent()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Отметить пользователя как отсутствующего ===");
|
||||
Console.Write("Введите ID пользователя (GUID): ");
|
||||
var userIdInput = Console.ReadLine();
|
||||
Console.Write("Введите диапазон занятий (через запятую, например: 1,3): ");
|
||||
var classRangeInput = Console.ReadLine();
|
||||
|
||||
if (Guid.TryParse(userIdInput, out Guid userId) &&
|
||||
classRangeInput.Contains(",") &&
|
||||
int.TryParse(classRangeInput.Split(',')[0], out int startClass) &&
|
||||
int.TryParse(classRangeInput.Split(',')[1], out int endClass))
|
||||
{
|
||||
try
|
||||
{
|
||||
var currentDate = DateTime.Now.Date;
|
||||
for (int classNum = startClass; classNum <= endClass; classNum++)
|
||||
{
|
||||
var presence = new Presence
|
||||
{
|
||||
ClassDate = currentDate,
|
||||
ClassNumber = classNum,
|
||||
IsPresent = false,
|
||||
UserId = userId
|
||||
};
|
||||
_presenceRepository.UpdatePresence(presence);
|
||||
}
|
||||
Console.WriteLine("Пользователь успешно отмечен как отсутствующий на указанных занятиях.");
|
||||
}
|
||||
catch (RepositoryException ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка: {ex.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ввода.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void ShowPresenceByGroup()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Показать посещаемость по группе ===");
|
||||
Console.Write("Введите ID группы: ");
|
||||
var groupIdInput = Console.ReadLine();
|
||||
|
||||
if (int.TryParse(groupIdInput, out int groupId))
|
||||
{
|
||||
try
|
||||
{
|
||||
var group = _groupRepository.GetGroupById(groupId);
|
||||
var presences = _presenceRepository.GetPresenceByGroup(groupId);
|
||||
Console.WriteLine($"Посещаемость группы {group.Name}:");
|
||||
|
||||
foreach (var presence in presences)
|
||||
{
|
||||
Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " +
|
||||
$"Занятие №{presence.ClassNumber} | " +
|
||||
$"Присутствует: {(presence.IsPresent ? "Да" : "Нет")} | " +
|
||||
$"Студент ID: {presence.UserId}");
|
||||
}
|
||||
}
|
||||
catch (GroupNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка: {ex.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат ID группы.");
|
||||
}
|
||||
|
||||
Console.WriteLine("\nНажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
using Demo.Domain.Models;
|
||||
|
||||
namespace Demo.UI
|
||||
{
|
||||
public class UserConsole
|
||||
{
|
||||
private readonly Demo.Domain.Models.User user;
|
||||
|
||||
public UserConsole(Demo.Data.LocalData.Entity.LocalUser entityUser) // Принимаем Entity User
|
||||
{
|
||||
// Преобразуем entityUser в Domain User
|
||||
this.user = (Demo.Domain.Models.User)entityUser;
|
||||
}
|
||||
|
||||
public void DisplayUserInfo()
|
||||
{
|
||||
Console.WriteLine($"Имя: {user.FullName}, ID: {user.Id}");
|
||||
}
|
||||
}
|
||||
}
|
125
Demo1/UserConsole.cs
Normal file
125
Demo1/UserConsole.cs
Normal file
@ -0,0 +1,125 @@
|
||||
using System;
|
||||
using AttendanceApp.Domain.UseCases;
|
||||
using AttendanceApp.Domain.Models;
|
||||
using AttendanceApp.Data.Exceptions;
|
||||
|
||||
namespace Demo1
|
||||
{
|
||||
public class UserConsole
|
||||
{
|
||||
private readonly UserUseCase _userUseCase;
|
||||
|
||||
public UserConsole(UserUseCase userUseCase)
|
||||
{
|
||||
_userUseCase = userUseCase;
|
||||
}
|
||||
|
||||
public void ShowAllUsers()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Список всех пользователей ===");
|
||||
var users = _userUseCase.GetAllUsers();
|
||||
foreach (var user in users)
|
||||
{
|
||||
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа ID: {user.GroupId}");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void DeleteUser()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Удаление пользователя ===");
|
||||
Console.Write("Введите GUID пользователя: ");
|
||||
var input = Console.ReadLine();
|
||||
if (Guid.TryParse(input, out Guid userId))
|
||||
{
|
||||
try
|
||||
{
|
||||
_userUseCase.DeleteUser(userId);
|
||||
Console.WriteLine("Пользователь успешно удалён.");
|
||||
}
|
||||
catch (UserNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void UpdateUser()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Обновление пользователя ===");
|
||||
Console.Write("Введите GUID пользователя: ");
|
||||
var input = Console.ReadLine();
|
||||
if (Guid.TryParse(input, out Guid userId))
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = _userUseCase.GetUserById(userId);
|
||||
Console.WriteLine($"Текующее ФИО: {user.FIO}");
|
||||
Console.Write("Введите новое ФИО (оставьте пустым для сохранения текущего): ");
|
||||
var newFIO = Console.ReadLine();
|
||||
if (!string.IsNullOrWhiteSpace(newFIO))
|
||||
{
|
||||
user.FIO = newFIO;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Текущая группа ID: {user.GroupId}");
|
||||
Console.Write("Введите новый Group ID (оставьте пустым для сохранения текущего): ");
|
||||
var newGroupIdInput = Console.ReadLine();
|
||||
if (int.TryParse(newGroupIdInput, out int newGroupId))
|
||||
{
|
||||
user.GroupId = newGroupId;
|
||||
}
|
||||
|
||||
_userUseCase.UpdateUser(user);
|
||||
Console.WriteLine("Пользователь успешно обновлён.");
|
||||
}
|
||||
catch (UserNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
public void FindUserById()
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("=== Поиск пользователя по GUID ===");
|
||||
Console.Write("Введите GUID пользователя: ");
|
||||
var input = Console.ReadLine();
|
||||
if (Guid.TryParse(input, out Guid userId))
|
||||
{
|
||||
try
|
||||
{
|
||||
var user = _userUseCase.GetUserById(userId);
|
||||
Console.WriteLine($"ID: {user.Id} | ФИО: {user.FIO} | Группа ID: {user.GroupId}");
|
||||
}
|
||||
catch (UserNotFoundException ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Неверный формат GUID.");
|
||||
}
|
||||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Demo1")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+df8314a5edf631ad091dc7bfca86e0f6f5c724cb")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+aa3336ca1b11c1685b7d76482c3b1b14608267a3")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Demo1")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Demo1")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
@ -1 +1 @@
|
||||
221e0c768b0d742a8ba97ec496228ed7816062bae551ae6dca0fa140cf72a07e
|
||||
40dc55726398d581826007a1a5883ce5e0fdddf730f9f50a2bf471c9f635d905
|
||||
|
@ -8,6 +8,6 @@ build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Demo1
|
||||
build_property.ProjectDir = C:\Users\class_Student\Source\Repos\slarny4\Demo1\
|
||||
build_property.ProjectDir = C:\Users\prdb\source\repos\slarny4\Demo1\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
1d50d3593a629a5dd88b49d245e89f299208f24874e2084a9b532f66739617bd
|
||||
5d4a55edd9d214d3ff28a518ab18442791e4dd2a2a9a71ab193e8c59dd5b546e
|
||||
|
@ -26,3 +26,17 @@ C:\Users\class_Student\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.dll
|
||||
C:\Users\class_Student\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.pdb
|
||||
C:\Users\class_Student\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.genruntimeconfig.cache
|
||||
C:\Users\class_Student\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\ref\Demo1.dll
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.exe
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.deps.json
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.runtimeconfig.json
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.dll
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\bin\Debug\net8.0\Demo1.pdb
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.AssemblyInfoInputs.cache
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.AssemblyInfo.cs
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.csproj.CoreCompileInputs.cache
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.dll
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\refint\Demo1.dll
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.pdb
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\Demo1.genruntimeconfig.cache
|
||||
C:\Users\prdb\Source\Repos\slarny4\Demo1\obj\Debug\net8.0\ref\Demo1.dll
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
efacd2456a8517402d3b53b9ec65ae943b078068dce16d9c1e2c139cbb2efa47
|
||||
e50ae4bf7831d90ecaca8867ac9c11e9f8406a06bd388d07cb6606821f2f7100
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,24 +1,20 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj": {}
|
||||
"C:\\Users\\prdb\\source\\repos\\slarny4\\Demo1\\Demo1.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj": {
|
||||
"C:\\Users\\prdb\\source\\repos\\slarny4\\Demo1\\Demo1.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"projectUniqueName": "C:\\Users\\prdb\\source\\repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"projectName": "Demo1",
|
||||
"projectPath": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"packagesPath": "C:\\Users\\class_Student\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\obj\\",
|
||||
"projectPath": "C:\\Users\\prdb\\source\\repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"packagesPath": "C:\\Users\\prdb\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\prdb\\source\\repos\\slarny4\\Demo1\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\class_Student\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Users\\prdb\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
@ -26,7 +22,6 @@
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
@ -65,7 +60,7 @@
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.204/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.203/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,12 +5,11 @@
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\class_Student\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\prdb\.nuget\packages\</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.9.2</NuGetToolVersion>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.9.1</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="C:\Users\class_Student\.nuget\packages\" />
|
||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||
<SourceRoot Include="C:\Users\prdb\.nuget\packages\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -8,24 +8,19 @@
|
||||
"net8.0": []
|
||||
},
|
||||
"packageFolders": {
|
||||
"C:\\Users\\class_Student\\.nuget\\packages\\": {},
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
|
||||
"C:\\Users\\prdb\\.nuget\\packages\\": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"projectUniqueName": "C:\\Users\\prdb\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"projectName": "Demo1",
|
||||
"projectPath": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"packagesPath": "C:\\Users\\class_Student\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\obj\\",
|
||||
"projectPath": "C:\\Users\\prdb\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"packagesPath": "C:\\Users\\prdb\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\prdb\\Source\\Repos\\slarny4\\Demo1\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\class_Student\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Users\\prdb\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
@ -33,7 +28,6 @@
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
@ -72,7 +66,7 @@
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.204/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.203/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "w2AQ9bufhayfzTHCnl2ow9D2CtoWJ4HAqBkDoNcbSKD2lmZQ/k0JRgy5fID2BknPulzXAnFoyjXkQhKMewdlLQ==",
|
||||
"dgSpecHash": "MKsvMEFBZlOYacbOsE3EQuFzAQ4xpAuoe3utlzPRhVh/aHX1gO9yBO/IcbiHqNdf6lPRFQGRzE3l/jJIX8Sk6g==",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\class_Student\\Source\\Repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"projectFilePath": "C:\\Users\\prdb\\source\\repos\\slarny4\\Demo1\\Demo1.csproj",
|
||||
"expectedPackageFiles": [],
|
||||
"logs": []
|
||||
}
|
Loading…
Reference in New Issue
Block a user