Вы находитесь на странице: 1из 39

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ ДНР

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ


ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ»

Факультет Физико-технический
Кафедра Компьютерных технологий (КТ)

Зав. кафедрой КТ
____________ Т. В. Ермоленко
(подпись)

«___» ____________ 2020 г.

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе бакалавра 2 курса
на тему:

ПРИЛОЖЕНИЕ АВТОМАТИЗАЦИИ УЧЕТА НА АВТОМОБИЛЬНОЙ


СТОЯНКЕ

Автор работы В.С. Подборский


подпись

Направление 09.03.0 Информатика и вычислительная техника


1
Руководитель работы ________________ Ассистент Лысых Я.А.
подпись

Консультанты по разделам:

Техническое задание ____________________ доцент Т.В. Шарий


подпись

Нормоконтроль ____________________ ст. лаборант В.Г. Медведева


подпись

Курсовая работа защищена __________ ___________________


дата итоговая оценка комиссия

Подписи членов комиссии: __________________


__________________
__________________
__________________
Донецк
2020
ГОУ ВПО «Донецкий национальный университет»
кафедра Компьютерных технологий
Утверждаю
Зав. кафедрой КТ
_____________
подпись

_____________
дата

ЗАДАНИЕ

на курсовую работу студента 2 курса В.С. Подборского.


Тема курсовой работы: Разработка программы для автоматизации учета на автостоянках
вьездов и выездов клиентов, контроля работы сотрудников.
Краткая постановка задачи: 1. Изучить и проанализировать предметную область и
используемый документооборот. 2. Ознакомиться с программной документацией для
платформы Windows Forms. 3. Разработать техническое задание на создание приложения.
4. Разработать проект программного обеспечения системы. 5. Разработать средствами
языка C# приложение, которое позволяет осуществлять учет посещения автостоянки
клиентами, а также накапливать клиентскую базу. 6. Протестировать программное
обеспечение. 7. Оформить отчёт.
Исходные данные: 1. Документация по работе автостоянки. 2. Документация по языку
программирования C#.
Ожидаемые результаты: приложение для обработки текста и работы с файлами
Календарный план работы:
Даты Отметки о
консультаци Этапы выполнения работы выполнени
й и
03.02.2020 Постановка задачи и обсуждение литературы выполнено
06.02.2020 Предварительное утверждение содержания отчёта выполнено
18.02.2020 Утверждение проекта, алгоритмов, методов, выполнено
технологий
02.03.2020 Ход реализации проекта выполнено
29.04.2020 Обсуждения организации тестирования выполнено
программы
30.04.2020 Предоставление отчёта руководителю выполнено

Дата выдачи задания 03.02.2020 года


Студент В.С. Подборский
Руководитель Лысых Я.А.
АННОТАЦИЯ

Отчет о курсовой работе: 39 с., 8 рис., 4 табл., 2 приложения,


5 источников.
Объект исследования – возможности автоматизации учета автостоянки.
Предмет исследования – автоматизация ведения учете автостоянки,
накапливание клиентской базы предприятия.
Цель работы – разработка приложения для сотрудников автостоянки,
которое позволяло бы облегчить повседневный труд.
Метод исследования – анализ возможностей языка С# для создания и
обработки данных в формате JSON.
В работе были использованы возможности Windows Forms, .NET
Framework.
В результате решения задачи было разработано приложение для
автоматизации учета посещения клиентов автостоянки.
Главный модуль приложения работает с документами, хранящими
информации предприятия. Главной операцией приложения является ведение
электронного документооборота.
Приложение может использоваться преподавателями для генерации
индивидуального плана.
СОДЕРЖАНИЕ

ВВЕДЕНИЕ..........................................................................................................................................5

1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ................................................................7


