Скриншот архива с проектом

Структура проекта

Задание
Спроектировать базу данных и приложение к ней на C# WPF для решения задачи регистрации входящих писем. Программный продукт должен обладать удобныи и понятным интерфейсом и функционалом указанным ниже.
Функционал программы
- Регистрация, авторизация пользователей
- Кабинет пользователя
- Учёт отправителей
- Учёт получателей
- Учёт ответственных сотрудников
- Учёт входящих писем
- Поиск по всем сущностям
- Экспорт и чтение XML для всех сущностей
Фрагмент программного кода
// Подключаем необходимые пространства имен
using EmailRegistration.BL.Entities.Letters; // Класс письма
using EmailRegistration.BL.Interfaces; // Интерфейсы для доступа к репозиториям
using System.Linq; // LINQ для запросов к коллекции
using System.Windows; // Элементы пользовательского интерфейса WPF
namespace EmailRegistration.UI
{
/// <summary>
/// Логика взаимодействия для AddLettersWindow.xaml
/// Окно для добавления или редактирования письма
/// </summary>
public partial class AddLettersWindow : Window
{
// Массив возможных типов писем
private static readonly string[] Letters = { "Бумажное", "Электронное" };
// Интерфейсы доступа к различным репозиториям
private readonly ILetterRepository _letterRepository; // Репозиторий писем
private readonly ISenderRepository _senderRepository; // Репозиторий отправителей
private readonly IRecipientRepository _recipientRepository; // Репозиторий получателей
private readonly IEmployeeRepository _employeeRepository; // Репозиторий сотрудников
// Текущее письмо, которое обрабатывается (редактируется или добавляется)
private Letter _letter;
// Конструктор окна
public AddLettersWindow(ILetterRepository letterRepository, ISenderRepository senderRepository,
IRecipientRepository recipientRepository, IEmployeeRepository employeeRepository, Letter letter = null)
{
InitializeComponent(); // Инициализация элементов интерфейса
_letterRepository = letterRepository; // Настройка ссылок на репозитории
_senderRepository = senderRepository;
_recipientRepository = recipientRepository;
_employeeRepository = employeeRepository;
// Данные для выпадающих списков
CmbTypeLetter.ItemsSource = Letters; // Типы писем
CmbTypeLetter.SelectedIndex = 0; // Выбираем первый пункт по умолчанию
// Выбор значений для остальных выпадающих списков
CmbSenderName.ItemsSource = _senderRepository.GetAll().Select(s => s.Name).ToList(); // Отправители
CmbRecipientName.ItemsSource = _recipientRepository.GetAll().Select(r => r.Name).ToList(); // Получатели
CmbEmployee.ItemsSource = _employeeRepository.GetAll().Select(e => e.FullName).ToList(); // Сотрудники
// Если передано существующее письмо, устанавливаем его данные
if (letter != null)
{
_letter = letter;
PopulateFields(letter); // Заполнение полей окном
}
else
{
_letter = new Letter(); // Создаем новый объект письма
}
}
// Метод для установки данных письма в поля формы
private void PopulateFields(Letter letter)
{
TxtRegNumber.Text = letter.RegNumber; // Регистрационный номер
CmbSenderName.Text = letter.SenderName; // Имя отправителя
DtpDispatchDate.SelectedDate = letter.DispatchDate; // Дата отправления
CmbRecipientName.Text = letter.RecipientName; // Имя получателя
DtpReceiptDate.SelectedDate = letter.ReceiptDate; // Дата получения
CmbEmployee.Text = letter.Employee; // Сотрудник, ответственный за регистрацию
DtpRegistrationDate.SelectedDate = letter.RegistrationDate; // Дата регистрации
CmbTypeLetter.SelectedItem = letter.TypeLetter; // Тип письма
}
// Обработчик события нажатия кнопки "Сохранить"
private void BtnSave_Click(object sender, RoutedEventArgs e)
{
// Заполняем объект письма данными из полей формы
_letter.RegNumber = TxtRegNumber.Text;
_letter.SenderName = CmbSenderName.SelectedItem as string;
_letter.DispatchDate = DtpDispatchDate.SelectedDate.Value;
_letter.RecipientName = CmbRecipientName.SelectedItem as string;
_letter.ReceiptDate = DtpReceiptDate.SelectedDate.Value;
_letter.Employee = CmbEmployee.SelectedItem as string;
_letter.RegistrationDate = DtpRegistrationDate.SelectedDate.Value;
_letter.TypeLetter = CmbTypeLetter.SelectedItem.ToString();
// Добавляем или обновляем письмо в зависимости от наличия ID
if (_letter.LetterID == 0)
_letterRepository.Add(_letter); // Добавляем новое письмо
else
_letterRepository.Update(_letter); // Обновляем существующее письмо
DialogResult = true; // Сигнал успеха
Close(); // Закрываем окно
}
// Обработчик события нажатия кнопки "Отменить"
private void BtnCancel_Click(object sender, RoutedEventArgs e)
{
DialogResult = false; // Операция отменена
Close(); // Закрываем окно
}
}
}
Пояснения по запуску программы
1. Скачать и установить SSMS 2. Установить Visual Studio 2022 Community 3. Настроить программу см Инструкцию. 4. Присоединить БД или выполнить миграции заново (см. Инструкцию). 5. Запустить код.
Телеграм
-