Задание
Необходимо разработать программное средство для автоматизация приема и анализа заявок технической поддержки.
Программа должна включать в себя возможность авторизации пользователя с последующей работой с заявками системы.
Технологии: 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 для входа в программу.
Структура проекта
kostyaLem