1.1 Состояние вопроса.........................................................................................7
1.2 Актуальность и цель работы.........................................................................8
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ...............................................................................9
2.2 Требования к пользовательским интерфейсам............................................9
2.3 Требования к аппаратным, программным и коммуникационным
интерфейсам.......................................................................................................10
2.4 Требования к пользователям продукта......................................................11
2.5 Требования к адаптации на месте...............................................................11
2.6 Функции продукта........................................................................................11
2.7 Ограничения..............................................................................................13
3 ОБОСНОВАНИЕ ВЫБОРА ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ..............14
4 РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ АВТОМАТИЗАЦИИ УЧЕТА НА
АВТОСТОЯНКАХ................................................................................................15
4.1 Входные и выходные данные приложения................................................15
4.2 Проектирование структуры приложения..................................................15
4.3 Описание объектов и их взаимодействия..................................................18
5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА.....................................24
5.1 Аппаратные и программные средства создания и эксплуатации
приложения.........................................................................................................24
5.2 Руководство пользователя...........................................................................24
5.3 Описание контрольных примеров..............................................................25
ЗАКЛЮЧЕНИЕ.....................................................................................................29
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ............................................30
ПРИЛОЖЕНИЕ А Экранные формы.................................................................31
ПРИЛОЖЕНИЕ Б Фрагменты листинга.............................................................33

4
ВВЕДЕНИЕ

В современном мире любое предприятие стремится к автоматизации


своих процессов, что позволит уменьшить временные затраты и получать
больше прибыли с меньшими нагрузками. Не исключение и автостоянки,
которым способствует глобальная автомобилизация, что подразумевает
оснащенность населения нашей планеты автомобильными средствами.
Человеку всегда нужно было хранить где-то большое количество
информации. Вначале это были примитивные способы, как наскальные
рисунки или устные пересказы. Затем человек изобрел бумагу, и хранить
разнообразную информацию стало намного проще. Но при создании
электронных вычислительных машин хранение и сортировка информации
вышла на концептуально новый уровень.
Создание информационных систем помогло сгруппировать и
настроить автоматизацию использования данных. Именно этот прорыв
позволил нам сейчас так просто обращаться с информацией любого рода.
Ежегодно на дорогах мира появляется более 20 миллионов новых
автомобилей. Население городов растет быстрыми темпами, увеличивая
потребление автотранспорта. В связи этим возникают проблемы с хранением
автомобилей, которые сказываются на окружающей среде и общем
состоянии городской жизни.
По статистике, до 95% своего времени каждый автомобиль проводит на
парковке. Но в последние годы в больших городах наблюдается острый
дефицит парковочных мест, особенно в районах большого скопления людей
– торговых центров, рынков, аэропортов, вокзалов, стадионов.
Ставя перед собой цель – удовлетворить спрос на авто-место в крупных
мегаполисах и вести четкий учет потребления собственных услуг, компании

5
обращаются к компьютерным технологиям, которые позволяют наглядно
анализировать данные, в отличии от бумажных бланков.
После перехода от бумажного ведения учета автостоянки к
электронному, предприятие получает возможность получать свежие данные
по почте или синхронизировать с главным сервером для дальнейшего
анализа и прогнозирования расходов и доходов компании. Это позволит
доказывать свою конкурентно-способность, а также привлекать инвестиции
на основе обработанных данных за продолжительный срок.
В данной курсовой работе будет реализовано приложение, которое
позволит компаниям автоматизировать свою работу, потратив на это всего
пару минут вместо нескольких часов рутины. Далее представлена разработка
приложения, реализующая выше поставленную задачу.

6
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

1.1 Состояние вопроса

Власти продолжают целенаправленно бороться с незаконной


парковкой, законодательство в этой области ужесточается, и людей, готовых
рискнуть и припарковаться в неположенном месте, становится все меньше.
Поэтому создание новых парковочных мест просто необходимо.
Повышение эффективности функционирования предприятий
невозможно без внедрения современных методов управления, базирующихся
на автоматизированных информационных системах управления
предприятиями.
В настоящее время под автоматизированными парковочными
системами принято рассматривать программно-аппаратные комплексы,
которые автоматизируют процессы въезда и выезда на огороженную
территорию парковочного пространства с взиманием платы.
Благодаря гибкой системе учета, программа для автостоянки позволяет
удобно вести учет всех клиентов автостоянки, данных об их транспортных
средствах, контролировать процесс заездов и выездов, контролировать
оплату услуг, получать информацию по должникам, информацию по
заполняемости территории автостоянки, а так же получение отчетов по всем
данным.
Есть ряд весомых причин, для чего нужны такие информационные
системы:
1. Использование автоматизированной парковки во многих случаях
позволяет полностью избавится от затрат на дополнительные расходы в том
числе сотрудников, которые управляют процессами вручную;
2. Нерациональное использование парковочного пространства;
3. Недобросовестность персонала и т.д.
7
Для качественного сервиса и получения прибыли такие стали
программы актуальными для предпринимателей, они позволяют получить
большую прибыль, а также сократить затраты времени на учет и введение
бухгалтерии.

