Добавлен: 18.06.2023
Просмотров: 311
Скачиваний: 3
СОДЕРЖАНИЕ
1. Технико-экономическая характеристика предметной области и предприятия.
1.1 Характеристика предприятия и его деятельности
1.2 Организационная структура управления предприятием
1.3 Выбор комплекса задач автоматизации и характеристика существующих бизнес-процессов
2. Техническое и программное обеспечение
2.1 Структура и состав комплекса технических средств и конфигурации сети
2.2 Характеристика базы данных
2.3 Описание программных модулей
Вся база данных была нормализована до 3 уровня.
В сущности “Пассажир” хранится минимальный набор информации о клиенте который хотя бы раз купил билет.
В сущности “Билет” хранится информация в виде внешнего ключа о клиенте (пассажире) и о рейсе, также есть поле указывающее на дату покупки билета и пустое поле указывающее на дату использования билета.
В сущности “Рейс” хранится информация о самолёте (внешний ключ), о датах прибытия/отбытия и о аэропортах прибытия/отбытия, также здесь указана стоимость.
В сущности “Аэропорт” хранится название аэропорта и внешний ключ на город в котором аэропорт находится.
В сущности “Город” хранится название города, координаты в виде полей “широта” и “долгота”, а также внешний ключ на страну. Координаты города были добавлены для возможности реализации показа в Веб-Приложении карты.
В сущности “Страна” хранится просто название страны.
В сущности “Самолёт” хранится название самолёта и вместимость.
Таким образом, в БД отсутствует дублирование данных, вся информация разделена на достаточное количество полей (Имя, фамилия клиента) и можно очень просто найти, например, список всех купленных билетов по первичному ключу сущности “Пассажир” и т.д.
Рисунок 7 ERD
Сущность “Пассажир” Таблица 3.1
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|
Идентификатор |
_id |
Счетчик |
10 |
Первичный ключ |
|
Имя |
first_name |
Короткий текст |
20 |
|
|
Фамилия |
last_name |
Короткий текст |
20 |
|
|
Пол |
sex |
Короткий текст |
3 |
|
|
Дата рождения |
birthdate |
Дата |
Сущность “Билет” Таблица 3.2
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|
Идентификатор |
_id |
Счетчик |
5 |
Первичный ключ |
|
Идентификатор полёта |
flight |
Число |
5 |
Внешний ключ |
|
Идентификатор пассажира |
passenger |
Число |
5 |
Внешний ключ |
|
Дата покупки |
buy_time |
Дата |
||
|
Дата использования |
use_time |
Дата |
Сущность “Полёт” Таблица 3.3
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|---|---|---|---|---|
|
Идентификатор |
_id |
Счетчик |
10 |
Первичный ключ |
|
Идентификатор самолёта |
airplane |
Число |
5 |
Внешний ключ |
|
Время прибытия |
arrival_time |
Дата |
||
|
Время отбытия |
departure_time |
Дата |
||
|
Идентификатор аэропорта прибытия |
arrival_airport |
Число |
5 |
Внешний ключ |
|
Идентификатор аэропорта отбытия |
departure_airport |
Число |
5 |
Внешний ключ |
|
Стоимость билета |
cost |
Число |
5 |
Сущность “Самолёт” Таблица 3.4
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|
Идентификатор |
_id |
Счетчик |
5 |
Первичный ключ |
|
Название |
name |
Короткий текст |
1 |
|
|
Вместимость |
capacity |
Число |
3 |
Сущность “Аэропорт” Таблица 3.5
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|
Идентификатор |
_id |
Счетчик |
5 |
Первичный ключ |
|
Название |
name |
Короткий текст |
45 |
|
|
Идентификатор города |
city |
Число |
3 |
Внешний ключ |
Сущность “Город” Таблица 3.6
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|
Идентификатор |
_id |
Счетчик |
5 |
Первичный ключ |
|
Название |
name |
Короткий текст |
20 |
|
|
Широта |
lat |
Вещественное число |
||
|
Долгота |
long |
Вещественное число |
||
|
Идентификатор страны |
country |
Число |
5 |
Внешний ключ |
Сущность “Страна” Таблица 3.7
|
Наименование поля |
Идентификатор поля |
Тип поля |
Длина поля |
Прочее |
|---|---|---|---|---|
|
Идентификатор |
_id |
Счетчик |
5 |
Первичный ключ |
|
Название |
name |
Короткий текст |
40 |
Рисунок 8 Сценарии диалога
2.3 Описание программных модулей
ИС состоит из 2 модулей: серверная часть и клиентская часть.
Серверная часть прямо отвечает за работу Веб-Сервера NodeJS:
- Перенаправление на страницы.
- Отправка запросов к БД.
- Обработка запросов от пользователя и БД.
Клиентская часть отвечает за:
- Изменение и отображение HTML.
- Интерфейс для работы с БД.
- Покупка билетов.
- Сортировка и проверка получаемой информации от БД или пользователя.
Серверная часть написана с использованием языка JavaScript и библиотек:
- Express – работа с HTTP запросами.
- Mysql – Работа с запросами к БД.
- Qrcode – Создание QR-кода содержащего номер билета.
- Html-pdf – Создание PDF файла из HTML страницы.
- Crypto – Шифрование и дешифрование текста.
Клиентская часть написана с использование языка TypeScript, фреймворка Angular 7.
Фреймворк Angular 7 - JavaScript-фреймворк с открытым исходным кодом. Предназначен для разработки одностраничных приложений. Его цель — расширение браузерных приложений на основе MVC-шаблона, а также упрощение тестирования и разработки.
Фреймворк работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой обычные переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных.
Angular 7 написан на язык TypeScript, который требуется для использования Angular.
TypeScript — язык программирования, представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений, расширяющее возможности JavaScript.
Для работы сайта требуется поддержка HTML5.
3. Контрольный пример реализации и его описание
На странице “Покупка билетов” Веб-Приложения расположен список рейсов в виде таблицы.
Нажатие на заголовок колонки позволяет отсортировать всю таблицу по убыванию или возрастанию.
Нажатие на строку в таблице перенаправляет на страницу с детальной информацией по полёту, см. рисунок 9.2.
Рисунок 9.1 Пример страницы “Покупка билетов” Веб-Приложения
Адрес страницы “Покупка билетов” выглядит как: http://rosavia.com/flights.
Адрес страницы с информацией о рейсе выглядит как:
http://rosavia.com/flight/id, где: id – номер рейса.
Например: http://rosavia.com/flight/1.
Рисунок 9.2 Информация о рейсе
На странице с информацией о рейсе можно вернуться на страницу со списком рейсов или купить билет. При нажатии на кнопку “Купить билет” происходит перенаправление на адрес http://rosavia.com/buy/id, где: id – номер рейса. Например: http://rosavia.com/buy/1.
Рисунок 9.3 Покупка билета
На странице покупка билета необходимо ввести персональные данные:
- Имя
- Фамилия
- Пол
- Дата рождения
При вводе осуществляется проверка данных. Если какое-либо поле не введено: оно выделяется красным, см. рисунок 9.4.
При нажатии на кнопку “Оплатить” также происходит проверка введенных данных и, если какое-либо поле отсутствует – будет показано предупреждение.
Рисунок 9.4 Ошибка ввода
Если данные прошли проверку на сайте – они отправляются на Веб-Сервер, где обязательно проходят повторную проверку и, если есть ошибка – возвращается код и описание ошибки. В случае если ошибки не обнаружено – сервер делает запрос к БД и ищет на наличие уже купленного билета на данный рейс данным клиентом. Если билет на рейс уже куплен – возвращается ответ клиенту о том, что билет был куплен. Если билет не был куплен ранее – в БД заносится новая запись в таблицу “Билет”.
Рисунок 9.5 Повторная покупка билета
После успешных запросов к БД, сервер шифрует комбинацию персональных данных и информацию о билете и тем самым создаёт уникальный хэш купленного билета, по которому можно идентифицировать его.
Шифрование необходимо для усложнения перебора запросов к серверу в целях получения билетов клиентов. Обычный хэш билета выглядит так: “071669e491a354e8f518c2fe75c9948fd0a366867db6abf44e9397f443eddc38fe11097532545a7f8a4b8ee9acc028d76cd7a909304b3f1375b690e3d9caad21”
После получения хэша на сервере – он возвращает его клиенту и переводит на страницу http://rosavia.com/ticket/hash, где: hash – хэш билета. Например:
http://rosvia.com/ticket/071669e491a354e8f518c2fe75c9948fd0a366867db6abf44e9397f443eddc38fe11097532545a7f8a4b8ee9acc028d76cd7a909304b3f1375b690e3d9caad21
Уникальный номер билета такого вида очень и очень сложно подбирать, в качестве шифрования используется алгоритм AES-192, используемый США для шифрования данных. К нему добавляется пароль, который также требуется для шифрования и дешифрования хэша.
Рисунок 9.6 Пример билета
При переходе на страницу билета – выдаётся PDF файл, который можно напечатать и использовать как билет. Вёрстка билета была выполнена очень минималистично и в чёрно-белых цветах в целях доступности печати без траты красок.
Сверху на билете расположен QR-код в котором зашифрован номер билета. Это нужно для возможности мгновенно считать как клиенту с помощью камеры, так и на регистратуре в случае необходимости. Это намного упрощает ввод номера билета. Сам номер билета также присутствует сверху, в случае если у клиента нет средств для прочтения QR-кода или его искажения. Сам QR-код был сделан достаточно больших размеров что бы его можно было прочитать на большинстве камер.
Ниже верхней части билета расположена информация, которая получается с помощью хэша билета и поэтому может быть отрезана. Необходимо только знание хэша.