Главная страница
Навигация по странице:

  • Номер Информация Тип данных

  • 3. 3. Описание проектных решений

  • 3. 4. Описание интерфейса

  • Разработка проекта Автостоянка


    Скачать 1.68 Mb.
    НазваниеРазработка проекта Автостоянка
    Дата11.03.2023
    Размер1.68 Mb.
    Формат файлаdoc
    Имя файлаKR_Chashkina_E_V_ZKT-45-17_12505899.doc
    ТипКурсовая
    #980464
    страница4 из 5
    1   2   3   4   5

    3. 2. Проектирование базы данных.


    Информация, хранимая в таблицах БД данных приведена в таблицах со 4-ю по 11-ю.

    Таблица 4 - Тарифы

    Номер

    Информация

    Тип данных

    1

    Код тарифа

    Числовой

    2

    Название

    Строковый

    3

    Условие

    Строковый

    4

    Единица времени

    Строковый

    5

    Стоимость

    Числовой

    6

    Штраф

    Числовой

    Таблица 5 - Услуги

    Номер

    Информация

    Тип данных

    1

    Код услуги

    Числовой

    2

    Название

    Строковый

    3

    Описание

    Строковый

    4

    Способ оплаты

    Строковый

    5

    Стоимость

    Числовой

    Таблица 6 - Клиенты

    Номер

    Информация

    Тип данных

    1

    Код клиента

    Числовой

    2

    ФИО

    Строковый

    3

    Дата рождения

    Дата

    4

    Код автомобиля

    Числовой

    5

    Адрес

    Строковый

    6

    Телефон

    Строковый

    Таблица 7 - Автомобили

    Номер

    Информация

    Тип данных

    1

    Код автомобиля

    Числовой

    2

    Марка

    Строковый

    3

    Цвет

    Строковый

    4

    Код клиента

    Числовой

    5

    Тип ТС

    Строковый

    6

    Гос. номер

    Строковый

    7

    Год выпуска

    Числовой

    Таблица 8 - Парковочные места

    Номер

    Информация

    Тип данных

    1

    Код места

    Числовой

    2

    Парковочное место

    Строковый

    3

    Статус

    Строковый

    4

    Код клиента

    Числовой

    5

    Код автомобиля

    Числовой

    6

    Дата постановки

    Дата

    7

    Гос. номер

    Строковый

    Таблица 9 - Журнал регистрации

    Номер

    Информация

    Тип данных

    1

    Код регистрации

    Числовой

    2

    Дата въезда

    Дата

    3

    Дата выезда

    Дата

    4

    Код места

    Числовой

    5

    Код клиента

    Числовой

    6

    Код автомобиля

    Числовой

    7

    Время парковки

    Числовой

    8

    Код тарифа

    Числовой

    9

    Сумма к оплате

    Числовой

    10

    Штраф

    Числовой

    Таблица 10 - Оказанные услуги

    Номер

    Информация

    Тип данных

    1

    Код оказания

    Числовой

    2

    Дата въезда

    Дата

    3

    Код услуги

    Числовой

    4

    Код места

    Числовой

    5

    Код клиента

    Числовой

    6

    Код автомобиля

    Числовой

    7

    Сумма к оплате

    Числовой

    Таблица 11 - Дежурные

    Номер

    Информация

    Тип данных

    1

    Код дежурного

    Числовой

    2

    Сектор

    Строковый

    3

    Логин

    Строковый

    4

    Пароль

    Строковый

    Первые четыре таблицы и последняя «Дежурные» относительно небольшие, и информация в них меняется сравнительно редко. Такого рода таблицы, содержащие условно-постоянную информацию, обычно называются справочными.

    Таблица «Парковочные места» небольшая, но информация в данной таблице меняется часто, поскольку отображает статус занятости парковочного места в соответствии с журналом регистрации.

    Две других таблицы очень обширны и постоянно дополняются новыми записями, поскольку процессы постановки и оказания услуг идут постоянно. Данные в них основываются на справочных таблицах.

    Все таблицы связаны между собой в следующую схему данных – рис. 8.



    Рисунок 8 – Схема данных БД

    3. 3. Описание проектных решений

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

    При вводе необходимых данных в журнал регистрации система берет из базы данных сведения о клиенте и его автомобиле, а также информацию о стоимости тарифов и штрафов.

    Подсчет количества часов на парковке осуществляется с помощью функции в SQL «DATEDIFF», как часовая разница между датами выезда и въезда. Результат округляется для упрощения расчета по суточному тарифу (см. рис. 9).



    Рисунок 9 – Подсчет количества часов для определения тарифа

    Если значения для даты выезда нет, значит парковка на данный момент активна, и количество часов будет определено, как клиент покинет автостоянку, это позволяет определить занятые на данный момент парковочные места.

    Так как системой предусмотрены смешанные тарифы и тарифы, зависящие от времени суток парковки автомобиля, вычисляется время суток на момент въезда и выезда с помощью функции DATEPART и проверяется соответствие диапазону проверки: между 8-ю и 19-ю часами – для дневного времени парковки, между 20-ю часами и 7-ю часами утра – для ночного времени парковки.

    Для определения тарифа в таблице базы данных используются 5 разных условий:

    • Если количество часов превышает, либо равно 24, следовательно в соответствии со справочником тарифов присваивается значение «1» - суточный тариф с ценой за сутки – 1 000 руб.

    • Если количество часов превышает 12, но менее суток, то предусмотрен тариф «5» - 65 рублей за час.

    • Если парковка занимает меньшее количество часов, а время суток в течение парковки остается неизменным (день-день/ночь-ночь), то выбирается тариф «2» с оплатой 80 в час и «3» с оплатой 60 в час для дневного и ночного тарифов соответственно.

    • В случае смены времени суток в течение парковки автомобиля выбирается смешанный тариф, который основан на оплате дневных часов как за дневной тариф, а ночных часов – как за ночной.

    На листинге 9 представлена реализация определения тарифа в триггере для автоматического изменения таблицы после ввода или изменения данных в журнале регистрации.



    Листинг 9 – Определение тарифа в журнале регистрации

    Расчет оплаты меняется в зависимости от выбранного тарифа.

    При суточном тарифе количество часов парковки делится на 24, и полученное значение умножается на сумму тарифа.

    При тарифе свыше 12 часов сумма рассчитывается произведением стоимости тарифа на количество часов. Аналогично рассчитывается сумма к оплате для дневного и ночного тарифов.

    Для смешанного тарифа расчет самый сложный. Для него проверяется значение не только тарифа, но также и времени суток на начало и на конец парковки. Если время суток на начало – день, а на конец парковки – ночь, то подсчет осуществляется следующим образом:

    1. Для подсчета суммы для часов, проведенных в дневное время, из 20 вычитается час въезда, и полученное значение умножается на ставку тарифа ДЕНЬ.

    2. Для подсчета суммы для часов, проведенных в ночное время, из 8 вычитается час выезда, полученное значение помещается в модуль, которое показывает, сколько времени до 8 часов остается после окончания парковки. Затем из 12 вычитаем полученное число, чтобы понять, сколько именно часов в ночное время заняла парковка, и умножаем на ставку тарифа НОЧЬ.

    3. Результаты расчетов складываются, и формируется общая сумма к оплате.

    Если время суток на начало – ночь, а на конец парковки – день, то подсчет осуществляется следующим образом:

    1. Для подсчета суммы для часов, проведенных в ночное время, из 20 вычитается час выезда, полученное значение помещается в модуль, которое показывает, сколько времени прошло после 20 на момент парковки. Затем из 12 вычитаем полученное число, чтобы понять, сколько именно часов в ночное время заняла парковка, и умножаем на ставку тарифа НОЧЬ.

    2. Для подсчета суммы для часов, проведенных в дневное время, из 8 вычитается час въезда, и полученное значение, помещенное в модуль, умножается на ставку тарифа ДЕНЬ.

    3. Результаты расчетов складываются, и формируется общая сумма к оплате.

    На листинге 10 приведена реализация расчета суммы к оплате в триггере для автоматического изменения таблицы после ввода или изменения данных в журнале регистрации.



    Листинг 10 – Расчет суммы к оплате в журнале регистрации

    Поскольку в представлении журнала необходимо получить наглядную информацию о клиенте и гос. номере его автомобиля в триггере также предусмотрен подхват необходимых данных из таблиц «Клиенты» и «Автомобили» и их помещение в журнал регистрации (см. рис. 11).



    Листинг 11 – Получение информации о клиенте и его автомобиле с помещением их в журнал регистрации

    В модуле учета оказанных услуг идентично журналу регистрации при вводе данных подхватываются данные из таблиц базы данных (см. листинг 12).

    Интересным здесь является расчет для услуги «Тент-чехол», для которой предусмотрена почасовая оплата. Поэтому при расчете для данной услуги используется условие:

    1. Если значение столбца «Код услуги» не равно 3, следовательно сумма к оплате ставится в соответствии со столбцом «Цена» без изменений, поскольку для всех услуг, кроме «Тент-чехла» оплата является единовременной.

    2. Если значение столбца «Код услуги» равно 3, следовательно сумма к оплате рассчитывается с использованием вложенного запроса для вывода данных о часах при условии соответствия значений для столбцов «Автомобиль» и «Дата въезда», умноженных на значения в столбце «Цена».



    Листинг 12 – Заполнение данных в журнале услуг

    Результат подсчета для услуги «Тент-чехол» с подхватом количества часов из журнала регистрации представлен на листинге 13.



    Листинг 13– Расчет вычисления суммы для услуги «Тент-чехол»

    Учет состояния парковочного места зависит от сектора, в котором это место находится. В секторе A машиноместа предназначены для клиентов без абонемента, и их учет ведется по журналу регистрации. А в секторе B парковочные места предназначены для клиентов с купленными абонементами, и их учет ведется в соответствии с модулем учета оказанных услуг.

    В случае с журналом регистрации, как упоминалось выше, учет занятых парковочных мест в секторе A не сложен, достаточно обратить внимание на значение в столбце «Дата выезда». Однако возникает проблема с подхватом даты въезда для соответствующего парковочного места, ведь группирование по парковочному месту с определением даты реализовать не получится. Для решения проблемы были созданы два представления, в первом отображается информация о занятых парковочных местах, а во втором – информация о последней дате въезда для каждого места с использованием агрегатной функции MAX. Созданные представления представлены на рисунке 10.



    Рисунок 10 – Представления с информацией о дате въезда для учета занятости парковочных мест в секторе A

    После этого в триггере с помощью объединения таблиц проверяется, занято ли место и в случае истинности статус парковочного места в таблице «Парковочные места» изменяется на «Занято», иначе – на «Свободно» (см. листинг 14).



    Листинг 14 – Изменение статуса парковочного места в журнале регистрации

    В случае с сектором B необходимо условие для проверки кода услуги «Абонемент», и в случае истинности – подсчет количества часов с момента покупки абонемента с использованием текущей даты для проверки действительности абонемента: для месячного количество дней с момента покупки не должно превышать 30, а для годового – 365. Для сокращения записей в теле триггера было создано представление к таблице «Оказанные услуги» с запросом, представляющим информацию о действующих абонементах (см. рис. 11).





    Рисунок 11 – Представление с действующими абонементами для учета занятости парковочных мест в секторе B

    Затем уже в триггере с помощью объединения таблиц проверяется, забронировано ли место и в случае истинности статус парковочного места в таблице «Парковочные места» изменяется на «Бронь», иначе – на «Свободно» (см. листинг 15).



    Листинг 15 – Изменение статуса парковочного места в журнале услуг

    3. 4. Описание интерфейса

    Работа по созданию представления информационной системы начинается с создания проекта WindowsForms на языке C#. Каждый запланированный компонент ИС располагается на отдельной форме: "Авторизация", "Меню", "Тарифы и услуги", "Клиенты", "Автомобили", "Парковочные места", "Журнал регистрации", "Оказанные услуги".

    Общий код программы и всех форм проекта приложен к курсовой работе.

    Для авторизации и загрузки данных необходимо подключение к базе данных поэтому в качестве источника данных указывается база данных PP, работа с которой была описана в предыдущих подразделах (см. рис. 12). Для использования авторизации в созданном классе DB.cs прописывается строка подключения к ней и методы для учета состояния подключения. Класс для подключения к базе данных приведен в листинге 16.



    Рисунок 12 – Подключение базы данных



    Листинг 16 – Класс для работы с базой данных

    За авторизацию отвечает форма «LoginForm». В конструкторе данной формы располагаются такие элементы управления, как TextBox - для ввода логина, TextBox - для ввода пароля, Label - для заголовка и для комментариев, Button – для входа, Button – для закрытия приложения.

    В методе, присвоенном для кнопки входа в систему, прописывается условие соответствия введенного пользователем логина и пароля хранящимся данным в базе данных, и если условие истинное, то пользователю открывается доступ в систему, иначе система выдает уведомление о том, что логин или пароль были введены неверно (см. листинг 17).



    Листинг 17 – Организация системы доступа

    Демонстрация авторизации приведена в рисунке 13.



    Рисунок 13 – Успешная авторизация

    Для создания заставки в главном меню в графическом редакторе Adobe Photoshop подготавливается изображение с названием системы. В конструкторе главной формы подготовленное изображение помещается в элемент Panel на задний план. Затем добавляются 7 элементов типа Button, которые позволяют открыть форму с соответствующим им компонентом информационной системы или закрыть приложение.

    Спроектированное меню представлено на рисунке 14.



    Рисунок 14 – Меню информационной системы

    В компоненте «Тарифы и услуги» помещается информация об условиях, единице времени, стоимости и штрафах применяемых тарифов, а также информация об услугах с указанием их описания, способе оплаты и стоимости. Для представления этих данных в конструкторе формы используются элементы DataGridView, в которых в качестве источника данных выбираются таблицы «Тарифы» и «Услуги». Для возможности редактирования данных напрямую из программы добавляются элементы TextBox со значением DataBindings в свойствах элемента с соответствующим данному полю столбцу в таблице базе данных.

    В результате работа с формой выглядит следующим образом (см. рис. 15): в таблице выбирается строка, которую необходимо изменить, а в текстовых полях присваиваются новые значения для данной строки. Данные при этом так же изменятся в базе данных.



    Рисунок 15 – Компонент «Тарифы и услуги»

    После нажатия на кнопку «Обновить», данные в таблице обновятся (см. рис. 16).



    Рисунок 16 – Редактирование информации в компоненте «Тарифы и услуги»

    Для того, чтобы программа могла работать представленным образом, кнопке «Обновить» определен метод, указаный в листинге 18.



    Листинг 18 – Редактирование информации в компоненте «Тарифы и услуги»

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

    Компонент «Клиенты», представленный на рисунке 17, содержит информацию о клиентах.



    Рисунок 17 – Компонент «Клиенты»

    Аналогичным образом в соответствии с БД оформлен компонент «Автомобили» (см. рис. 18).



    Рисунок 18 – Компонент «Автомобили»

    Компоненты «Парковочные места», «Журнал регистрации» и «Журнал услуг» представлены на рисунках с 19-го по 21-й.



    Рисунок 19 – Компонент «Парковочные места»



    Рисунок 20 – Компонент «Журнал регистрации»



    Рисунок 21 – Компонент «Журнал услуг»

    Компоненты «Журнал регистрации» и «Журнал услуг» являются самыми значимыми, поскольку основная работа дежурным происходит именно в них. Поскольку процесс редактирования информации ранее уже был рассмотрен, следует продемонстрировать такой важный метод работы с данными как создание новых строк в таблице. Для этого в конце журналов есть пустые строки. Если дежурному необходимо добавить новую строку, он выбирает пустую строку (в нашем случае строку №65) указывает дату въезда, дату выезда (при наличии), место и код клиента (см. рис 22).



    Рисунок 22 – Добавление новой строки в журнал регистрации

    Оставшаяся информация заполнится сама, и статус в компоненте «Парковочные места» изменится автоматически (см. рис. 23).



    Рисунок 23 – Автоматическое заполнение данных и изменение статуса места

    Если же клиент намеревается покинуть парковку, то дежурный добавляет дату выезда для формирования суммы к оплате. После этого статус для ранее занятого места изменится снова (см. рис. 24).





    Рисунок 24 – Добавление новых данных для учета занятости парковочного места

    В рассмотренном варианте подтверждается тот факт, что триггер работает корректно в отношении учета занятости парковочных мест сектора A, следует проверить корректноть работы триггера для учета занятости парковочных мест сектора B.

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





    Рисунок 25 – Отображение информации о бронировании парковочного места

    Действительно, как следует из рисунка 25, статус для места с истекшим абонементом – «Свободно», а с действующим – «Бронь».
    1   2   3   4   5


    написать администратору сайта