1.2 Актуальность и цель работы

Данная программа поможет избавиться от лишних затрат, от гор


бумажной волокиты. Следовательно, увеличить прибыль, упростить сбор
нужных данных, а также введение полноценного учета для которого больше
не нужны дополнительные затраты на времени.
На основании вышенаписанного, можно сделать вывод, что
актуальность создаваемого продукта полностью оправдана.
Целью же данного проекта является создание удобного решения для
автоматизации работы данных предприятий и повышение продуктивности
персонала, путем сокращения затрат на ручную работу.
Исходя из указанной цели, можно выделить частные задачи,
поставленные в работе:
1. провести детальный анализ предметной области. Изучить
механизм работы автостоянок и авто-паркингов, выделить ключевые
моменты;
2. изучить технологии: платформу Windows Forms, язык
программирования C#, Microsoft Visual Studio;
3. изучить форматы хранения данных в файловой системе и
способы работы с ними;
4. разработать архитектуру приложения и функционал программы,
соответствующий техническому заданию;
5. разработать рабочее приложение, которое предоставляет
функционал, описанный в техническом задании.
8
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ

2.1 Описание области применения и исходных данных приложения

Данное приложение предназначено для использования сотрудниками


автостоянки для учета посещения клиентов автостоянки.
В системе должна обрабатываться и отображаться следующая
информация:
1) данные клиентов;
2) данные о сотрудников;
3) учет въездов и выездов автомобилей;
Исходными данными для приложения являются:
1) файлы с данными автостоянки (.json);

2.2 Требования к пользовательским интерфейсам

Пользовательский интерфейс должен разрабатываться под разрешение


экрана 800х600 и более. Окна должны обладать системным меню с кнопкой
закрытия.
Требования к окнам приложения:
Главное окно, в котором должны быть разделы:
1) главное окно должно быть разделено на вкладки по типу данных,
данные на вкладках отображаются в виде таблиц;
2) чтение считанных данных из файла. При переходе на новую вкладку
раздела должны загружаться данные из файла и выводиться в таблицу;
3) добавление новых данных в систему. Реализуется возможность
добавления новых данных пользователем в систему, в соответствии с
выбранной вкладкой;

9
4) изменение существующих данных в системе. Предоставляет
пользователю возможность изменить существующие данные путем
редактирования значений в таблице;
5) удаление данных из системы. Данная функциональная возможность
позволит удалять некорректные и устаревшие данные из системы;
Окно входа, должно содержать:
1) поля для входа сотрудников;
2) кнопки «Вход» и «Регистрация»;
3) поле с сообщением о некорректном входе, если пользователь ввел
неправильные данные появится сообщение об ошибке.
Окно регистрации, должно содержать:
1) поля для регистрации новых сотрудников в системе;
2) кнопка «Регистрация»;
После успешного входа или регистрации пользователь попадает на главную
форму, на которой может работать с данными.

2.3 Требования к аппаратным, программным и


коммуникационным интерфейсам

Для установки и работы приложения необходимо иметь


вычислительную систему следующей минимальной аппаратной
конфигурации:
1) процессор: 1.6 ГГц;
2) оперативная память: 1 Гб;
3) свободное место на жёстком диске: 200 Мб;
4) наличие основных средств ввода-вывода (мышь, клавиатура,
монитор);
5) операционная система: Windows 7, 8, 8.1, 10;
6) платформа.NET Framework 4.7.
10
2.4 Требования к пользователям продукта

1) Владение компьютером на уровне пользователя


2) Понимание принципов работы с манипуляторами
3) Заполнение правильными данными таблицы учета

2.5 Требования к адаптации на месте

Для адаптации на месте необходим программист для установки и


начальной настройки приложения на компьютерах предприятия.

2.6 Функции продукта

Основной функционал продукта:


1) ведение учета посещения автостоянки;
2) редактирование существующих данных.

