Разработка базы данных по автоматизации продажи автобусных билетов
Анализ предметной области. Логическая модель данных. Разработка графического интерфейса. Формирование запросов, отчетов. Триггеры, хранимые процедуры, способы их вызова. Средства защиты и разграничения доступа к данным. Тестирование программного продукта.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.04.2018 |
Размер файла | 3,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНО-ЭКОНОМИЧЕСКИЙ КОЛЛЕДЖ»
КУРСОВОЙ ПРОЕКТ
по дисциплине: «Базы данных и системы управления базами данных»
на тему: «Разработка базы данных по автоматизации продажи автобусных билетов»
Гомель, 2018
ВВЕДЕНИЕ
Билет -- документ, удостоверяющий наличие некоего права у какого-либо определённого лица или у предъявителя билета. Действие билета может распространяться на конкретное время или не иметь сроков. В данном проекте билет дает законное право на проезд в общественном транспорте, а именно автобусе.
Автоматизация продаж автобусных билетов повышает скорость работы кассиров, позволяет вести учёт проданных билетов, а так же составлять расписание автобусов и добавлять новые маршруты по мере их необходимости.
Целью курсового проекта является разработка автоматизированной системы продажи билетов, данная цель ставит перед нами некоторые задачи.
Задачами курсового проекта являются:
анализ и изучение предметной области по теме индивидуального задания;
выбор и обоснование инструмента разработки базы данных;
проектирование (построение моделей данных и диаграмм, которые описывают логику взаимодействия элементов базы данных);
В результате курсового проекта будет разработана автоматизированная система учета участников спортивных соревнований, которая будет выполнять следующие функции:
- добавление записей;
- изменение записей;
- удаление записей;
- поиск записей;
- фильтрация записей;
- формирование отчетов.
Пояснительная записка состоит из пяти разделов.
В первом разделе производится анализ предметной области и обосновывается выбор инструментов разработки базы данных и приложения.
Во втором разделе записки представлено концептуальное, логическое проектирование модели данных, а также реляционная схема базы данных.
В третьем разделе представлено описание интерфейса и функциональное назначение отдельных кнопок и меню разработанного приложения. Также там описаны используемые в программе запросы и представления, выводимые документы.
В четвертом разделе происходит тестирование функционирования программы в автономном режиме.
В пятом разделе описано руководство использования программы.
1. АНАЛИЗ ЗАДАЧИ
1.1 Описание предметной области
Темой проекта является «Разработка базы данных по учёту продажи автобусных билетов». В ходе изучения предметной области данной темы, было выяснено, каким образом создается расписание для движения автобусов по междугородним линиям, а так же каким образом осуществляется продажа билетов и ведется их учет.
Соответственно, разрабатываемая программа должна предоставлять следующие возможности:
составление расписания;
добавление новых маршрутов;
продажа и учет продажи автобусных билетов.
Так же в программе будут присутствовать дополнительные функции, такие как:
формирование отчета о проданных билетах с возможностью выбора промежутков дат, который может быть оформлен как на конец месяца, так в и любое другое время;
формирование чека, который содержит информацию о выбранном рейсе, дате поездки и времени отправки;
фильтры, для упрощения работы с данными.
Обоснование необходимости компьютерной обработки информации или процессов. База данных организованная в соответствии с определёнными правилами и поддерживаемая в памяти компьютера совокупность данных, характеризующая актуальное состояние некоторой предметной области и используемая для удовлетворения информационных потребностей пользователей. Базы данных обеспечивают надежное хранение информации, в структурированном виде и предоставляют своевременный доступ к ней. Это отличный инструмент, который позволяет наладить работу предприятия или организации, базы данных могут использоваться во многих сферах и значительно упрощать работу.
Современные приложения обработки данных ориентированы на работу с большим количеством пользователей, на их удаленность от места расположения основного сервера БД. Важнейшая задача использования компьютерной обработки информации это повысить эффективность выполнения основных функций сотрудника, повысить скорость работы или создания отчетов по конкретным параметрам, улучшить оперативность принятия решений, повысить производительность труда, снизить количество вычислительных ошибок, содействовать эффективному и безопасному хранению и доступу к информации.
Периодичность использования программы. Данная программа будет использоваться каждый день, во время всего рабочего дня сотрудника. В данном случае, работу должен выполнять кассир или администратор, у каждого из них свои задачи. Поэтому разграничение прав в программе является достойным решением.
Администратор должен работать с программой следующим образом:
при необходимости добавлять новых сотрудников в базу данных;
следить за точностью расписания и редактировать его, если будет решено перенести какие либо рейсы;
ко всему этому администратор может просматривать или выводить на печать различные отчеты, которые были описаны выше;
предоставлять доступ к программе новым сотрудникам и обучать их работе с ней, но стоит учесть, что интерфейс обладает ясностью и вполне понятен, что ведет к достаточно простому выполнению своих прямых обязанностей.
Кассир же в свою очередь должен работать с программой следующим образом:
заносить в базу данные о проданных билетах на определенные рейсы;
следить за количеством мест на определенный рейс, хотя программа будет уведомлять его о невозможности продать билет, если все места уже заняты.
Входная информация (описание нормативно-справочной информации, описание способа ее хранения).Основную входную информацию, должен будет заносить администратор, вся информация будет храниться в таблицах базы данных, а именно:
- расписание;
- маршруты;
- сотрудники;
- проданные билеты.
Выходная информация (перечень используемых способов вывода данных, характеристика выходных наборов данных, описание выходных экранных форм). В качестве выходной информации выступают следующие отчеты:
отчёт о проданных билетах;
более детальный отчет о проданных билетах;
чек (билет).
Постоянная информация (описание нормативно-справочной информации, описание способа ее хранения).Нормативно-справочной информацией являются справочники «Trips», «Route», «Paymasters», «Tickets», которые являются основой для функционирования информационной системы.
интерфейс запрос данные триггер
1.2 Инструменты разработки
Инструмент разработки это специализированное программное обеспечение, которое облегчает процесс разработки программного средства.
Выбор инструмента разработки является важным моментом, так как после этапа проектирования необходимо определиться с таким инструментом разработки, который позволит реализовать всю задуманную логику и функции.
В качестве инструмента разработки базы данных выступает СУБД.
СУБД совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных
Основными функциями СУБД являются:
управление данными во внешней памяти;
управление данными в оперативной памяти;
журнализация изменений, резервное копирование и восстановление базы данных после сбоев;
поддержка языков манипулирования данными.
В качестве СУБД в данном курсовом проекте использована «Microsoft SQL Server 2017».
«Microsoft SQL Server 2017» является новейшей и мощнейшей системой управления базами данных. Помимо стандартных для СУБД функций, SQL Server 2017 содержит большой набор интегрированных служб по анализу данных. Доступ к данным, расположенным на SQL Server могут получить любые приложения, разработанные на .Net и VisualStudio, а также приложения пакета Microsoft Office. SQL Server 2017 имеет следующие достоинства:
высокая производительность;
высокая надежность;
большие возможности в диалекте языка запросов SQL;
серверная СУБД.
Недостатком данной СУБД можно выделить неудобный интерфейс, который требует долгое освоение.
Работа с данными осуществляется посредством структурированного языка SQL. Данный язык можно использовать для выборки записей по различным критериям или же для выполнения простых функций над ними, такими как добавление, удаление, изменение. SQL можно использовать для создания таблиц, и их настройки ,а так же для создания более сложных элементов триггеров и хранимых процедур.
Наиболее подходящей для реализации проекта является среда разработки «Visual Studio C#», поддерживающая компонентно-ориентированный подход к разработке программных систем, инструмент быстрой разработки приложений.
Среда «Visual Studio C#» объединяет в себе комплекс объектных библиотек (STL, VCL, CLX, MFC и др.), компилятор, отладчик, редактор кода и многие другие режимы. Разработка программного обеспечения в данной среде осуществляется на языке программирования «С#», так как он обладает всеми необходимыми компонентами для реализации поставленной задачи.
Для формирования отчетности необходимы следующие средства Microsoft Office. «Microsoft Excel» является широко распространенным программным средством, с помощью которой производятся расчеты, составляются таблицы и диаграммы, вычисляются простые и сложные функции.
2. ПРОЕКТИРОВАНИЕ ЗАДАЧИ
2.1 Концептуальное проектирование
Проектирование программного продукта производится с помощью методологий IDEF0и DFD. Данный процесс является важной стадией в разработке программного продукта. Задачей стадии является создание логичной и последовательной схемы взаимодействия элементов в технологическом процессе, наглядная демонстрация входных и выходных данных.
Описание системы с помощью IDEF0 называется функциональной моделью. Функциональная модель предназначена для описания существующих бизнес-процессов, в котором используются как естественный, так и графический языки. Обычно именно такие схемы делают бизнес аналитики, при изучении предметной области, после чего предоставляют свою работу программистам, для ознакомления и более ясного понимая целей и задач, а так же изучения последовательности работы программы. Методология IDEF0 широко используется благодаря простой и понятной для понимания графической нотации, применение которой для построения модели очень удобное. Главное место в методологии отводится диаграммам. На диаграммах отображают функции системы посредством геометрических прямоугольников, а также имеющиеся связи между функциями и внешней средой. Связи отображаются с помощью стрелок. Для передачи информации о конкретной системе источником графического языка является сама методология IDEF0.
Диаграмма -- графическое представление данных линейными отрезками или геометрическими фигурами, позволяющее отследить последовательность работы разрабатываемой программы. Место соединения дуги с блоком определяет тип интерфейса:
управляющая информация входит в блок сверху;
входная информация входит в блок слева;
результаты выходят из блока справа;
механизм (человек или автоматизированная система),который осуществляет операцию, входит в блок снизу.
Контекстная диаграмма учета продажи автобусных билетов представлена на рисунке 2.1.
Рисунок 2.1 -- Концептуальная диаграмма IDEF0-модели
Далее необходимо провести декомпозицию, то есть разделить сложный объект на составные элементы. Степень подробности описания и количество уровней определяются требованиями обозримости и удобства восприятия получаемой иерархической структуры, её соответствия уровням знания работающему с ней специалисту.
Количество блоков, которое будет на одной диаграмме, рекомендовано в численности 3-6. Если их меньше, то такие диаграммы вряд ли будут нести смысловую нагрузку. Если количество блоков будет огромным, то прочитать такую диаграмму будет весьма сложно, учитывая наличие ещё и дополнительных стрелок. Для улучшения восприятия информации размещать блоки рекомендуется сверху вниз и слева направо. Такое расположение позволит отразить логику исполнения последовательности процессов. А также стрелки будут создавать меньшую путаницу, обладая минимальным количеством пересечений друг с другом. Если запуск определённой функции никак не контролируется, и процесс может быть запущен в произвольный момент, то такую ситуацию обозначают отсутствием стрелок, означающих управление и вход. Но наличие такой ситуации может говорить потенциальным партнерам об определенной нестабильности и необходимости внимательнее присмотреться к потенциальному партнеру. Блок, у которого есть только стрелка входа, говорит о том, что процесс получает входные параметры, но управление и корректировка во время исполнения не происходят. Блок, у которого есть только стрелка управления, используется для обозначения работ, которые вызываются только по особому распоряжению управляющей системы. Они управляются и корректируются на всех своих этапах. Декомпозиция концептуальной диаграммы представлена на рисунке 2.2.
Рисунок 2.2 -- Декомпозиция
Диаграмма потоков данных (Data Flow Diagrams -- DFD) -- один из основных инструментов структурного анализа и проектирования информационных систем, существовавших до широкого распространения UML. Целью такого представления -- продемонстрировать, как каждый процесс преобразует свои входные данные в выходные, а также выявить отношения между этими процессами.
Диаграмма потоков данных представлена на рисунке 2.3.
Рисунок 2.3 -- Диаграмма потоков данных
Средством моделирования предметной области на этапе концептуального проектирования является модель «сущность-связь». Часто ее называют ER-моделью. В ней моделирование структуры данных предметной области базируется на использовании графических средств -- ER-диаграмм.
Диаграммы «Сущность-связь» с основными сущностями представлена на рисунке 2.4.
Сущность «Route» используется для хранения информации об используемых маршрутах, содержит такие поля как: «id_route», «NameR», «NumbeR», «Price».
Сущность «Trips» используется для хранения информации о расписании маршрутов, содержит такие поля как: «DispatchTime», «TimeTrip», «id_trip», «id_route».
Сущность «Paymasters» используется для хранения информации о кассирах, которые работают с данным программным продуктом, содержит такие поля как: «id_master», «NameM», «Surname» , «MidName» ,«Passport», «DateBirth».
Сущность «Tickets» является одной из ключевых, она хранит информацию о проданных билетах и содержит следующие поля: «id_ticket», «id_trip», «BuyDate», «DateTrip», «id_master».
Рисунок 2.4 --диаграмма «Сущность-связь»
2.2 Логическая модель данных
Логическая модель расширяет концептуальную путем определения для сущностей их атрибутов, описаний и ограничений, уточняет состав сущностей и взаимосвязи между ними.В ходе уточнения базы данных происходит её нормализация до 3 уровня, уменьшается избыточность данных, так же в ходе уточнения могут создаваться новые вспомогательные таблицы. В результате уточнения получена база данных с 5 таблицами, такими как: «Route», «Trips», «Paymasters», «Tickets», «Logins». Структурная схема базы данных представлена на рисунке 2.5.
Рисунок 2.5 -- Структурная схема базы данных
Структура таблицы «Route» указана в таблице 2.1. Данная таблица необходима для хранения информации о маршрутах, а именно о названии маршрута, его номере и цене. Связь с таблицей «Trips», служит для того, чтобы расписание было привязано к конкретному маршруту.
Таблица 2.1 -- Поля таблицы «Route»
Название поля |
Тип поля |
Описание |
|
1 |
2 |
3 |
|
id_route |
Счетчик |
Уникальное ключевое поле таблицы |
|
NameR |
Текстовый |
Наименование маршрута |
|
NumberR |
Текстовый |
Номер маршрута |
|
Price |
Числовой |
Стоимость билета на этот маршрут |
Структура таблицы «Trips» указана в таблице 2.2. Данная таблица необходима для хранения информации о расписании автобусов.
Таблица 2.2 -- Поля таблицы «Trips»
Название поля |
Тип поля |
Описание |
|
1 |
2 |
3 |
|
id_trip |
Счетчик |
Уникальное ключевое поле таблицы |
|
id_route |
Числовой |
Вторичный ключ для связи с таблицей «Route», определяет маршрут |
|
DispatchTime |
Время |
Время отправки автобуса |
|
TimeTrip |
Время |
Время на поездку |
|
Limit |
Числовой |
Количество мест |
Структура таблицы «Paymasters» указана в таблице 2.3. Данная таблица необходима для хранения информации о кассирах.
Таблица 2.3 -- Поля таблицы «Paymasters»
Название поля |
Тип поля |
Описание |
|
1 |
2 |
3 |
|
id_master |
Счетчик |
Уникальное ключевое поле таблицы |
|
NameM |
Текстовый |
Имя |
|
Surname |
Текстовый |
Фамилия |
|
MidName |
Текстовый |
Отчество |
|
Passport |
Текстовый |
Номер пасспорт |
|
DateBirth |
Дата рождения |
Дата рождения |
|
Telefon |
Текстовый |
Мобильный номер телефона сотрудника для связи |
Структура таблицы «Tickets» указана в таблице 2.4. Данная таблица необходима для хранения информации о проданных билетах.
Таблица 2.4 -- Поля таблицы «Tickets»
Название поля |
Тип поля |
Описание |
|
id_tickets |
Счетчик |
Уникальное ключевое поле таблицы |
|
id_trip |
Числовой |
Вторичный ключ для связи с таблицей «Trips» для определения маршрута и времени поездки |
|
BuyDate |
Дата |
Дата покупки билета |
|
DateTrip |
Дата |
Дата поездки |
|
id_master |
Числовой |
Вторичный ключ для связи с таблицей «Paymasters» для определения кассира, который продал билет |
Структура таблицы «Logins» указана в таблице 2.10.Данная таблица содержит информацию об аккаунтах сотрудников.
Таблица 2.10 -- Поля таблицы «Logins»
Название поля |
Тип поля |
Описание |
|
id_master |
Числовой |
Вторичный ключ для связи с таблицей «Paymasters» для определения кассира, которому принадлежит этот аккаунт |
|
Login |
Текстовый |
Логин |
|
Pass |
Текстовый |
Пароль |
|
Adm |
Числовой |
Служит для разграничение между администратором и кассиром. |
3. ОПИСАНИЕ ТЕХНОЛОГИИ РЕАЛИЗАЦИИ
3.1 Описание интерфейса
Интерфейс -- совокупность унифицированных, программных и конструктивных средств, основанных на стандарте, реализующих взаимодействие различных функциональных элементов в информационной системе, обеспечивающих информационную и конструктивную совместимость этих элементов.
Для удобного использования программного продукта графический интерфейс программы был максимально упрощен и имеет современный стиль программы, отдалённо напоминающий стиль веб-приложения.
Программа имеет 2 основные формы, одна для работы в режиме «Администратор», а другая для работы в режиме «Пользователь». На рисунке 3.1 будет представлена схематичная форма для работы в режиме «Администратор», а на рисунке 3.2, соответственно в режиме «Пользователя».
Рисунок 3.1Окно программы в режиме «Адиминстратор»: 1 меню навигации между таблицами; 2 вспомогательная панель для фильтрации в некоторых таблицах; 3 область отображения таблиц; 4 панель, на которой находятся кнопки «Добавление», «Редактирования» и «Изменения».
Рисунок 3.2 Окно программы в режиме «Пользователь»: 1 поиск нужного рейса; 2 отображение списка рейсов; 3 область отображения таблиц; 4 элемент отражающий работоспособность сотрудника
Элемент, отражающий работоспособность сотрудника будет обновляться каждый раз после продажи билета. Расчет происходит по формуле, сколько биллетов можно продать за день - количество билетов, которые продал сотрудник, отображаться это будет в процентном коэффициенте. На мой взгляд, такое решение послужит дополнительной мотивацией сотрудника и повлияет на его производительность, на рабочем месте.
При запуске программы открывается форма входа, в которой производится авторизация пользователя и определение его прав (рисунок 3.3), подробно про разграничение прав будет описано в пункте 3.5.Так как работа со справочниками осуществляется в режиме работы от администратора, то далее будут представлены скриншоты именно этой рабочей области. Окно в режиме работы «Администратор» будет представлено на рисунке 3.4.
Рисунок 3.3 -- форма входа
Рисунок 3.4 -- Окно в режиме работы «Администратор»
Поля для заполнения информации в таблицу «Маршруты» представлены на рисунке3.5.
Рисунок 3.5 -- Поля для заполнения в таблицу «Маршруты»
Поля для заполнения информации в таблицу «Расписание» представлены на рисунке 3.6. Маршрут можно выбрать из выпадающего списка, вместо того, чтобы набирать его название вручную.
Рисунок 3.6 -- Поля для заполнения в таблицу «Расписание»
Поля для заполнения информации в таблицу «Билеты» представлены на рисунке 3.7. Следует понимать, что это данные о продаваемом билете, после этого будет распечатан чек.
Рисунок 3.7 -- Поля для продажи билетов
Поля для заполнения информации в таблицу «Сотрудники» представлены на рисунке 3.8.
Рисунок 3.8 -- Поля для заполнения в таблицу «Сотрудники»
Для добавления записи в таблицу необходимо заполнить требуемые поля и нажать на кнопку «Добавить». После нажатия на кнопку, запись добавляется в таблицу и выводится сообщение об успешном добавлении (рисунок 3.9)
Рисунок 3.9-- Сообщение о добавлении записи
Для удаления записи необходимо ее выбрать инажать на кнопку удаления, размещенной на панели редактирования. После нажатия, программа выведет диалоговое окно с требованием подтвердить ваши намерения на удаление выделенной записи. Представлено на рисунке 3.10.
Рисунок 3.10--подтверждение удаления записи
Для изменения записи необходимо ее выбрать и нажать на кнопку «Изменить», размещенной на панели редактирования. После нажатия, откроется новое окно, где пользователь сможет внести изменения. Изменив данные нужно подтвердить изменение. После подтверждения, запись изменяется и выводится сообщение об успешном изменении (рисунок 3.11)
Рисунок 3.11-- Сообщение об изменении записи
3.2 Описание запросов и представлений данных
Язык программирования «С#»позволяет работать с различными СУБД, обращение к ним происходит через SQL-запросы по средствам встроенных библиотек.
Примеры SQL запросов на добавление, редактирование, удаление, поиск, сортировку представлены на рисунках 3.12, 3.13, 3.14, 3.15, 3.16. Полный листинг программы приведен в приложении А.
Рисунок 3.12 --запрос на добавление записи
Рисунок 3.13 --запрос на редактирование записи
Рисунок 3.14 --запрос на удаление записи
Рисунок 3.15 -- Поиск записей
Рисунок 3.16 -- Фильтрация записей
3.3Формирование отчетов
В программе существует возможность получения подробной статистики о проданных билетах, для удобства чтения или предоставления этих данным третьим лицам, программа имеет возможность выводить на печать эти документы. Так же после продажи билета, программа распечатает чек (Рисунок 3.17). Для вывода документа на печать требуется выбрать, по каким параметрам будет формировать отчет и нажать на кнопку «Сформировать отчет» (рисунок 3.18).
«Отчет о проданных билетах» предоставляется в двух вариантах: «Детальный» и «Сгруппированный»данные отчеты будут представлены на рисунках 3.19 и 3.20 соответственно.
Рисунок 3.17 -- чек (билет)
Рисунок 3.18 -- выбор параметров для формирования отчета
Рисунок 3.19 -- детальный вид отчета
Рисунок 3.20 -- сгруппированный вид отчета
3.4 Описание триггеров и хранимых процедур и способы их вызова
Триггер -- хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных: добавлением INSERT, удалением DELETE строки в заданной таблице, или изменением UPDATE данных в определённом столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.
Исходя из этого, можно сделать вывод, что триггеры в целом очень полезны. А использование их в программе, которая использует в качестве СУБД MSSQLServer 2017вполне оправдано. Программа использует следующие триггеры: «Leaving», «DispTimeTrip»и «CheckLimit».
Триггер «Leaving» -- предупреждает удаление сотрудника из базы и вместо этого даёт ему «метку», что сотрудник уволен, после чего с ним нельзя взаимодействовать. Триггер представлен на рисунке 3.21.
Рисунок 3.21 -- триггер «Leaving»
Триггер «DispTimeTrip» -- запрещает добавлять в расписание рейсы, с уже существующим временем отправки, т.е. нельзя по одному и тому же маршруту отправить 2 автобуса в одно и то же время (рисунок 3.22).
Рисунок 3.22-- триггер «DispTimeTrip»
Триггер «CheckLimit» -- проверяет количество проданных билетов и если вдруг билеты на определенный рейс закончаться, то программа выдаст сообщение об этом. Триггер представлен на рисунке 3.23.
Рисунок 3.23-- триггер «CheckLimit»
Помимо триггеров программа использует хранимые процедуры, для упрощения различных подсчетов. Хранимая процедура (ХП) -- это объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. В программе используются следующие ХП: «NotRegistredUser», «MaxTicketsToday» и «SellsTicketsToday». «NotRegistredUser»-- отвечает за вывод пользователей, которых еще не авторизовал администратор, но при этом их уже взяли на работу. Хранимая процедура представлена на рисунке 3.24.
Рисунок 3.24--«NotRegistredUser»
«MaxTicketsToday» -- вычисляет максимальное количество билетов, которое можно продать за день (рисунок 3.25)
Рисунок 3.25--«MaxTicketsToday»
«SellsTicketsToday» -- вычисляет, сколько билетов продано за день (рисунок 3.26).
Рисунок 3.26--«SellsTicketsToday»
3.5 Описание средств защиты и разграничения доступа к данным
Как было описано выше, программа имеет 2 режима работы: «Кассир» и «Администратор». Такое разграничение доступа используется для того, чтобы кассиры могли заниматься исключительно продажей автобусных билетов, что является их прямой обязанностью. Администратор же, в свою очередь должен: следить за актуальностью расписания и редактировать его в случае необходимости, заниматься формирование отчетов о проданных билетах, добавлять новых сотрудников в базу при приеме их на работу, а так же создавать для них аккаунт. Каждый пользователь имеет свой уникальный аккаунт. Когда совершается вход в систему, программу определяет уровень прав и инициалы сотрудника, в дальнейшем программа использует его инициалы, при формировании чека. На рисунке 3.27 будет представлена форма, в которой работает кассир.
Рисунок 3.27 -- форма для работы кассиры
4. ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНОГО ПРОДУКТА
Тестирование программного обеспечения -- это процесс выполнения программ на некотором наборе данных, для которого заранее известен результат применения или известны правила поведения этих программ.
Процесс отладки включает:
- действия, направленные на выявление ошибок (тестирование);
- диагностику и локализацию ошибок (определение характера ошибок и их местонахождение);
- внесение исправлений в программу с целью устранения ошибок.
Отладка программного обеспечения проводилась с помощью отладчика пошаговой отладкой, просмотром состояний в требуемых точках исполнения программы.
В данной программе внесены ограничения ввода значений при добавлении и изменении записи, чтобы пользователь не допустил ошибку при вводе и изменении данных в таблицах. Так же если всё же пользователь введёт некорректные данные или оставит некоторые поля пустыми, то программа выдаст ошибку о некорректном вводе данных (рисунок 4.1).Однако следует отметить, что программа разработана таким образом, что допустить какие-то ошибки при заполнении данных достаточно трудно. Ошибка все же может быть вызвана при заполнении полей, которые должны быть уникальными, однако программа уведомит вас об этом (рисунок 4.2).
Рисунок 4.1 -- Сообщение о некорректном вводе данных
Рисунок 4.2-- Сообщение об ошибке на уникальность полей
5. ОПИСАНИЕ ПРИМЕНЕНИЯ
1. Назначение программы.
Программа предназначена для автоматизации продажи автобусных билетов. Автоматизация позволит ускорить процесс поиска и обработки информации.
Для работы с программой пользователь должен обладать базовыми навыками работы с ПК.
2. Условия выполнения программы.
В состав технических средств для выполнения программы должен входить персональный компьютер, включающий в себя:
- процессор с частотой 1 ГГц или более;
- оперативную память объемом не менее 512 Мб;
- операционную систему «Windows 7» и выше;
- установленную программу «MS Excel»;
- установленную платформу «.NETFramework 4.5» и выше;
- клавиатуру и мышь.
3. Выполнение программы.
Для начала работы с программой необходимо запустить файл «GomelTicket.exe», который находится в папке с программой.
Основные функции, выполняемые при работе с программой это:
1. Добавление информации. Для добавления информации необходимо:
- выбрать нужную таблицув меню;
- в окне добавления ввести все данные, соблюдая корректность ввода;
- нажать кнопку «Добавить».
2. Изменение информации. Для изменения информации необходимо:
- выбрать нужную таблицу;
- выбрать нужную запись;
-нажать на кнопку «Изменить»;
- в окне изменения ввести новые данные;
- подтвердить изменение;
3. Удаление информации. Для удаления информации необходимо:
- выбрать нужную таблицу;
- выбрать нужную запись;
- нажать на кнопку «Удалить»;
- подтвердить удаление записи, нажав кнопку «Ок».
4. Фильтрация информации. Для фильтрации информации необходимо:
- нажать на кнопку «Подробно»;
- выбрать тип фильтрация, затем установить начальную и конечную даты по которым производиться фильтрация;
5. Поиск информации. Для поиска информации необходимо ввести искомое слово в поле расположенное рядом с таблицей.
6. Сортировка информации. Для сортировки информации необходимо:
- выбрать нужную таблицу;
- нажать на соответствующий столбец;
7. Формирование документов в «MS Excel». Для создания документов в «MS Excel» необходимо выбрать тип отчета, который формируется на печать и нажать на кнопку «Сформировать отчет».
4. Сообщения.
В ходе работы с программой пользователь получает различные сообщения, которые можно разделить на 2 группы:
1. Сообщения о действиях, которые могут быть совершены;
2. Сообщения, содержащие информацию об ошибках.
В первую группу входят следующие сообщения:
- «Удалить данную запись?» -- после подтверждения запись удалится.
Во вторую группу входят следующие сообщения:
- сообщения о некорректности ввода данных.
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсового проекта была создана автоматизированная система, предоставляющая возможность продажи автобусных билетов. Программа является простой для понимания и требует минимального обучения.
В процессе разработки автоматизированной системы была изучена предметная область, а также детально изучен процесс продажи автобусных билетов. Также, были исследованы используемые компоненты, их свойства и принципы функционирования. Разработана общая функциональная схема работы кассиров на автовокзале, с её последующими декомпозициями, так же была разработана DFD диаграмма и диаграмма сущность-связь. Результатом выполнения данных действий является отлаженная и готовая к эксплуатации автоматизированная система продажи автобусных билетов, сочетающая в себе все планируемые функции и необходимые возможности.
Графический интерфейс реализован в полной мере и отвечает всем требованиям, которые позволят быстро и слаженно ориентироваться в программе.
Выбранная среда программирования значительно упростила процесс разработки графического интерфейса посредством использования компонентов «Metro Fraemwork»и «Bunifu Fraemwork», что позволило создавать красивые и анимированные окна программы.
Программный продукт предназначен для использования на кассах автовокзала.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. ГОСТ 91.701-90 «Схема алгоритмов, программ, данных и систем.Условные обозначения и правила выполнения»., 1998. - 45 с.
2. Кириллов, В.В. Основы проектирования реляционных баз данных. Учебное пособие / В.В. Кириллов. - СПб: ИТМО, 1994. -90 с.
3. Дубинин, Н.М. Основы разработки WIMP _ интерфейса: учебник / Н.М. Дубинин, Р.Н. Агапов. 2005. - 326 с.
4. Павловская, Т.А. Языки программирования С#: учебник / Т.А Павловская, А.В. Отвагин. - 2-е изд., перераб и доп., 2017. - 464 с.
5. Скит, Д.А. C#: программирование для профессионалов / Д.А. Скит. - Издательский дом Вильямс, 2011. - 544 с.
ПРИЛОЖЕНИЕ
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MetroFramework.Forms;
using System.Data.SqlClient;
using MetroFramework.Controls;
using Bunifu.Framework.LICENSE;
using BunifuAnimatorNS;
namespace WindowsFormsApp1
{
public partial class Main : Form
{
string putb = @"Data Source=009\SQL;Initial Catalog=Ticketosa;Integrated Security=True";
bool press = false;
public Main()
{
InitializeComponent();
//string select4 = String.Format(@"SELECT * FROM Buses");
//LoadGrid(select4, metroGrid4);
//metroGrid4.Columns[0].Visible = false;
//metroGrid4.Columns[1].HeaderText = "Марка";
//metroGrid4.Columns[2].HeaderText = "Номер";
//metroGrid4.Columns[3].HeaderText = "Вместимость";
//metroGrid4.Columns[4].Visible = false;
//metroGrid4.Columns[5].HeaderText = "Датавыпуска";
//metroGrid4.Visible = false;
metroLabel1.Text = Program.Login;
string select2 = String.Format(@"SELECT Trips.id_trip, Route.NameR, Trips.DispatchTime, Trips.TimeTrip, Limit
FROM Route INNER JOIN Trips ON Route.id_route = Trips.id_route
ORDER BY Trips.DispatchTime;");
LoadGrid(select2, metroGrid2);
metroGrid2.Columns[0].Visible = false;
metroGrid2.Columns[1].HeaderText = "Маршрут";
metroGrid2.Columns[2].HeaderText = "Времяотправки";
metroGrid2.Columns[3].HeaderText = "Времяпоездки";
metroGrid2.Columns[4].HeaderText = "Количествомест";
metroGrid2.Visible = false;
string select5 = String.Format(@"SELECT * FROM Paymasters WHERE Leave = 0;");
LoadGrid(select5, metroGrid5);
PaymastersHeader();
metroGrid5.Visible = false;
//string select3 = String.Format(@"SELECT Tickets.id_ticket, Route.NameR, Tickets.BuyDate, Tickets.DateTrip, Trips.DispatchTime, Trips.TimeTrip, Route.Price
//FROM Route INNER JOIN (Trips INNER JOIN Tickets ON Trips.id_trip = Tickets.id_trip) ON Route.id_route = Trips.id_route;");
string select3 = String.Format(@"SELECT Route.NameR, Tickets.BuyDate, Trips.DispatchTime, Count(Trips.DispatchTime) AS [Count-DispatchTime]
FROM Route INNER JOIN (Trips INNER JOIN Tickets ON Trips.id_trip = Tickets.id_trip) ON Route.id_route = Trips.id_route
GROUP BY Route.NameR, Tickets.BuyDate, Trips.DispatchTime
HAVING (((Tickets.BuyDate)=CONVERT (date, GETDATE())))
ORDER BY DispatchTime");
LoadGrid(select3, metroGrid3);
//metroGrid3.Columns[0].Visible = false;
metroGrid3.Columns[0].HeaderText = "Маршрут";
metroGrid3.Columns[1].HeaderText = "Датапокупки";
metroGrid3.Columns[2].HeaderText = "Времяотправки";
metroGrid3.Columns[3].HeaderText = "Проданобилетов";
//metroGrid3.Columns[3].Visible = false;
////metroGrid3.Columns[3].HeaderText = "Датапоездки";
//metroGrid3.Columns[4].HeaderText = "Времяотправки";
//metroGrid3.Columns[5].Visible = false;
////metroGrid3.Columns[5].HeaderText = "Времявпути";
//metroGrid3.Columns[6].HeaderText = "Цена";
metroGrid3.Visible = false;
}
private void PaymastersHeader()
{
metroGrid5.Columns[0].Visible = false;
metroGrid5.Columns[1].HeaderText = "Имя";
metroGrid5.Columns[2].HeaderText = "Фамилия";
metroGrid5.Columns[3].HeaderText = "Отчество";
metroGrid5.Columns[4].HeaderText = "Паспорт";
metroGrid5.Columns[5].HeaderText = "Деньрождения";
metroGrid5.Columns[6].HeaderText = "Телефон";
metroGrid5.Columns[7].Visible = false;
}
private void Main_Load(object sender, EventArgs e)
{
String select1 = String.Format(@"SELECT Route.id_route, Route.NameR, Route.NumberR, Route.Price
FROM Route;");
LoadGrid(select1, metroGrid1);
metroGrid1.ClearSelection();
metroGrid1.Columns[0].Visible = false;
metroGrid1.Columns[1].HeaderText = "Маршрут";
metroGrid1.Columns[2].HeaderText = "Номер";
metroGrid1.Columns[3].HeaderText = "Цена";
metroGrid1.Visible = true;
Program.Redact = false;
}
public void LoadGrid(string select, MetroGrid gr)
{
SqlDataAdapter data1 = new SqlDataAdapter(select, putb);
DataTable tabl1 = new DataTable();
data1.Fill(tabl1);
gr.DataSource = tabl1;
}
private void bunifuFlatButton1_Click(object sender, EventArgs e)//маршруты
{
btnTickets.Visible = false;
metroGrid1.Visible = true;
metroCheckBox1.Visible = false;
BtnAvt.Visible = false;
VerifyImage.Visible = false;
metroGrid2.Visible = false;
metroGrid4.Visible = false;
metroGrid3.Visible = false;
metroGrid5.Visible = false;
edBtn.Enabled = true;
}
private void bttMenu1_Click(object sender, EventArgs e)
{
addBtn.Visible = false;
delBtn.Visible = false;
edBtn.Visible = false;
panel3.Visible = false;
if (SideMenu.Width == 48)
{
SideMenu.Visible = false;
SideMenu.Width = 228;
panel1.Visible = false;
panel1.Width = 479;
panel1.Location = new Point(225, 131);
panel2.Visible = false;
panel2.Width = 480;
panel2.Location = new Point(226, 396);
panel3.Width = 480;
panel3.Location = new Point(226, 6);
//LogoAnimator.HideSync(addBtn);
//LogoAnimator.HideSync(edBtn);
//LogoAnimator.HideSync(delBtn);
PanelAnimator.ShowSync(SideMenu);
LogoAnimator.ShowSync(Logo);
GridAnimator.ShowSync(panel1);
Panel3Animator.ShowSync(panel3);
if (press == true)
{
Panel2Animator.ShowSync(panel2);
LogoAnimator.ShowSync(addBtn);
if (metroGrid3.Visible == false)
{
LogoAnimator.ShowSync(edBtn);
}
LogoAnimator.ShowSync(delBtn);
}
}
else
{
LogoAnimator.Hide(Logo);
SideMenu.Visible = false;
SideMenu.Width = 48;
panel1.Visible = false;
panel1.Location = new Point(48, 131);
panel1.Width = 656;
panel2.Visible = false;
panel2.Width = 686;
panel2.Location = new Point(46, 396);
panel3.Width = 574;
panel3.Location = new Point(152, 6);
PanelAnimator.ShowSync(SideMenu);
GridAnimator.ShowSync(panel1);
Panel3Animator.ShowSync(panel3);
if (press == true)
{
Panel2Animator.ShowSync(panel2);
LogoAnimator.ShowSync(addBtn);
LogoAnimator.ShowSync(edBtn);
LogoAnimator.ShowSync(delBtn);
if (metroGrid3.Visible == false)
{
edBtn.Enabled = false;
}
}
}
}
private void bunifuFlatButton2_Click(object sender, EventArgs e) //Расписание
{
Panel3Animator.Hide(bunifuImageButton2);
metroCheckBox1.Visible = false;
BtnAvt.Visible = false;
VerifyImage.Visible = false;
metroGrid2.Visible = true;
metroGrid4.Visible = false;
metroGrid3.Visible = false;
metroGrid1.Visible = false;
metroGrid5.Visible = false;
btnTickets.Visible = false;
edBtn.Enabled = true;
}
private void bunifuFlatButton3_Click(object sender, EventArgs e) //Билеты
{
Panel3Animator.Show(bunifuImageButton2);
edBtn.Enabled = false;
btnTickets.Visible = true;
metroCheckBox1.Visible = false;
BtnAvt.Visible = false;
VerifyImage.Visible = false;
metroGrid2.Visible = false;
metroGrid4.Visible = false;
metroGrid1.Visible = false;
metroGrid3.Visible = true;
metroGrid5.Visible = false;
}
private void bunifuFlatButton4_Click(object sender, EventArgs e) //Сотрудники
{
Panel3Animator.Hide(bunifuImageButton2);
btnTickets.Visible = false;
metroGrid5.Visible = true;
metroCheckBox1.Visible = true;
metroGrid4.Visible = false;
BtnAvt.Visible = false;
VerifyImage.Visible = false;
metroGrid2.Visible = false;
metroGrid1.Visible = false;
metroGrid3.Visible = false;
edBtn.Enabled = true;
metroCheckBox1_CheckedChanged(sender, e);
}
private void metroGrid2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void bunifuFlatButton6_Click_1(object sender, EventArgs e)
{
if (press == false)
{
Panel2Animator.ShowSync(panel2);
LogoAnimator.ShowSync(addBtn);
LogoAnimator.ShowSync(edBtn);
LogoAnimator.ShowSync(delBtn);
press = true;
}
else
{
LogoAnimator.HideSync(delBtn);
LogoAnimator.HideSync(edBtn);
LogoAnimator.HideSync(addBtn);
Panel2Animator.HideSync(panel2);
panel2.Visible = false;
press = false;
}
}
//Добавление
private void addBtn_Click(object sender, EventArgs e)
{
if (metroGrid1.Visible)
{
Program.Redact = false;
Route rt = new Route();
rt.ShowDialog();
String select1 = String.Format(@"SELECT Route.id_route, Route.NameR, Route.NumberR, Route.Price
FROM Route;");
LoadGrid(select1, metroGrid1);
metroGrid1.ClearSelection();
metroGrid1.Columns[0].Visible = false;
metroGrid1.Columns[1].HeaderText = "Маршрут";
metroGrid1.Columns[2].HeaderText = "Номер";
metroGrid1.Columns[3].HeaderText = "Цена";
}
else if (metroGrid2.Visible)
{
Program.Redact = false;
Trips tr = new Trips();
tr.ShowDialog();
string select2 = String.Format(@"SELECT Trips.id_trip, Route.NameR, Trips.DispatchTime, Trips.TimeTrip, Limit
FROM Route INNER JOIN Trips ON Route.id_route = Trips.id_route
ORDER BY Trips.DispatchTime;");
LoadGrid(select2, metroGrid2);
metroGrid2.Columns[0].Visible = false;
metroGrid2.Columns[1].HeaderText = "Маршрут";
metroGrid2.Columns[2].HeaderText = "Времяотправки";
metroGrid2.Columns[3].HeaderText = "Времяпоездки";
metroGrid2.Columns[4].HeaderText = "Количествомест";
}
else if (metroGrid3.Visible)
{
Tickets ti = new Tickets();
ti.ShowDialog();
//string select3 = String.Format(@"SELECT Tickets.id_ticket, Route.NameR, Tickets.BuyDate, Tickets.DateTrip, Trips.DispatchTime, Trips.TimeTrip, Route.Price
//FROM Route INNER JOIN (Trips INNER JOIN Tickets ON Trips.id_trip = Tickets.id_trip) ON Route.id_route = Trips.id_route;");
string select3 = String.Format(@"SELECT Route.NameR, Tickets.BuyDate, Trips.DispatchTime, Count(Trips.DispatchTime) AS [Count-DispatchTime]
FROM Route INNER JOIN (Trips INNER JOIN Tickets ON Trips.id_trip = Tickets.id_trip) ON Route.id_route = Trips.id_route
GROUP BY Route.NameR, Tickets.BuyDate, Trips.DispatchTime
HAVING (((Tickets.BuyDate)=CONVERT (date, GETDATE())))
ORDER BY DispatchTime");
LoadGrid(select3, metroGrid3);
metroGrid3.Columns[0].HeaderText = "Маршрут";
metroGrid3.Columns[1].HeaderText = "Датапокупки";
metroGrid3.Columns[2].HeaderText = "Времяотправки";
metroGrid3.Columns[3].HeaderText = "Проданобилетов";
}
else if (metroGrid4.Visible)
{
//Buses bs = new Buses();
//bs.ShowDialog();
//string select4 = String.Format(@"SELECT * FROM Buses");
//LoadGrid(select4, metroGrid4);
//metroGrid4.Columns[0].Visible = false;
//metroGrid4.Columns[1].HeaderText = "Марка";
//metroGrid4.Columns[2].HeaderText = "Номер";
//metroGrid4.Columns[3].HeaderText = "Вместимость";
//metroGrid4.Columns[4].Visible = false;
//metroGrid4.Columns[5].HeaderText = "Датавыпуска";
}
else
{
Program.Redact = false;
AdMasters masters = new AdMasters();
masters.ShowDialog();
//string select5 = String.Format(@"SELECT * FROM Paymasters WHERE Leave = 0;");
//LoadGrid(select5, metroGrid5);
if (metroCheckBox1.CheckState == CheckState.Checked)
{
string select = String.Format(@"SELECT Paymasters.id_master, Paymasters.NameM, Paymasters.Surname, Paymasters.MidName, Paymasters.Passport, Paymasters.DateBirth, Paymasters.Telefon, Paymasters.Leave
FROM Paymasters INNER JOIN Logins ON Paymasters.id_master = Logins.id_master WHERE Paymasters.Leave = 0");
LoadGrid(select, metroGrid5);
PaymastersHeader();
BtnAvt.Text = "Датьправа";
BtnAvt.Visible = true;
Program.GetRoot = true;
}
else if (metroCheckBox1.CheckState == CheckState.Unchecked)
{
string select = String.Format(@"EXEC NotRegistredUsers");
LoadGrid(select, metroGrid5);
PaymastersHeader();
BtnAvt.Text = "Авторизовать";
BtnAvt.Visible = true;
Program.GetRoot = false;
}
else if (metroCheckBox1.CheckState == CheckState.Indeterminate)
{
string select5 = String.Format(@"SELECT * FROM Paymasters WHERE Leave = 0;");
LoadGrid(select5, metroGrid5);
PaymastersHeader();
}
}
}
// удаление
private void delBtn_Click(object sender, EventArgs e)
{
if (metroGrid1.Visible)
{
SqlConnection connect = new SqlConnection(putb);
connect.Open();
SqlCommand con1 = connect.CreateCommand();
con1.CommandText = String.Format(@"DELETE FROM Route WHERE id_route = {0}", metroGrid1[0, metroGrid1.CurrentRow.Index].Value);
if (MessageBox.Show("Действительно удалить маршрут? \n Все его рейсы так же будут удалены", "Удалить?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
con1.ExecuteNonQuery();
String select1 = String.Format(@"SELECT Route.id_route, Route.NameR, Route.NumberR, Route.Price
FROM Route;");
LoadGrid(select1, metroGrid1);
metroGrid1.ClearSelection();
metroGrid1.Columns[0].Visible = false;
metroGrid1.Columns[1].HeaderText = "Маршрут";
metroGrid1.Columns[2].HeaderText = "Номер";
metroGrid1.Columns[3].HeaderText = "Цена";
MessageBox.Show("Удалено", "Удаление", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
else if (metroGrid2.Visible)
{
SqlConnection connect = new SqlConnection(putb);
connect.Open();
SqlCommand con1 = connect.CreateCommand();
con1.CommandText = String.Format(@"DELETE FROM Trips WHERE id_trip = {0}", metroGrid2[0, metroGrid2.CurrentRow.Index].Value);
if (MessageBox.Show("Действительноудалитьрейс?", "Удалить?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
con1.ExecuteNonQuery();
string select2 = String.Format(@"SELECT Trips.id_trip, Route.NameR, Trips.DispatchTime, Trips.TimeTrip, Limit
FROM Route INNER JOIN Trips ON Route.id_route = Trips.id_route;");
LoadGrid(select2, metroGrid2);
metroGrid2.Columns[0].Visible = false;
metroGrid2.Columns[1].HeaderText = "Маршрут";
metroGrid2.Columns[2].HeaderText = "Времяотправки";
metroGrid2.Columns[3].HeaderText = "Времяпоездки";
metroGrid2.Columns[4].HeaderText = "Количествомест";
MessageBox.Show("Удалено", "Удаление", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
else if (metroGrid3.Visible)
{
}
else if (metroGrid4.Visible)
{
//SqlConnection connect = new SqlConnection(putb);
//connect.Open();
//SqlCommand con1 = connect.CreateCommand();
//con1.CommandText = String.Format(@"DELETE FROM Buses WHERE id_bus = {0}", metroGrid4[0, metroGrid4.CurrentRow.Index].Value);
//if (MessageBox.Show("Действительно удалить сотрудника? \n Его аккаунт так же будет удален", "Удалить?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
//{
// con1.ExecuteNonQuery();
// string select4 = String.Format(@"SELECT * FROM Buses");
// LoadGrid(select4, metroGrid4);
// metroGrid4.Columns[0].Visible = false;
// metroGrid4.Columns[1].HeaderText = "Марка";
// metroGrid4.Columns[2].HeaderText = "Номер";
// metroGrid4.Columns[3].HeaderText = "Вместимость";
// metroGrid4.Columns[4].Visible = false;
// metroGrid4.Columns[5].HeaderText = "Датавыпуска";
// MessageBox.Show("Удалено", "Удаление", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
//}
}
else
{
SqlConnection connect = new SqlConnection(putb);
connect.Open();
SqlCommand con1 = connect.CreateCommand();
SqlCommand con2 = connect.CreateCommand();
int ID = Convert.ToInt32(metroGrid5[0, metroGrid5.CurrentRow.Index].Value);
if (Program.Master == ID)
{
MessageBox.Show("Невозможноудалитьсамогосебя", "Ошиюка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
{
if (metroCheckBox1.CheckState == CheckState.Checked)
{
BtnAvt.Text = "Датьправа";
BtnAvt.Visible = true;
Program.GetRoot = true;
con1.CommandText = String.Format(@"DELETE FROM Paymasters WHERE id_master = {0}", metroGrid5[0, metroGrid5.CurrentRow.Index].Value);
con2.CommandText = String.Format(@"DELETE FROM Logins WHERE id_master = {0}", metroGrid5[0, metroGrid5.CurrentRow.Index].Value);
if (MessageBox.Show("Действительно удалить сотрудника? \n Его аккаунт так же будет удален", "Удалить?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
con1.ExecuteNonQuery();
con2.ExecuteNonQuery();
}
string select = String.Format(@"SELECT Paymasters.id_master, Paymasters.NameM, Paymasters.Surname, Paymasters.MidName, Paymasters.Passport, Paymasters.DateBirth, Paymasters.Telefon, Paymasters.Leave
FROM Paymasters INNER JOIN Logins ON Paymasters.id_master = Logins.id_master WHERE Paymasters.Leave = 0");
LoadGrid(select, metroGrid5);
PaymastersHeader();
}
else if (metroCheckBox1.CheckState == CheckState.Unchecked)
{
BtnAvt.Text = "Авторизовать";
BtnAvt.Visible = true;
Program.GetRoot = false;
con1.CommandText = String.Format(@"DELETE FROM Paymasters WHERE id_master = {0}", metroGrid5[0, metroGrid5.CurrentRow.Index].Value);
if (MessageBox.Show("Действительно удалить сотрудника? \n Его аккаунт так же будет удален", "Удалить?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
con1.ExecuteNonQuery();
}
string select = String.Format(@"EXEC NotRegistredUsers");
LoadGrid(select, metroGrid5);
PaymastersHeader();
}
else if (metroCheckBox1.CheckState == CheckState.Indeterminate)
{
con1.CommandText = String.Format(@"DELETE FROM Paymasters WHERE id_master = {0}", metroGrid5[0, metroGrid5.CurrentRow.Index].Value);
con2.CommandText = String.Format(@"DELETE FROM Logins WHERE id_master = {0}", metroGrid5[0, metroGrid5.CurrentRow.Index].Value);
if (MessageBox.Show("Действительно удалить сотрудника? \n Его аккаунт так же будет удален", "Удалить?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
con1.ExecuteNonQuery();
con2.ExecuteNonQuery();
}
string select5 = String.Format(@"SELECT * FROM Paymasters WHERE Leave = 0;");
LoadGrid(select5, metroGrid5);
PaymastersHeader();
}
}
}
}
//изменение
private void edBtn_Click(object sender, EventArgs e)
{
if (metroGrid1.Visible)
{
Program.Redact = true;
Route rt = new Route();
Program.ID = Convert.ToInt32(metroGrid1[0, metroGrid1.CurrentRow.Index].Value);
rt.metroTextBox1.Text = metroGrid1[1, metroGrid1.CurrentRow.Index].Value.ToString();
rt.maskedTextBox4.Text = metroGrid1[2, metroGrid1.CurrentRow.Index].Value.ToString();
rt.maskedTextBox3.Text = metroGrid1[3, metroGrid1.CurrentRow.Index].Value.ToString();
rt.ShowDialog();
String select1 = String.Format(@"SELECT Route.id_route, Route.NameR, Route.NumberR, Route.Price
FROM Route;");
LoadGrid(select1, metroGrid1);
metroGrid1.ClearSelection();
metroGrid1.Columns[0].Visible = false;
metroGrid1.Columns[1].HeaderText = "Маршрут";
metroGrid1.Columns[2].HeaderText = "Номер";
metroGrid1.Columns[3].HeaderText = "Цена";
Program.Redact = false;
}
else if (metroGrid2.Visible)
{
Program.Redact = true;
Trips tr = new Trips();
Program.ID = Convert.ToInt32(metroGrid2[0, metroGrid2.CurrentRow.Index].Value);
tr.metroComboBox1.Text = metroGrid2[1, metroGrid2.CurrentRow.Index].Value.ToString();
tr.dateTimePicker1.Text = metroGrid2[2, metroGrid2.CurrentRow.Index].Value.ToString();
tr.dateTimePicker2.Text = metroGrid2[3, metroGrid2.CurrentRow.Index].Value.ToString();
tr.metroTextBox1.Text = metroGrid2[4, metroGrid2.CurrentRow.Index].Value.ToString();
tr.ShowDialog();
string select2 = String.Format(@"SELECT Trips.id_trip, Route.NameR, Trips.DispatchTime, Trips.TimeTrip, Limit
...Подобные документы
Анализ предметной области. Разработка базы данных и приложения для автоматизации продажи билетов в кассах кинотеатра. Сущность, атрибуты и взаимосвязь. Отладка программного продукта. Смысловые (логические) ошибки. Разработка инструкции пользователю.
курсовая работа [3,9 M], добавлен 10.03.2014Разработка базы данных для автоматизации учета и хранения сведений о заявках от работодателей. Проектирование приложения в СУБД Access. Описание запросов, отчетов и представлений данных. Интерфейс, условия выполнения и тестирование программного продукта.
курсовая работа [3,7 M], добавлен 05.04.2012Информационно-логическая модель предметной области по нотациям Ричарда Баркера. Даталогическая модель реляционной базы данных в виде диаграммы схемы отношений. Приложение интерфейса для базы данных на языке программирования С# в среде Visual Studio.
курсовая работа [3,6 M], добавлен 23.12.2014Процесс разработки базы данных для хранения и обработки информации. Ключи, индексы, триггеры, хранимые процедуры. Разработка пользовательского интерфейса и базы данных. Основные инструментальные средства для разработки клиентской и серверной частей.
дипломная работа [225,0 K], добавлен 18.05.2013Ограничения, присутствующие в предметной области. Проектирование инфологической модели данных. Описание основных сущностей и их атрибутов. Логический и физический уровни модели данных. Реализация базы данных: представления, триггеры, хранимые процедуры.
курсовая работа [1,7 M], добавлен 10.02.2013Постановка задачи автоматизации учебного процесса колледжа и описание предметной области. Работа с базами данных в Delphi: способы, компоненты доступа к данным и работы с ними. Язык запросов SQL. База данных в Microsoft Access и результаты исследований.
дипломная работа [55,6 K], добавлен 16.07.2008Анализ аналогов и выбор прототипа, разработка алгоритма и графического интерфейса, кодирование и тестирование. Логическая модель данных "Нотариальная контора". Особенности реализации в MS SQL. Требования к функциональным характеристикам базы данных.
курсовая работа [1,3 M], добавлен 12.01.2013Возможности создания баз данных средствами программного продукта SQL. Изучение предметной области и разработка проекта базы данных по учету студентов "Журнал классного руководителя". Задачи реализации программного средства, его тестирование и отладка.
курсовая работа [3,7 M], добавлен 07.12.2012Описание предметной области и соотношения между объектами. Этапы проектирования базы данных, ее инфологическая, концептуальная и физическая модели. Использование режима "Конструктор" при создании таблиц, разработка форм, запросов и отчетов в MS Access.
курсовая работа [2,5 M], добавлен 07.11.2012Разработка базы данных для предметной области "Подразделения предприятия – Рабочие помещения". Описание используемых данных, предметной области и результатной информации. Создание запросов, форм и отчетов в базе данных. Описание построения диаграмм.
курсовая работа [5,6 M], добавлен 24.07.2014Системный анализ предметной области. Структурный подход при разработке инфологической модели. Обеспечение целостности данных. Описание программного средства, создание таблиц, запросов, форм и отчетов для системы автоматизации работы ресторана.
курсовая работа [3,9 M], добавлен 12.12.2011Выделение сущностей базы данных и связей между ними. Организация ее объектов. Логическая и физическая модель БД. Определение требований к информационной системе. Проектирование транзакций и пользовательского интерфейса. Разработка отчетов и запросов.
курсовая работа [2,4 M], добавлен 17.10.2014Анализ требований к базе данных. Концептуальная (инфологическая) модель предметной области. Сопоставление компонентов логической и физической модели. Создание форм, запросов и отчетов в среде СУБД Visual FoxPro 8.0. Расчеты по аккредитивам и чекам.
курсовая работа [1,7 M], добавлен 24.06.2013Разработка программной системы автоматизации работы приемной комиссии. Выбор CASE-средства проектирования базы данных. Разграничение доступа к записям таблиц. Триггеры и функции БД. Выбор интерфейса программирования. Разработка классов и структур данных.
дипломная работа [1,9 M], добавлен 07.03.2012Разработка информационно-логической схемы базы данных для горнолыжного курорта. Выделение объектов и информационных процессов в данной области. Реляционная модель базы данных. Разработка интерфейса пользователя. Создание форм, отчетов и запросов.
курсовая работа [4,3 M], добавлен 17.03.2014Разработка информационной системы "Салон портьер" для автоматизации деятельности менеджера фирмы, занимающейся пошивом портьер на заказ. Создание и обоснование проекта базы данных. Создание запросов, форм, отчетов. Тестирование программного приложения.
курсовая работа [4,6 M], добавлен 07.02.2016Разработка базы данных для учет остатков автомобилей в автомагазине с целью обеспечения заказа автомобилей, запас которых может закончиться в ближайшее время. Системный анализ предметной области. Разработка серверной части. Хранимые процедуры, функции.
курсовая работа [1,5 M], добавлен 07.01.2014Создание программного продукта - базы данных "тестирование", с описанием требований предметной области, объектов, их атрибутов и взаимосвязей между ними. Ведение базы вопросов, учет выполненного тестирования, формирование тестов из данных вопросов.
курсовая работа [1,4 M], добавлен 18.12.2010Анализ предметной области, этапы проектирования автоматизированных информационных систем. Инструментальные системы разработки программного обеспечения. Роль CASE-средств в проектировании информационной модели. Логическая модель проектируемой базы данных.
курсовая работа [410,6 K], добавлен 21.03.2011Разработка базы данных и приложения для автоматизации ведения кадрового учёта предприятия. Формирование таблицы анкетных данных. Разработка графического интерфейса пользователя клиентских приложений. Возможность подключения к удаленной базе данных.
дипломная работа [47,6 K], добавлен 17.02.2009