Задание
Необходимо разработать программное средство для автоматизация приема и анализа заявок технической поддержки.
Программа должна включать в себя возможность авторизации пользователя с последующей работой с заявками системы.
Технологии: C#, WPF (.NET 6) + MVVM, SQL Server 2019.
Для симпатичного интерфейса подключен пакет HandyControl, обеспечивающий современный вид элементов управления на интерфейсе пользователя.
Функционал программы
Для решения задачи были реализованы следующие функциональные возможности:
- Авторизации пользователя;
- Управление пользователями;
- Управления категориями заявок;
- Управление отделами технической поддержки;
- Создание заявок технической поддержки;
- Управление заявками;
Каждая функциональная возможность также требует наличия окна редактирования сущности.
Управление системой разделено на Администратора и Специалиста технической поддержки.
Содержание записки (91 страница)
- ВВЕДЕНИЕ. 9
- ГЛАВА 1. АНАЛИТИЧЕСКАЯ ЧАСТЬ.. 11
- 1.1. Технико-экономическая характеристика предметной области и предприятия. Анализ деятельности «КАК ЕСТЬ». 11
- 1.1.1. Характеристика предприятия и его деятельности. 11
- 1.1.2. Организационная структура ООО «Озон Технологии». 12
- 1.1.3. Программная и техническая архитектура ИС предприятия. 13
- 1.2. Характеристика комплекса задач, задачи и обоснование необходимости автоматизации.. 15
- 1.2.1. Выбор комплекса задач автоматизации и характеристика существующих бизнес процессов 15
- 1.2.2. Определение места проектируемой задачи в комплексе задач и ее описание. 17
- 1.2.3. Обоснование необходимости использования вычислительной техники для решения задачи 19
- 1.2.4. Анализ системы обеспечения информационной безопасности и защиты информации. 21
- 1.3. Анализ существующих разработок и выбор стратегии автоматизации «КАК ДОЛЖНО БЫТЬ». 24
- 1.3.1. Анализ существующих разработок для автоматизации задачи. 24
- 1.3.2. Выбор и обоснование стратегии автоматизации задачи. 29
- 1.3.3. Выбор и обоснование способа приобретения ИС для автоматизации задачи. 31
- 1.4. Обоснование проектных решений.. 33
- 1.4.1. Обоснование проектных решений по информационному обеспечению.. 33
- 1.4.2. Обоснование проектных решений по программному обеспечению.. 38
- 1.4.3. Обоснование проектных решений по техническому обеспечению.. 44
- ГЛАВА 2. ПРОЕКТНАЯ ЧАСТЬ.. 47
- 2.1. Разработка проекта автоматизации.. 47
- 2.1.1. Этапы жизненного цикла проекта автоматизации. 47
- 2.1.2. Ожидаемые риски на этапах жизненного цикла и их описание. 51
- 2.1.3. Организационно-правовые и программно-аппаратные средства обеспечения информационной безопасности и защиты информации. 54
- 2.2. Информационное обеспечение задачи.. 56
- 2.2.1. Информационная модель и её описание. 56
- 2.2.2. Характеристика нормативно-справочной, входной и оперативной информации. 57
- 2.2.3. Характеристика результатной информации. 59
- 2.3. Программное обеспечение задачи.. 60
- 2.3.1. Общие положения (дерево функций и сценарий диалога). 60
- 2.3.2. Характеристика базы данных. 61
- 2.3.3. Структурная схема пакета (дерево вызова программных модулей). 65
- 2.3.4. Описание программных модулей. 65
- 2.4. Контрольный пример реализации проекта и его описание. 66
- ГЛАВА 3. ОБОСНОВАНИЕ ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ПРОЕКТА.. 73
- 3.1. Выбор и обоснование методики расчёта экономической эффективности 73
- 3.2. Расчёт показателей экономической эффективности проекта. 76
- ЗАКЛЮЧЕНИЕ. 80
- СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ.. 82
- ПРИЛОЖЕНИЯ.. 84
Фрагмент программного кода
/// <summary>
/// Класс авторизации пользователя в системе с UI
/// </summary>
public sealed class AuthViewModel : BaseViewModel
{
private readonly IAuthorizationService _authService;
private readonly IServiceProvider _serviceProvider;
public override string Title => "Авторизация";
// Логин пользователя
public string Login
{
get => GetValue<string>(nameof(Login));
set => SetValue(value, nameof(Login));
}
public ICommand LoginCommand { get; }
public AuthViewModel(IAuthorizationService authSerivce, IServiceProvider serviceProvider)
{
_authService = authSerivce;
_serviceProvider = serviceProvider;
LoginCommand = new AsyncCommand<object>(TryLogin, x => !string.IsNullOrWhiteSpace(Login));
}
// Метод авторизации пользователя
public async Task TryLogin(object passwordControl)
{
await Execute(async () =>
{
var pswrdBox = (PasswordBox)passwordControl;
// Проверка полей
if (string.IsNullOrWhiteSpace(Login) || string.IsNullOrWhiteSpace(pswrdBox.Password))
{
MessageBox.Error("Заполните все поля.", "Ошибка авторизации");
return;
}
try
{
// Попытка авторизовать пользователя
var user = await _authService.Authorize(Login, pswrdBox.Password);
// Установка текущего пользователя
App.CurrentUser = user;
// Отображение окна с меню
_serviceProvider.GetRequiredService<MainView>().Show();
// Закрыть окно авторизации
App.Current.Windows[0].Close();
}
catch (AuthorizeException)
{
MessageBox.Error("Неверный логин или пароль.", "Ошибка авторизации");
}
catch (UserNotFoundAuthorizeException)
{
MessageBox.Error("Пользователь с таким логином и паролем не существует.", "Ошибка авторизации");
}
catch (Exception e)
{
MessageBox.Error(e.Message, "Внутренняя ошибка");
}
});
}
}
/// <summary>
/// Сервис для авторизации пользователей в системе
/// </summary>
internal class AuthorizationService : IAuthorizationService
{
private readonly TechSupportContext _context;
public AuthorizationService(TechSupportContext context)
{
_context = context;
}
/// <summary>
/// Метод авторизации пользователя
/// </summary>
/// <param name="nickname">Логин</param>
/// <param name="password">Пароль</param>
public async Task<CurrentUser> Authorize(string nickname, string password)
{
// Преобразование пароля в хэш
var passwordHash = PasswordGenerator.Generate(password);
// Поиск пользователя в базе
var user = await _context.Users.FirstOrDefaultAsync(x => x.Login == nickname);
if (user is null)
{
// Выбросить исключение, если пользователь не найден
throw new UserNotFoundAuthorizeException();
}
if (user.PasswordHash != passwordHash)
{
// Выбросить исключение, если пароль не совпадает
throw new AuthorizeException();
}
// Преобразование модели
return user.ToCurrentUser();
}
}
Скриншот архива с проектом

Пояснения по запуску программы
Для запуска программы должны быть установлены следующие компоненты:
- Visual Studio 2019;
- .NET 6;
- SQL Server (Local Db).
Всё это можно установить в установщике Visual Studio Installer при установке Visual Studio 2019.
После просто открыть проект и запустить программу. База автоматически создастся с пользователем admin для входа в программу.
Структура проекта

Структура таблиц в базе данных

IDEFx диаграммы

Телеграм
-