Сценарий «Вход»
1) после запуска приложения, пользователь попадает на форму
«Входа»;
2) пользователь заполняет необходимые поля для авторизации;
3) система считывает введенные данные и сравнивает их с
существующими пользователями;
4) если данные совпадают, то пользователь попадает на «Главную
форму».
5) в случае ввода неверных данных пользователь увидит сообщение
об ошибке;

Сценарий «Регистрация»
11
1) после запуска приложения, пользователь попадает на форму
«Входа»;
2) пользователь нажимает на кнопку «Регистрация»;
3) пользователь заполняет необходимые поля для регистрации;
4) система считывает введенные данные;
5) если все поля заполнены правильно, то пользователь попадает на
«Главную форму».
6) в случае ввода неверных данных пользователь увидит сообщение
об ошибке;

Сценарий «Редактирование данных в таблице»


1) пользователь выбирает необходимую вкладку;
2) в таблице значений выбирает ячейку, в которой нужно изменить
значение, вводит новое значение;
3) система находит измененную ячейку и обновляет поля;
4) перезаписывает в файл обновленную коллекцию.

Сценарий «Удалить данные из таблицы»


1) пользователь выбирает необходимую вкладку;
2) в таблице находит строку для удаления;
3) система удаляет строку из таблицы;
4) система обновляет файл, где хранятся данные.

Сценарий «Добавить данные в таблицу»


1) пользователь выбирает необходимую вкладку;
2) пользователь нажимает на последнюю строчку в таблице;
3) система добавляет новую строку в таблице, с заполненным
уникальным ключем.
4) пользователь редактирует добавленную строку;
12
5) система сохраняет изменения.

2.7 Ограничения

1) продукт будет поддерживать только русский язык пользовательского


интерфейса;
2) продукт предназначен для операционной системы Windows;
3) на данный момент продукт поддерживает работу только с файлами
формата JSON.

13
3 ОБОСНОВАНИЕ ВЫБОРА ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ

Для разработки приложения была выбрана технологи Microsoft .NET


Framework 4.7, обладающий огромным функционалом для графического
представления данных и построения окон.
Для создания GUI (графического интерфейса пользователя) был
выбран интерфейс программирования приложений Windows Forms,
являющийся частью Microsoft .NET Framework. Данный интерфейс упрощает
доступ к элементам интерфейса Microsoft Windows за счет создания обёртки
для существующего Win32 API в управляемом коде[6].
В качестве среды разработки была выбрана Microsoft Visual Studio 2017
и язык C#, который является языком разработки приложений для
платформы Microsoft .NET Framework[4].
Для написания кода была выбрана парадигма «ООП» (объектно-
ориентированное программирование), так как C# – это объектно-
ориентированный язык и каждое окно формы является экземпляром класса.
Чтобы облегчить работу с преобразованиями данных из JSON формата
в объектно-ориентированные классы языка C# использовали библиотеку
Newtonsoft.Json, которая осуществляет сериализацию и десериализацию
объектов[4].
Для ведения истории разработки и контроля версий была выбрана
распределённая система управления версиями Git, на платформе GitHub.

14
4 РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ АВТОМАТИЗАЦИИ УЧЕТА НА
АВТОСТОЯНКАХ

4.1 Входные и выходные данные приложения

Входные данные хранятся в JSON файлах в формате .json.


Входными данными приложения являются пустые или заполненные
файлы с данными учета автостоянки в формате .json.
Выходными данными являются заполненные учеты посещения
автостоянки, а также данные о сотрудниках и клиентах[4].

4.2 Проектирование структуры приложения

Логика приложения (классы и соответствующие файлы) приведена в


таблице 4.1.

Таблица 4.1 – Классы и файлы

FileService.cs Данный класс реализует основные методы,


предназначенные для реалиазции работы с
файловой системой.
SerializationService.cs Данный класс реализует методы для
сериализации и десериализации обьектов.
Logger.cs Данный класс реализует методы, которые
осуществляют запись важных сообщений
приложения в файлы формата .json.

15
Окончание таблицы 4.1

BasicControl.cs Описывает базовый класс для ведения учета


посещений автостоянки.
User.cs Описывает базовый класс пользователя.
Arrivals.cs Наследник класса BasicControl, описывает
модель данных для «заезда» клиента на
парковку.
Customer.cs Наследник класса User, описывает модель
клиента.
LogItem.cs Класс описывает в каком формате будут
храниться данные логгирования.
ISerializable.cs Интерфейс, обязующий классы-наследники,
поддерживать сериализацию и десерализацию.
IFileService.cs Интерфейс, обязующий классы-наследники,
реализовывать методы для работы с файловой
системой.

Интерфейс на платформе Windows Forms реализуется с помощью


форм, каждый файл описания интерфейса сопровождается файлом
связанного кода, в таблице 4.2 представлены файлы отвечающие за
интерфейс и логику форм[5].

Таблица 4.2 – Файлы, отвечающие за графический интерфейс

Form1.Designer.cs Корневая форма приложения, является формой


авторизации пользователей.
Form1.cs Связанный с Form1.Designer.cs файл кода,
который реализует логику на форме.

16
Окончание таблицы 4.2

MainForm.Designer.cs Главная форма приложения, на которой


происходит редактирование данных системы.
MainForm.cs Связанный с MainForm.Designer.cs файл кода,
который реализует логику на форме.
RegistrationForm.Designer.cs Форма регистрации в приложении.
RegistrationForm.cs Связанный с RegistrationForm.Designer.cs файл
кода, который реализует логику на форме.

При создании архитектуры приложения, был применен архитектурный


паттерн MVP (Model-View-Presenter), позволяющий отделить логику
приложения от визуальной части, поэтому при создании формы создается
дополнительный класс с логикой, для создания связи между
представлениями и моделями (графическим интерфейсом и основной
логикой программы)[2].
На рисунке 4.1 представлена общая схема связности классов и
графических элементов управления.

17
Рисунок 4.1 – Схема связности классов в программе

4.3 Описание объектов и их взаимодействия

Пользователь осуществляет взаимодействие с приложением через три


формы, а именно: входа, регистрации и главной формы, на которой
происходит работа с данными.
18
Дополнительными классами для корректного связывания и соблюдения
паттерна MVP являются «Form1», «MainForm», «RegistrationForm»[2].
Для работы с файловой системой создан интерфейс «IFileService»,
который реализуется классом «FileService», он выполняет операции чтения-
записи файлов.
За логгирование всех событий приложения отвечает класс «Logger»,
который опысывает модель записи с помощью класса «LogItem».
Описание хранимых данных происходит в классах «Arrivals»,
«Customer», «Departures», «Employee», «TypeCar»[1].
На рисунке 4.2 приведена UML-диаграмма классов всего приложения.

Рисунок 4.2 – UML-диаграмма классов приложения

На рисунке 4.3 представлена общая структура проекта.

19
Рисунок 4.3 – Структура проекта

Ниже представлены таблиц, в которых некоторые классы рассмотрены


более детально.

20
Таблица 4.4 – Методы, используемые в классе FileService

public async Task<List<T>> Метод получает имя файла и объект


AddItem<T>(string fileName, T
обобщенного типа, который необходимо
value) where T : BaseModel
добавить в коллекцию. Возвращает
обновленные данные из файла.
Обобщенный тип должен быть классом
BaseModel или его наследником.
public async Task<List<T>> Метод получает имя файла и объект
DeleteItem<T>(string fileName, T
обобщенного типа, который необходимо
item) where T : BaseModel
удалить из коллекции. Возвращает
обновленную коллекцию. Обобщенный
тип должен быть классом BaseModel или
его наследником.
public async Task<List<T>> Метод получает имя файла и считывает
ReadFile<T>(string fileName)
из него данные, после десериализации
where T : BaseModel
возвращает коллекцию обобщенного
типа. Обобщенный тип должен быть
классом BaseModel или его наследником.
public async Task<List<T>> Метод получает имя файла и объект
AddOrUpdateItem<T>(string
обобщенного типа. После считывания и
fileName, T item) where T :
BaseModel коллекции из файла, происходит поиск
по уникальному ключу (GUID) объекта,
если объект найден, то обновляются
значения его полей, в противном случае
добавляется новый. Возвращает
обновленную коллекцию. Обобщенный
тип должен быть классом BaseModel или
его наследником.
public async void Метод принимает имя файла и
WriteFile<T>(string fileName,
коллекцию обобщенного типа. Метод
21
List<T> value) where T : выполняет запись данной коллекции в
BaseModel
файл. Обобщенный тип должен быть
классом BaseModel или его наследником.
private string GetPath(string Метод получает имя файла, после чего
fileName)
проверяет существует ли необходимая
директория и файл, если директория или
файл отсутствуют они создаются.
Возвращает полный путь файла.

22
Таблица 4.5 – Методы, используемые в классе SerializationService

public T Метод принимает обьект формата JSON,


DeserializeObject<T>(string json)
выполняет десериализацию и
вызвращает объект обобщенного типа.
public string SerializeObject<T>(T Метод принимает объект обобщенного
value)
типа и выполняет сериализацию в объект
формата JSON.

Классы с описанием моделей не содержат методов, так как используя


паттерн MVP, который подразумевает разделения приложения на три слоя
Model-View-Presenter, модели изолированы и имеют сугубо описательный
характер[2].
Реализации основных методов описаны в приложении Б.

23
5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА

5.1 Аппаратные и программные средства создания и эксплуатации


приложения

Аппаратные требования для работы приложения:


1) процессор с тактовой частотой 1.6 ГГц;
2) оперативная память 1 Гб и более;
3) монитор 800х600 или с более высоким разрешением.
Программные требования к приложению.
Установленные на компьютере:
1) операционная система — Windows 7/8/8.1/10;
2) платформа .NET Framework 4.7
3) Разрешение для чтения директории
4) Разрешение для записи в директорию

5.2 Руководство пользователя

Для начала работы с приложением необходимо поместить в одну


директорию исполняемый файл приложения и файлы библиотек,
необходимых для работы приложения. Запустить исполняемый файл, после
чего приложение создаст необходимые для работы приложения файлы или
поместить существующие файлы в директорию.
На рисунке 5.1 показана файловая система приложения.

24
Рисунок 5.1–Файловая система приложения

5.3 Описание контрольных примеров

Пользователь запускает приложение, и система открывает форму входа


для авторизации пользователя. (рисунок 5.2)

25
Рисунок 5.2- форма входа для авторизации пользователя.

Пользователь вводит данные и нажимает кнопку «Войти», после чего


система открывает главную форму, на которую прогружаются все
необходимые данные и устанавливаются права пользователя. Затем, когда
данные были загружены, фокус устанавливается на первую вкладку, тем
самым отображая информацию о клиентах. (рисунок 5.3).

26
Рисунок 5.3 – Информация о клиентах
На главной форме пользователю предоставляется возможность чтения
данных. Если у пользователя есть права администратора, то появляются
возможности для добавления, редактирования и удаления данных. Для
удаления строки из таблицы пользователю нужно нажать правой кнопкой
мыши по необходимой строке и подтвердить свое действие на модальном
окне (рисунок 5.4).

Рисунок 5.4 – Удаление строки


Для редактирования существующих данных пользователю нужно
нажать на необходимую ячейку и ввести новое значение, после чего «уйти» с
27
ячейки, как только пользователь «покинет» ячейку система обновит данные в
файлах и получит обновленные значения.
На каждом шаге, при неподобающих или непредвиденных действиях
пользователя, система создает файлы логирования, что позволяет, в случае
возникновения ошибок, передать их программисту для устранения
неточностей (рисунок 5.5).

Рисунок 5.5 – Результат логирования

28
ЗАКЛЮЧЕНИЕ

В результате выполнения работы спроектировано и разработано


приложение, позволяющее вести учет посещения клиентами автостоянки.
Эта система избавит вас и ваших подчинённых от внушительных
объёмов ежедневной рутины. Установка системы для учёта машин на
автостоянке возможна при наличии самого минимального набора
оборудования.
Переход от бумажного ведения учета автостоянки к электронному,
дало возможность предприятию синхронизировать с главным сервером и
получать свежие данные по почте или для дальнейшего анализа, а так же
предсказания расходов и доходов компании. Программа позволяет улучшить
качество обслуживания, ведение документации, и получать большую
прибыль.
Интерфейс программы прост и удобен для работы даже обычным
пользователям.
Для решения задачи был использован язык разработки C# 7.1.
Для функционирования программы, пользователю необходимо иметь
исполняемый файл и необходимые библиотеки для работы приложения.
Приложение Automation Parking может использоваться на автостоянках
для автоматизации учета и перехода к электронному ведению документации.
В заключение можно сделать вывод о том, что при должном подходе и
правильном проектировании информационных систем они позволяют
автоматизировать и облегчить работу с информацией на предприятии,
повысить эффективность труда работников и, как следствие, увеличить
прибыли компании, что всегда является конечной целью любых
нововведений.

29
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Руководство по языку C#.


URL: https://metanit.com/sharp/tutorial/ (дата обращения: 05.03.2020)
2. Введение в MVP: паттерн для построения Windows Forms
приложений.
URL: https://stfalcon.com/ru/blog/post/why-your-startup-needs-mvp (дата
обращения: 06.03.2020)
4. Официальная документация библиотеки Newtonsoft.Json.
URL: https://www.newtonsoft.com/json (дата обращения: 15.03.2020)
5. Руководство по написанию Windows Forms приложений.
URL: https://metanit.com/sharp/windowsforms/1.1.php (дата обращения
06.03.2020)
6. Нагел К. C# 4.0 и платформа .NET 4 для профессионалов / К. Нагел,
Б. Ивьен, Д. Глинн, К. Уотсон, М. Скиннер. – М.: Вильямс, 2011. – 1440 с

30
ПРИЛОЖЕНИЕ А

Экранные формы

Рисунок A.1 – Форма входа в приложение

Рисунок A.2 – Главная форма приложения

31
Рисунок А.3 – Удаление строки из таблицы

Рисунок А.4 – Результат логирования

32
ПРИЛОЖЕНИЕ Б
Фрагменты листинга

Листинг Б1 – Метод «AddItem<T>(string fileName, T value)» класса


«FileService»
public async Task<List<T>> AddItem<T>(string fileName, T value)
where T : BaseModel
{
try
{
//Считываем файл
var data = await ReadFile<T>(fileName);
//Добавляем элемент
data.Add(value);

//Записываем новую коллекцию в файл


WriteFile(fileName, data);

return data;
}
catch (Exception ex)
{
return new List<T>();
}
}

Листинг Б.2 – Метод « AddOrUpdateItem<T>(string fileName, T item) » класса


«FileService»

public async Task<List<T>> AddOrUpdateItem<T>(string fileName, T


item) where T : BaseModel
{
try
{
var data = await ReadFile<T>(fileName);
//Поиск обьекта по ключу
var finded = data.FirstOrDefault(x => x.ID ==
item.ID);
if (finded != null)
{
//Обновление обьекта
data.Remove(finded);
data.Add(item);
}
else

33
{
//Добавление обьекта
data.Add(item);
}

//Запись обновленной коллекции


WriteFile(fileName, data);

return data != null ? data : new List<T>();


}
catch (Exception ex)
{
return new List<T>();
}
}

Листинг Б.3 – Метод «GetPath(string fileName)» класса «FileService»


private string GetPath(string fileName)
{
//Путь + имя файла
var path = Path.Combine(_path, fileName);
//Если нет директории, то она создается
if (!Directory.Exists(_path))
{
Directory.CreateDirectory(_path);
}

//Если нет файла, то она создается


if (!File.Exists(path))
{
File.Create(path);
}

return path;
}

Листинг Б.4 – Метод «DeserializeObject<T>(string json)» класса


«SerializationService»
public T DeserializeObject<T>(string json)
{
try
{
return JsonConvert.DeserializeObject<T>(json);
}
catch (Exception ex)
{
throw;
34
}
}

Листинг Б.5 – Формирование таблицы на основе данных сотрудников и


работа с ними «MainForm»
var employeeIdColumn = new DataGridViewTextBoxColumn
{
DataPropertyName = "Id",
HeaderText = "Id",
ReadOnly = true
};

var employeelastName = new DataGridViewTextBoxColumn


{
DataPropertyName = "LastName",
HeaderText = "Фамилия"
};

var employeefirstName = new DataGridViewTextBoxColumn


{
DataPropertyName = "FirstName",
HeaderText = "Имя"
};

var employeePatronymic = new DataGridViewTextBoxColumn


{
DataPropertyName = "Patronymic",
HeaderText = "Отчество"
};

var employeeLogin = new DataGridViewTextBoxColumn


{
DataPropertyName = "Login",
HeaderText = "Логин"
};

var employeePassword = new DataGridViewTextBoxColumn


{
DataPropertyName = "Password",
HeaderText = "Пароль",
Visible = false
};

var employeePhone = new DataGridViewTextBoxColumn


{
DataPropertyName = "Phone",
HeaderText = "Телефон"
};

35
var employeePosition = new DataGridViewTextBoxColumn
{
DataPropertyName = "Position",
HeaderText = "Должность"
};

var employeeLastExit = new DataGridViewTextBoxColumn


{
DataPropertyName = "LastExit",
HeaderText = "Последняя активность",
ReadOnly = true
};

var employeeRole = new DataGridViewTextBoxColumn


{
DataPropertyName = "Role",
HeaderText = "Роль",
ReadOnly = true
};

employeeGrid.Columns.AddRange(
employeeIdColumn,
employeelastName,
employeefirstName,
employeePatronymic,
employeeLogin,
employeePassword,
employeePhone,
employeePosition,
employeeLastExit,
employeeRole);

employeeGrid.AutoGenerateColumns = false;
var employees =
_fileService.ReadFile<Employee>("employee.json").Result;
var employeeSource = new BindingSource();
employeeSource.AllowNew = true;
employeeSource.DataSource = employees;
employeeGrid.DataSource = employeeSource;
employeeGrid.EditMode =
DataGridViewEditMode.EditOnEnter;
#region EmployeeNonPublicMethods
private async void employeeGrid_UserAddedRow(object sender,
DataGridViewRowEventArgs e)
{
try
{
var row =
(Employee)employeeGrid.CurrentRow.DataBoundItem;

await _fileService.AddItem("employee.json", row);


36
}
catch (Exception ex)
{
_logger.LogCritical(ex.StackTrace.ToString());
}
}

private async void employeeGrid_CellValueChanged(object


sender, DataGridViewCellEventArgs e)
{
try
{
if (employeeGrid.CurrentRow != null)
{
var employee =
(Employee)employeeGrid.CurrentRow.DataBoundItem;
if (!string.IsNullOrWhiteSpace(employee.ID))
{
var employees = await
_fileService.AddOrUpdateItem("employee.json", employee);
var source = new BindingSource();
source.AllowNew = true;
source.DataSource = employees;
employeeGrid.DataSource = source;
}
}
}
catch (Exception ex)
{
_logger.LogCritical(ex.StackTrace.ToString());
}
}

private async void employeeGrid_MouseClick(object sender,


MouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Right)
{
int currentMouseOverRow = employeeGrid.HitTest(e.X,
e.Y).RowIndex;

var employee =
(Employee)employeeGrid.Rows[currentMouseOverRow].DataBoundItem;

if (currentMouseOverRow >= 0)
{
DialogResult dialogResult =
MessageBox.Show("Удаление", "Удалить строку?",
MessageBoxButtons.YesNo);
37
if (dialogResult == DialogResult.Yes)
{
var employees = await
_fileService.DeleteItem("employee.json", employee);
var source = new BindingSource();
source.AllowNew = true;
source.DataSource = employees;
employeeGrid.DataSource = source;
}
else if (dialogResult == DialogResult.No)
{
return;
}
}
}
}
catch (Exception ex)
{
_logger.LogCritical(ex.StackTrace.ToString());
}
}
#endregion

Листинг Б.6 – Метод « LoginButton_Click(object sender, EventArgs e)» в классе


«Form1»
private async void LoginButton_Click(object sender, EventArgs e)
{
try
{
//Получение данных с файла
var employees = await
_fileService.ReadFile<Employee>("employee.json");
//Получение пользователя
var employee = employees.FirstOrDefault(x => x.Login
== login.Text && x.Password == password.Text);
if (employee != null)
{
//Вход в систему, переход на главную форму
employee.LastExit = DateTime.Now;
await _fileService.AddOrUpdateItem("employee.json",
employee);

//Логгирование входа
_logger.LogInfo($"Выполнен вход - {employee.ID} :
{employee.Login}");
var mainForm = new MainForm(employee);
mainForm.Show();
Hide();
}

38
//Если введены неверные данные - вывод сообщения
else
{
LoginError.Text = "Неправильно введенные данные";
}
}
catch (Exception ex)
{
_logger.LogCritical(ex.StackTrace.ToString());
}
}

//Переход на форму регистрации


private void RegistrationButton_Click(object sender,
EventArgs e)
{
var registrationForm = new RegistrationForm();
registrationForm.Show();
Hide();
}

39

Оценить