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

Министерство общего и профессионального образования РФ

КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ


УНИВЕРСИТЕТ

Кафедра Вычислительной техники и автоматизированных систем


управления

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту

по дисциплине “ Базы Данных ”


(наименование дисциплины)

на тему: “ Автовокзал ”
(тема курсового проекта)

Выполнил студент группы 04 – К – ПО2


Бикташев Игорь Альбертович
(ф.и.о.)
Руководитель проекта канд. техн. наук, доц. М.П. Малыхина

Защищён __________________ Оценка


(дата)

Члены комиссии

(подпись, дата, расшифровка подписи)


КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ

Кафедра ВТ и АСУ

Утверждаю:
Зав. кафедрой____________
________________________

ЗАДАНИЕ
на курсовое проектирование

Студенту: 04-К-ПО2 группы 4 курса

факультета КТАС
специальности 230105 _____
Бикташеву Игорю Альбертовичу______
(ф. и. о., шифр)

Тема проекта: Автовокзал _________ _____

Содержание задания: Разработка программного продукта для реализации


информационной работы автовокзала с использованием базы данных
на основе SQL Server. ________________ ______

Объем работы: пояснительная записка к проекту 41 листов формата А4


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

Срок выполнения проекта: с " " по" " 2007 г.


Срок защиты: " " 2007 г.
Дата выдачи задания: " " 2007 г.

Руководитель проекта канд. техн. наук, доц. М.П. Малыхина____


(подпись , ф.и.о., звание, степень)

Задание принял студент


(подпись, дата)

Реферат

2
Объем пояснительной записки составляет 41 листов формата А4.
Пояснительная записка содержит 28 иллюстрацию. Количество использованных
источников – 7. Количество приложений – 2.

Ключевыми словами в данной работе являются:


- Delphi
- SQL
- СЕРВЕР
- ПРИЛОЖЕНИЕ
- SDAC
- ЗАПРОС
- ТРИГГЕР
- ХРАНИМАЯ ПРОЦЕДУРА
- ПОИСК
- ТАБЛИЦА

Цель работы курсового проекта – это разработка программной системы для


организации информационной работы автовокзала. Программа–приложение
разрабатывалась в среде Borland Delphi 7.0 с применением стандартных
компонентов. База данных и ее составляющие разрабатывалась и выполняется на
сервере Microsoft SQL Server 2000 Personal Edition.

3
Содержание

Введение...............................................................................................................5

1 Описание предметной области и постановки задачи.....................................6


1.1 Требование к разработке.......................................................................6
1.2 Постановка задачи.................................................................................6
2 Теоретические основы разработки баз данных..............................................7
2.1 Определения...........................................................................................7
2.2 Триггеры................................................................................................10
2.3 Хранимые процедуры.............................................................................10
2.4 Администрирование баз данных...........................................................12
3 Проектирование базы данных.........................................................................13
3.1 Концептуальная модель базы данных................................................14
3.2 Реляционная модель базы данных......................................................15
3.3 Структура базы данных...........................................................................17
3.4 Процесс нормализации баз данных ......................................................19
3.4 Обоснование наличия НФ.....................................................................20
4 Программная реализация базы данных..........................................................21
4.1 Используемые триггеры......................................................................21
5 Руководство пользования программой...........................................................24
5.1 Описание программы...........................................................................27

Заключение.........................................................................................................28

Список использованной литературы............................................................29

Приложения........................................................................................................30

4
Введение

В настоящее время трудно представить какую-либо сферу деятельности


человека, где бы ни стояла проблема создания и использования информационных
систем. Сегодня такие системы стали насущной потребностью, и спрос на
грамотных специалистов в этой области постоянно растет. А поскольку все
здание информационных систем базируется на концепции баз данных, то
естественно, что без более или менее детального знакомства с основами
дисциплины “Базы данных” в наше время невозможно быть не только
квалифицированным программистом, но даже и грамотным пользователем
компьютеров. Поэтому можно смело сказать, что навыки работы в этой области
не только повышают интеллектуальный потенциал пользователя, но являются в
этом вопросе одним из основополагающих факторов.
Сегодня в соответствии с действующим государственным образовательным
стандартом базы данных изучаются как самостоятельная дисциплина (на
компьютерных специальностях) или как раздел дисциплины “Информатика” (на
прочих специальностях).
История исследований систем баз данных - это, по сути, история развития
приложений, достигших исключительной производительности и оказавших
потрясающее влияние на экономику. Если еще 20 лет назад эта сфера была всего
лишь областью фундаментальных научных исследований, то теперь на
исследованиях баз данных основана целая индустрия информационных услуг,
ежегодный бюджет которой только в США составляет 10 миллиардов долларов.
Достижения в исследованиях баз данных стали основой фундаментальных
разработок коммуникационных систем, транспорта и логистики, финансового
менеджмента, систем с базами знаний, методов доступа к научной литературе, а
также большого количества гражданских и военных приложений. Они также
послужили фундаментом значительного прогресса в ведущих областях науки - от
информатики до биологии.

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

1.1 Требования к разработке

- пополнение базы данных при поступлении на учет нового


автотранспорта;
- просмотр расписания движения автобусов;
- подсчет вырученных средств от продажи билетов;
- возможность быстрого поиска;
- наличие удобных форм для продажи билетов и их заказов;
- отслеживание изменений всех объектов при изменении одного из них.

1.2 Постановка задачи

Написать программу, которая позволит реализовать процедуру продажи


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

Программа должна предусматривать:

 Понятный интерфейс приложения, доступный любому человеку;


 Авторизацию при входе в программу–приложение;
 работу с SQL сервером;
 администрирование базы данных;
 упрощение на уровне приложения структуры базы;
 Delphi приложение должно использовать запросы для связи с SQL;
 использование триггеров и встроенных процедур.

6
2 Теоретические основы разработки баз данных

2.1 Определения

Стержневые идеи современных информационных технологий базируются на


концепции баз данных.
Согласно этой концепции, основой информационных технологий являются
данные, которые должны быть организованы в базы данных в целях адекватного
отображения изменяющегося реального мира и удовлетворения информационных
потребностей пользователей.
Одним из важнейших понятий в теории баз данных является понятие
информации. Под информацией понимаются любые сведения о каком-либо событии,
процессе, объекте. К информации может относиться все, что может интересовать
пользователя любого уровня.
Данные - это информация, представленная в определенном виде, позволяющем
автоматизировать ее сбор, хранение и дальнейшую обработку человеком или
информационным средством. Для компьютерных технологий данные - это
информация в дискретном, фиксированном виде, удобная для хранения,
обработки на ЭВМ, а также для передачи по каналам связи.
База данных (БД) - именованная совокупность данных, отражающая
состояние объектов и их отношений в рассматриваемой предметной области, или
иначе БД - это совокупность взаимосвязанных данных при такой минимальной
избыточности, которая допускает их использование оптимальным образом для
одного или нескольких приложений в определенной предметной области. БД
состоит из множества связанных файлов.
Система управления базами данных (СУБД) - совокупность языковых и
программных средств, предназначенных для создания, ведения и совместного
использования БД многими пользователями.
Автоматизированная информационная система (АИС) - это система,
реализующая автоматизированный сбор, обработку, манипулирование
данными, функционирующая на основе ЭВМ и других технических средств
и включающая соответствующее программное обеспечение (ПО) и персо нал. В
дальнейшем в этом качестве будет использоваться термин информационная
система (ИС), который подразумевает понятие автоматизированная.
ИС может функционировать самостоятельно или служить компонентом
более сложной системы.
Каждая ИС в зависимости от ее назначения имеет дело с той или иной
частью реального мира, которую принято называть предметной областью
(ПрО) системы. Выявление ПрО - это необходимый начальный этап разработки
любой ИС. Именно на этом этапе определяются информационные потребности
всей совокупности пользователей будущей системы, которые, в свою очередь,
предопределяют содержание ее базы данных. По области применения ИС можно
разделить на системы, используемые в образовании, производстве, бизнесе, науке
и других областях.
В большинстве случаев прибегают к разбиению всего множества объектов
ПрО на группы объектов, однородных по структуре, обладающих одинаковыми
7
свойствами, например. В каждом фрагменте ПрО выделяется система объектов и
связи между объектами, выделяются процессы, происходящие в этом
фрагменте, а также конечное число пользователей.
Банк данных (БнД) является разновидностью ИС. БнД - это система
специальным образом организованных данных: баз данных, программных,
технических, языковых, организационно-методических средств, предназначенных
для обеспечения централизованного накопления и коллективного многоцелевого
использования данных.
Под задачами обработки данных обычно понимается специальный класс
решаемых на ЭВМ задач, связанных с видом, хранением, сортировкой, отбором
по заданному условию и группировкой записей однородной структуры.
При этом для пользователя предусматривается генерация различных отчетов,
как правило, табличной формы.
Отдельные программы или комплекс программ, реализующие автоматизацию
решения прикладных задач обработки данных, называются приложениями.
Поскольку одни и те же данные могут использоваться для решения многих задач, то
и приложений к одной и той же базе данных может быть много. Приложения,
созданные средствами СУБД, относят к приложениям СУБД. Приложения,
созданные вне среды СУБД с помощью систем программирования, использующих
средства доступа к БД, к примеру, Delphi или C++Builder, называют внешними
приложениями. Все приложения, работающие с одной и той же базой данных,
должны функционировать корректно, не мешать друг другу и учитывать все
изменения, которые вносятся другими приложениями. Такая координация работы
приложений осуществляется СУБД.
Проектируемая БД должна обладать определенными свойствами. Назовем
основные свойства БД.
Целостность. В каждый момент времени существования БД сведения,
содержащиеся в ней, должны быть непротиворечивы. Целостность БД
достигается вследствие введения ограничений целостности, в частности, к ним
относятся ограничения, связанные с нормализацией БД. Желательно отслеживать
диапазон допустимых значений, соотношения между значениями в полях,
особенности написания формата. Существуют ограничения, работающие только
при удалении записей. Например, нельзя удалять запись, связанную с другой
неудаляемой записью.
Восстанавливаемость. Данное свойство предполагает возможность
восстановления БД после сбоя системы или отдельных видов порчи системы.
Сюда относится проверка наличия файлов, составляющих приложение. В
основном свойство восстанавливаемости обеспечивается дублированием БД и
использованием техники повышенной надежности.
Безопасность. Безопасность БД предполагает защиту данных от
преднамеренного и непреднамеренного доступа, модификации или разрушения.
Применяется запрещение несанкционированного доступа, защита от копирования и
криптографическая защита. Также необходимы и чисто административные меры,
например ограничение доступа к носителям информации.
Эффективность. Свойство эффективности обычно понимается как:
- минимальное время реакции на запрос пользователя;
8
- минимальные потребности в памяти;
- сочетание этих параметров.
Предельные размеры и эксплуатационные ограничения. Предельные размеры, а
также другие ограничения, накладываемые эксплуатацией данной БД, могут
существенно повлиять на проектное решение.
Создание баз данных, поддержка их в целостном, непротиворечивом
состоянии, обеспечение безопасности их использования и сохранности
информации вплоть до восстановления ее после различных сбоев, предоставление
различных информационных услуг пользователям и многое другое обеспечивается
системами управления баз данных, которым посвящен следующий подраздел
книги.
Модель данных - это некоторая абстракция, в которой отражаются самые
важные аспекты функционирования выделенной предметной области, а
второстепенные - игнорируются. Модель данных включает в себя набор понятий
для описания данных, связей между ними и ограничений, накладываемых на
данные. В модели данных различают три главные составляющие:
- структурную часть, определяющую правила порождения допустимых для
данной СУБД видов структур данных;
- управляющую часть, определяющую возможные операции над такими
структурами;
- классы ограничений целостности данных, которые могут быть
реализованы средствами этой системы.
Каждая СУБД поддерживает ту или иную модель данных. Необходимо
отметить, что понятие модели данных фактически вошло в обиход специалистов
в области БД только вместе с появлением реляционного подхода. Все ранние
системы не основывались на каких-либо абстрактных моделях. Абстрактные
представления ранних систем появились позже на основе анализа и выявления
общих признаков у различных систем.
Ранние (корреляционные) СУБД активно использовались в течение многих
лет. В свое время в подобные системы многие компании инвестировали большие
средства. Они применялись дольше, чем используется какая-либо из
реляционных СУБД, а некоторые из ранних систем используются даже в наше
время. За время их существования накоплены громадные базы данных, и одной
из актуальных проблем информационных систем является использование этих
систем совместно с современными системами.
Итак, по существу модель данных, поддерживаемая механизмами СУБД,
полностью определяет множество конкретных баз данных, которые могут быть
созданы средствами этой системы, а также способы модификации состояния БД
с целью отображения тех изменений, которые происходят в предметной
области.

9
2.2 Триггеры

Триггеры представляют собой методы, с помощью которых можно


обеспечивать целостность базы данных даже в том случае, если она используется
множеством приложений.
Триггер - это специальный тип хранимой процедуры, которая автоматически
выполняется при каждой попытке изменить защищаемые ей данные. Триггеры
обеспечивают целостность данных, предотвращая их несанкционированное или
неправильное изменение.
Допустим, что в базе данных есть таблицы, связанные через поле Surname.
Например, это могут быть таблица клиентов предприятия и их заказов. Разумно
определить триггер, который при каждой попытке удалить запись клиента
проверит наличие у него заказов и позволит удалить эту запись только при их
отсутствии. Конечно, подобную задачу можно решить при помощи средств
декларативной ссылочной целостности. Однако при помощи триггеров можно
создавать значительно более сложные рабочие правила. Можно создать триггер,
который при каждом добавлении записи в таблицу заказов анализирует
предыдущие заказы этого же клиента и определяет приемлемый срок оплаты
этого заказа.
Триггеры не принимают параметров и не возвращают значений. Они
выполняются неявно. То есть триггер запускается только при попытке изменения
данных.

2.3. Хранимые процедуры

Данный раздел посвящен одному из механизмов повышения эффективности


функционирования информационных систем, который базируется на
использовании хранимых процедур.
Хранимая процедура - это последовательность компилированных операторов
Transact-SQL, хранящихся в системной базе данных SQL Server. Хранимые
процедуры предварительно откомпилированы, поэтому эффективность их
выполнения выше, чем у обычных запросов. Хранимые процедуры работают
непосредственно на сервере и хорошо укладываются в модель клиент - сервер.
Существует два вида хранимых процедур: системные и пользовательские.
Системные хранимые процедуры предназначены для получения
информации из системных таблиц и выполнения различных служебных операций
и особенно полезны при администрировании базы данных. Их имена начинаются
с sp_ (stored procedure).
Пользовательские хранимые процедуры создаются непосредственно
разработчиками или администраторами базы данных.
Полезность хранимых процедур определяется в первую очередь высокой (по
сравнению с обычными T-SQL запросами) скоростью их выполнения. Кроме
того, они являются средством систематизации часто выполняемых операций. При
выполнении в первый раз хранимой процедуры можно выделить ряд этапов.
1. Процедура разбивается на отдельные компоненты лексическим
анализатором выражений.

10
2. Компоненты, ссылающиеся на объекты базы данных (таблицы,
индексы, представления и т. п.), сопоставляются с этими объектами с
предварительной проверкой их существования. Этот процесс носит название
разрешение ссылок.
3. В системной таблице syscomments сохраняется исходный текст
процедуры, а в таблице sysobjects - ее название.
4. Создается предварительный план выполнения запроса. Этот
предварительный план называется нормализованным планом или деревом запроса
и хранится в системной таблице sysprocedures.
5. При первом выполнении хранимой процедуры дерево запроса
считывается и окончательно оптимизируется. Выполняется ранее созданный
план процедуры.
Такая схема дает возможность при повторных вызовах не тратить время на
синтаксический анализ, разрешение ссылок и компиляцию дерева запросов. А
при последующих вызовах выполняется только пятый шаг. Причем план хранимой
процедуры после первого выполнения содержится в быстродействующем
процедурном кэше. Это значит, что во время вызова процедуры скорость его
считывания будет очень высока.
Использование хранимых процедур имеют еще ряд дополнительных
преимуществ.
- Хранимые процедуры позволяют выделять правила в отдельную структуру.
В дальнейшем эти правила используются многими приложениями, образуя
устойчивый к ошибкам интерфейс данных. Выгода такого подхода состоит в
том, что можно осуществлять изменение правил только для отдельной части
объектов базы данных, а не для всех ее приложений.
- Использование хранимых процедур значительно повышает
производительность запросов, однако наибольшей ее прирост достигается при
выполнении многократно повторяющихся операций, когда план запроса
постоянно хранится в системном кэше.
- Хранимые процедуры могут принимать аргументы при запуске и
возвращать значения (в виде результирующих наборов данных).
- Хранимые процедуры могут запускаться по расписанию (в режиме
автоматического выполнения), задаваемому при запуске SQL Server.
- Хранимые процедуры используются для извлечения или изменения данных
в любое время.
- Хранимые процедуры, в отличие от триггеров, вызываются явно. То есть
при непосредственном обращении к процедуре из приложения, сцена рия,
пакета или задачи.
Хранимые процедуры - мощное средство обработки данных. Системные
хранимые процедуры играют очень важную роль в администрировании и
поддержке базы данных. Пользовательские хранимые процедуры применяются
при решении практически любых задач. Кроме того, пользователь может
получить право выполнения хранимой процедуры, даже если он не имеет права
доступа к объектам, к которым обращается процедура.

11
2.4 Администрирование баз данных

Администрирование любой системы управления базами данных сводится


к следующему ряду задач:
- создание и удаление баз данных и файлов данных;
- создание учетных записей, групп пользователей и распределение прав;
- резервное копирование баз данных;
- восстановление данных;
Администрирование системы

Администрирование системы реализовано следующим образом:


Созданы 3 пользователя:
- Администратор(Administrator) имеет полные привилегии
- Сотрудник отделов кадров (Kadry01) имеет привилегии на редакцию
таблиц о сотрудниках.
- Продавец билетов (Kassir01) имеет право только на редактирование
таблиц продажи билетов и заказа билетов.
- Менеджер организации движения (Manager01) имеет право на
редактирование таблиц для составления расписания движения транспорта

Рисунок 1 – Пользователи базы данных

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

3.1 Концептуальная модель

Фундаментальными реалиями в концептуальном моделированием являются


данные с их свойствами и связи между ними. Главными элементами модели
данных являются типы объектов, их атрибуты и типы связей. Типы объектов
часто представляют в виде существительных, а типы связей – в виде глаголов.

атрибут
обьект-тип связь-тип;

Рисунок 2 - обозначения элементов диаграммы


На основании этих данных выделим основные объекты базы данных и связи
между ними.

13
Номер
Название Телефон Адрес Директор

Кол-во
Автовокзалы Содерж
Транспорт мест
1 и
1 т N Модель
1

Организуе Название
Личные Работа т
данные ю
т Везет
Адрес N 1 Города
Сотрудники
Учетные
1 1 Карта
данные

Ведет Пункты назначеия


и отправления
N N
Отправляет N
Рейсы
1 1

Дата
Продается Заказыва
ют
Место
N N
N 1
Билеты Заказы
Выдаетс
я

Цена Багаж Фамилия Дата заказа

Рисунок 3 - концептуальная модель


3.1 Реляционная модель базы данных

Реляционный подход обозначает определенную идеологию создания баз


данных. Настойчивое желание пользователей оперировать более крупными
объектами, чем элементы данных ТГ-моделей (макрообъектами), предопределило
ее появление и способствовало тому, что эта идеология довольно быстро
завоевала мир. На скорость распространения идей реляционного подхода
значительное влияние в основном оказали два фактора. Создал Кодд - IBM
Во-первых, БД представляется на внешнем, не зависящем от структуры
ЭВМ уровне в виде совокупности двумерных таблиц, повседневно встречающихся
в человеческой практике. Работа с таблицами привычна и понятна каждому
пользователю. При этом весьма важно, что поиск и обработка информации,
хранящейся в таблицах, не зависит от организации хранения данных в памяти
ЭВМ, что значительно упрощает взаимодействие пользователя с банком данных
и существенно повышает производительность его труда.
Во-вторых, манипулирование данными реляционной базы данных,
которая с математической точки зрения представляет собой конечный набор
14
конечных отношений различной арности между заранее определенным
множеством элементарных данных, осуществляется в соответствии со специально
разработанной для этой цели реляционной теорией. Над отношениями модели
можно осуществлять различные алгебраические операции. Теория РБД как раз и
определяет, какие операции и каким образом необходимо выполнять над
отношениями, чтобы достичь заданной цели.
В настоящее время реляционный подход к построению информационных
систем является наиболее распространенным. К числу достоинств реляционного
подхода можно отнести:
- наличие небольшого набора абстракций, которые позволяют сравнительно
просто моделировать большую часть распространенных предметных областей
и допускают точные формальные определения, оставаясь интуитивно
понятными;
- наличие простого и в то же время мощного математического аппарата,
опирающегося главным образом на теорию множеств и математическую
логику и обеспечивающего теоретический базис реляционного подхода к
организации БД;
- возможность ненавигационного манипулирования данными без
необходимости знания конкретной физической организации баз данных во
внешней памяти.
В результате преобразования концептуальной модели была построена следующая
реляционная модель базы данных. (рисунок 4)

15
Рисунок 4 - реляционная модель базы данных

16
3.3 Структура базы данных

Составляющими базу таблицы:


Таблица «Автовокзалы» – содержит информацию о автовокзалах:

Рисунок 5 - таблица автовокзалы

Таблица «Автопарк» – содержит информацию о транспорте,


принадлежащим автовокзалам

Рисунок 6 - таблица автопарк

Таблица «Персонал» – содержит информацию о сотрудниках, работающих


на автовокзалах

Рисунок 7 - таблица «Персонала»

17
Таблица «Города» – отражает города, между которыми совершаются
перемещения, а так же включает карту города

Рисунок 8 - таблица «Города»

Таблица «Рейсы» – предоставляет данные о ресах между городами


(автовокзалами):

Рисунок 9 - таблица «Рейсы»

Таблица «Заказы» – предоставляет информацию о заказах билетов:

Рисунок 10 - таблица «Заказы»

Таблица «Билеты» – содержит данные о проданных билетах к рейсам:

Рисунок 11 - таблица «Рейсы»

18
3.4 Процесс нормализации базы данных

Данный процесс - это формальный метод анализа отношений на основе их


первичных или потенциальных ключей и существующих функциональных
зависимостей, являющийся одним из наиболее строгих способов улучшения
характеристик БД. Существует пять нормальных форм (НФ) баз данных.
Первая нормальная форма
Отношение находится в первой нормальной форме, если все его атрибуты имеют
простые (атомарные) значения. Другими словами, значения в домене каждого
атрибута отношения не являются ни списками, ни множествами простых или
сложных значений. Одним словом, в отношении не должно быть повторяющихся
групп. В противном случае отношение считается ненормализованным и ему
соответствует многоуровневая таблица (иерархия) в отличие от однородной
табличной структуры нормализованного отношения.
Условие атомарности значений неукоснительно должно выполняться для всех
отношений схемы реляционной базы данных. Схема всей базы данных находится в
1НФ, если каждая схема отношения находится в 1НФ.
Нормальные формы более высокой степени, чем рассмотренные, связаны с
понятиями определенных зависимостей.
Вторая нормальная форма применяется к отношениям с составными
ключами, т. е. к таким отношениям, первичный ключ которых состоит из двух или
более атрибутов. Отношение, у которого первичный ключ включает только один
атрибут, всегда находится во 2НФ.
Третья нормальная форма говорит от том, что не ключевые атрибуты не
должны зависеть друг от друга.
Четвертая нормальная форма
Многозначные зависимости можно считать обобщением функциональных
зависимостей в том смысле, что каждая функциональная зависимость является
многозначной, где множество зависимых значений является одноэлементным
множеством.
Пятая нормальная форма, это такое отношение называется термином "n-
декомпозитируемое отношение" для некоторого п > 2. Это значит, что для данного
отношения возможна декомпозиция без потерь на п проекций, а на меньшее
число проекций декомпозиция без потерь невозможна. Пятая нормальная
форма - это последняя нормальная форма, которую можно получить путем
декомпозиции, и на практике 5НФ почти не используется. Заметим, что
зависимость соединения является обобщением как многозначной зависимости, так
и функциональной зависимости.

19
3.5 Обоснование наличия НФ

Рассмотрим три нормальных формы, которые применяются при


проектировании баз данных и служат для оптимизации базы и приведения ее к
согласованному виду:
1) Атомарность ключа – значения ключа должны быть атомарные. Не должно
быть составных ключей типа ФИО, адрес и т.д. (Рисунок 3)

Рисунок 12 - доказательство первой нормальной формы

2) Составной ключ – если ключ состоит из двух и более атрибутов – все не


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

3) Не ключевые атрибуты должны зависеть только от ключа и не зависеть друг


от друга.

Рисунок 13 - таблица «Рейсы»

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


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

4 Программная реализация

4.1 Используемые триггеры

В программе были реализованы триггеры, основной задачей которых было


отслеживание удалений из таблиц.
Имя триггера – DEL_REYS
Описание – при удалении Рейса производителя удаляются все билеты к
этому рейсы, и все заказы к этому рейсу, с ним связанные. Триггер был
реализован как instead of DELETE для того, чтобы сначала произвести удаление
из таблицы заказы билетов и продажи билетов, а потом удалить и сам рейс.

create trigger new_trigger on dbo.Reysi


instead of delete
as
IF @@ROWCOUNT=1
BEGIN
DECLARE @y INT
SELECT @y=ID
FROM deleted
delete from Tikets where Reys=@y
delete from Zakaz where Reys=@y
END

Аналогичные триггеры были созданы для Таблиц Доставка-Водитель,


Доставка-Маршрут, Продавец – Реализация товара – Обзор продаж.

21
5 Руководство пользования программой

1. Запуск программы осуществляется при помощи открытия файла


MDIAPP.exe
2. Для начала необходимо войти в программу под своим пользователем.

Рисунок 14 - вход в программу

3. После входа пользователю предлагается главная таблица – Обзор продаж –


учет всех проданных товаров.

Рисунок 15 – Основная форма программы

4. Для работы с данными предлагается использовать меню, а также панель


задач. Для каждого действия существует свое меню.
5. Меню «File» состоит из двух операций: «Выгрузить в Excel» и «Exit»
«Exit» - выходит из программы;
«Выгрузить в Excel» - позволяет выгрузить в Excel любую табличную
форму открытую на экране

22
:
Рисунок 16 – Выгрузка в Excel
6. Меню «Edit» - операции по редактированию записей: Вырезать,
копировать, вставить.
7. Меню “Windows” – действие с окнами программы, при открытии
нескольких окон данное меню позволяет разместить их на экране удобным
для пользователем образом: Каскадом, Горизонтально, Вертикально
8. Меню «Автовокзалы» - основное меню для работы с данными. Для каждого
пункта меню есть соответствующая кнопка на панели задач. Состоит из
следующих действий:
a. Пункт «Города». При выборе открывается форма для редактирования
справочника городов.

Рисунок 17 – Форма «Города»


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

23
Рисунок 18 – Форма «Редактирование Города»

Для загрузки карты города необходимо нажать кнопку «Загрузить


рисунок». При этом откроется окно выбора рисунка.
При нажатии кнопки «ОК» внесенные изменения будут сохранены.
При нажатии кнопки «Cancel» весенные изменения будут отменены.
b. Пункт «Автовокзалы». При выборе открывается форма для
редактирования автовокзалов.

Рисунок 19 – Форма «Автовокзалы»

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


нужно произвести поиск, и начать набирать необходимый текст:

Рисунок 20 – Быстрый поиск

24
Поиск и переключение на нужную запись происходит автоматически.
Двойнок клик левой клавиши мыши откроет формы для редактирования
записи:

Рисунок 21 – Форма «Редактирование автьовокзала»

Для поиска записи, по какому либо условию, можно воспользоваться


фильтром, встроенным в табличную форму:

Рисунок 22 – Пример фильтра

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


пункт «(Custom…)»/ При этом откроется форма, в которой можно устанавливать
нужные параметры поиска:

Рисунок 23 –Фильтр по условиям

c. Пункты меню «Автопарк» и «Сотрудники имеют сходный механизм


работы, открытия форм и поиска записей
d. Пункт «Рейсы». При выборе данного пункта открывается форма для
добавления, изменения записей о рейсах.

25
Рисунок 24 – Форма «Рейсы»

При нажатии кнопки «Удалить» программа спрашивает пользователя,


точно ли он хочет произвести удаление:

Рисунок 25 – Попытка удаления записи

При нажатии кнопок «Добавить» и «Изменить» открывается форма для


редактирования рейса:

Рисунок 26 – Форма «Редактирование рейса»

26
В данной форме можно добавить билеты на рейс или заказать билет:

Рисунок 27 – Редактирование Билетов Рисунок 28 – Редактирование заказов

27
5.1 Описание программы

Написанная программа служит хорошим примером работы с базами


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

28
Заключение

В данном курсовом проекте были успешно реализованы все поставленные


задачи, были подробно рассмотрены: задача курсового проекта, а также порядок
выполнения задания.
Разработанная база данных и программа–приложение может использоваться
в автовокзалах.
Программа–приложение имеет интуитивно понятный интерфейс, что
способствует быстрому внедрению программы.
Программа имеет большое количество различных программных
возможностей и ориентированна на пользователя, не имеющего большого опыта
работы с программными продуктами такого типа. Это качество значительно
расширяет круг возможных пользователей программы и увеличивает ее
коммерческую привлекательность.
Ещё как интеграция информационных систем во все сферы жизни
увеличивается с каждым днем, то актуально становится разработка подобных баз
данных. При этом разработчик должен учитывать то, что наиболее простые БД
могут быть подвержены избыточности, но при этом нельзя и увлекаться делением
БД на много составных таблиц. Также современные средства дружественного
интерфейса позволяют разработать интуитивно понятные приложения, что
является одним из основных требований заказчика. При создании БД необходимо
принять во внимание область, для которой разрабатывается база данных.
Например, при формировании БД для магазина, разработчик должен
ориентировать её в первую очередь на продажу.

29
Список использованной литературы

1. В.В. Фаронов “C 6: Учебный Курс”, Москва, Knowledge, 2001


2. М.В. Сухарев “Основы C#”, издательство “Наука и техника”, 2003
3. Г.В. Галисеев, “Компоненты в Delphi 6: профессиональная работа”,
издательство “Диалектика”, 2004
4. В.И. Ключко “Методическое указание к выполнению курсовой работы”,
Краснодар, Издательство КубГТУ, 1997
5. М.П. Малыхина “Базы данных: основы, проектирование, использование”
6. Т.М. Карпова “Базы данных: модели, разработка, реализация”, издательство
“Питер”, 2001
7. Кандзюба С. П. “Delphi 6/7. Базы данных и приложения. Лекции и
упражнения”. – СПб.: ООО «ДиаСофтЮП», 2002. – 576.

30
Приложение 1 – Листинг БД скрипта
/****** Object: Database Autovokzaly Script Date: 22.01.2008 2:22:39
******/
CREATE DATABASE [Autovokzaly] ON (NAME = N'Autovokzaly_Data', FILENAME =
N'E:\Autovokzaly\DataBase\Autovokzaly_Data.MDF' , SIZE = 9, FILEGROWTH = 10%)
LOG ON (NAME = N'Autovokzaly_Log', FILENAME =
N'E:\Autovokzaly\DataBase\Autovokzaly_Log.LDF' , SIZE = 1, FILEGROWTH = 10%)
COLLATE Cyrillic_General_CI_AS
GO

exec sp_dboption N'Autovokzaly', N'autoclose', N'false'


GO

exec sp_dboption N'Autovokzaly', N'bulkcopy', N'false'


GO

exec sp_dboption N'Autovokzaly', N'trunc. log', N'false'


GO

exec sp_dboption N'Autovokzaly', N'torn page detection', N'true'


GO

exec sp_dboption N'Autovokzaly', N'read only', N'false'


GO

exec sp_dboption N'Autovokzaly', N'dbo use', N'false'


GO

exec sp_dboption N'Autovokzaly', N'single', N'false'


GO

exec sp_dboption N'Autovokzaly', N'autoshrink', N'false'


GO

exec sp_dboption N'Autovokzaly', N'ANSI null default', N'false'


GO

exec sp_dboption N'Autovokzaly', N'recursive triggers', N'false'


GO

exec sp_dboption N'Autovokzaly', N'ANSI nulls', N'false'


GO

exec sp_dboption N'Autovokzaly', N'concat null yields null', N'false'


GO

exec sp_dboption N'Autovokzaly', N'cursor close on commit', N'false'


GO

exec sp_dboption N'Autovokzaly', N'default to local cursor', N'false'


GO

exec sp_dboption N'Autovokzaly', N'quoted identifier', N'false'


GO

exec sp_dboption N'Autovokzaly', N'ANSI warnings', N'false'


GO

exec sp_dboption N'Autovokzaly', N'auto create statistics', N'true'


GO

exec sp_dboption N'Autovokzaly', N'auto update statistics', N'true'

31
GO

if( (@@microsoftversion / power(2, 24) = 8) and (@@microsoftversion & 0xffff


>= 724) )
exec sp_dboption N'Autovokzaly', N'db chaining', N'false'
GO

use [Autovokzaly]
GO

/****** Object: Login Administrator Script Date: 22.01.2008 2:22:39


******/
if not exists (select * from master.dbo.syslogins where loginname =
N'Administrator')
BEGIN
declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb
= N'Autovokzaly', @loginlang = N'us_english'
if @logindb is null or not exists (select * from master.dbo.sysdatabases
where name = @logindb)
select @logindb = N'master'
if @loginlang is null or (not exists (select * from
master.dbo.syslanguages where name = @loginlang) and @loginlang <>
N'us_english')
select @loginlang = @@language
exec sp_addlogin N'Administrator', null, @logindb, @loginlang
END
GO

/****** Object: Login Kadry01 Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from master.dbo.syslogins where loginname =
N'Kadry01')
BEGIN
declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb
= N'Autovokzaly', @loginlang = N'us_english'
if @logindb is null or not exists (select * from master.dbo.sysdatabases
where name = @logindb)
select @logindb = N'master'
if @loginlang is null or (not exists (select * from
master.dbo.syslanguages where name = @loginlang) and @loginlang <>
N'us_english')
select @loginlang = @@language
exec sp_addlogin N'Kadry01', null, @logindb, @loginlang
END
GO

/****** Object: Login Kassir01 Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from master.dbo.syslogins where loginname =
N'Kassir01')
BEGIN
declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb
= N'Autovokzaly', @loginlang = N'us_english'
if @logindb is null or not exists (select * from master.dbo.sysdatabases
where name = @logindb)
select @logindb = N'master'
if @loginlang is null or (not exists (select * from
master.dbo.syslanguages where name = @loginlang) and @loginlang <>
N'us_english')
select @loginlang = @@language
exec sp_addlogin N'Kassir01', null, @logindb, @loginlang
END
GO

/****** Object: Login Manager Script Date: 22.01.2008 2:22:39 ******/


32
if not exists (select * from master.dbo.syslogins where loginname =
N'Manager')
BEGIN
declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb
= N'Autovokzaly', @loginlang = N'us_english'
if @logindb is null or not exists (select * from master.dbo.sysdatabases
where name = @logindb)
select @logindb = N'master'
if @loginlang is null or (not exists (select * from
master.dbo.syslanguages where name = @loginlang) and @loginlang <>
N'us_english')
select @loginlang = @@language
exec sp_addlogin N'Manager', null, @logindb, @loginlang
END
GO

/****** Object: Login Mechanic Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from master.dbo.syslogins where loginname =
N'Mechanic')
BEGIN
declare @logindb nvarchar(132), @loginlang nvarchar(132) select @logindb
= N'Autovokzaly', @loginlang = N'us_english'
if @logindb is null or not exists (select * from master.dbo.sysdatabases
where name = @logindb)
select @logindb = N'master'
if @loginlang is null or (not exists (select * from
master.dbo.syslanguages where name = @loginlang) and @loginlang <>
N'us_english')
select @loginlang = @@language
exec sp_addlogin N'Mechanic', null, @logindb, @loginlang
END
GO

/****** Object: Login BUILTIN\Администраторы Script Date: 22.01.2008


2:22:39 ******/
exec sp_addsrvrolemember N'BUILTIN\Администраторы', sysadmin
GO

/****** Object: User Administrator Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from dbo.sysusers where name = N'Administrator')
EXEC sp_grantdbaccess N'Administrator', N'Administrator'
GO

/****** Object: User guest Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from dbo.sysusers where name = N'guest' and
hasdbaccess = 1)
EXEC sp_grantdbaccess N'guest'
GO

/****** Object: User Kadry01 Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from dbo.sysusers where name = N'Kadry01')
EXEC sp_grantdbaccess N'Kadry01', N'Kadry01'
GO

/****** Object: User Kassir01 Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from dbo.sysusers where name = N'Kassir01')
EXEC sp_grantdbaccess N'Kassir01', N'Kassir01'
GO

/****** Object: User Manager Script Date: 22.01.2008 2:22:39 ******/


if not exists (select * from dbo.sysusers where name = N'Manager')
EXEC sp_grantdbaccess N'Manager', N'Manager'
GO
33
/****** Object: User Mechanic Script Date: 22.01.2008 2:22:39 ******/
if not exists (select * from dbo.sysusers where name = N'Mechanic')
EXEC sp_grantdbaccess N'Mechanic', N'Mechanic'
GO

/****** Object: User Administrator Script Date: 22.01.2008 2:22:39 ******/


exec sp_addrolemember N'db_owner', N'Administrator'
GO

/****** Object: Table [dbo].[AutoPark] Script Date: 22.01.2008 2:22:40


******/
CREATE TABLE [dbo].[AutoPark] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[AutoVokzal] [int] NULL ,
[AutoNumber] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Kol_voMest] [int] NULL ,
[Model] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

/****** Object: Table [dbo].[AutoVokzal] Script Date: 22.01.2008 2:22:40


******/
CREATE TABLE [dbo].[AutoVokzal] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Region] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[Sity] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[Street] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[Flat] [int] NULL ,
[Phone] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Director] [nchar] (20) COLLATE Cyrillic_General_CI_AS NULL ,
[NAME] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

/****** Object: Table [dbo].[Personal] Script Date: 22.01.2008 2:22:40


******/
CREATE TABLE [dbo].[Personal] (
[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[FirstName] [nchar] (20) COLLATE Cyrillic_General_CI_AS NULL ,
[SurName] [nchar] (20) COLLATE Cyrillic_General_CI_AS NULL ,
[Dolgnost] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[Pol] [bit] NULL ,
[BirhtDay] [datetime] NULL ,
[INN] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[NumberPension] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Region] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Sity] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Street] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Flat] [int] NULL ,
[Phone] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[AvtoVokzal] [int] NULL ,
[LogonName] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Password] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

/****** Object: Table [dbo].[Reysi] Script Date: 22.01.2008 2:22:40


******/
CREATE TABLE [dbo].[Reysi] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Code] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[Data] [datetime] NULL ,
34
[Driver] [int] NULL ,
[SecondDriver] [int] NULL ,
[PunktOtpravlenia] [int] NULL ,
[PunktNaznachenia] [int] NULL ,
[Kontroler] [int] NULL ,
[NamberPlatformi] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[AutoVokzal] [int] NULL ,
[Avto] [int] NULL
) ON [PRIMARY]
GO

/****** Object: Table [dbo].[Sity] Script Date: 22.01.2008 2:22:40 ******/


CREATE TABLE [dbo].[Sity] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Name] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[Region] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[Map] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

/****** Object: Table [dbo].[Tikets] Script Date: 22.01.2008 2:22:40


******/
CREATE TABLE [dbo].[Tikets] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Plase] [int] NULL ,
[Tsena] [real] NULL ,
[Bagage] [bit] NULL ,
[Reys] [int] NOT NULL ,
[Zakaz] [int] NULL
) ON [PRIMARY]
GO

/****** Object: Table [dbo].[Zakaz] Script Date: 22.01.2008 2:22:40


******/
CREATE TABLE [dbo].[Zakaz] (
[ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ,
[Date] [datetime] NULL ,
[Reys] [int] NULL ,
[FIO] [nchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
[TelephoneNumber] [nchar] (10) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AutoPark] WITH NOCHECK ADD


CONSTRAINT [PK_AutoPark] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AutoVokzal] WITH NOCHECK ADD


CONSTRAINT [PK_AutoVokzal] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Personal] WITH NOCHECK ADD


CONSTRAINT [PK_Personal] PRIMARY KEY CLUSTERED
(
[Id]
) ON [PRIMARY]
GO
35
ALTER TABLE [dbo].[Reysi] WITH NOCHECK ADD
CONSTRAINT [PK_Reysi] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Sity] WITH NOCHECK ADD


CONSTRAINT [PK_Sity] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Tikets] WITH NOCHECK ADD


CONSTRAINT [PK_Tikets] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Zakaz] WITH NOCHECK ADD


CONSTRAINT [PK_Zakaz] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AutoPark] ADD


CONSTRAINT [FK_AutoPark_AutoVokzal] FOREIGN KEY
(
[AutoVokzal]
) REFERENCES [dbo].[AutoVokzal] (
[ID]
)
GO

ALTER TABLE [dbo].[Personal] ADD


CONSTRAINT [FK_Personal_AutoVokzal] FOREIGN KEY
(
[AvtoVokzal]
) REFERENCES [dbo].[AutoVokzal] (
[ID]
)
GO

ALTER TABLE [dbo].[Reysi] ADD


CONSTRAINT [FK_Reysi_AutoPark] FOREIGN KEY
(
[Avto]
) REFERENCES [dbo].[AutoPark] (
[ID]
),
CONSTRAINT [FK_Reysi_AutoVokzal] FOREIGN KEY
(
[AutoVokzal]
) REFERENCES [dbo].[AutoVokzal] (
[ID]
),
CONSTRAINT [FK_Reysi_Personal] FOREIGN KEY
(
[Driver]
36
) REFERENCES [dbo].[Personal] (
[Id]
),
CONSTRAINT [FK_Reysi_Personal1] FOREIGN KEY
(
[SecondDriver]
) REFERENCES [dbo].[Personal] (
[Id]
),
CONSTRAINT [FK_Reysi_Personal2] FOREIGN KEY
(
[Kontroler]
) REFERENCES [dbo].[Personal] (
[Id]
),
CONSTRAINT [FK_Reysi_Sity] FOREIGN KEY
(
[PunktOtpravlenia]
) REFERENCES [dbo].[Sity] (
[ID]
),
CONSTRAINT [FK_Reysi_Sity1] FOREIGN KEY
(
[PunktNaznachenia]
) REFERENCES [dbo].[Sity] (
[ID]
)
GO

ALTER TABLE [dbo].[Tikets] ADD


CONSTRAINT [FK_Tikets_Reysi] FOREIGN KEY
(
[Reys]
) REFERENCES [dbo].[Reysi] (
[ID]
),
CONSTRAINT [FK_Tikets_Zakaz] FOREIGN KEY
(
[Zakaz]
) REFERENCES [dbo].[Zakaz] (
[ID]
)
GO

ALTER TABLE [dbo].[Zakaz] ADD


CONSTRAINT [FK_Zakaz_Reysi] FOREIGN KEY
(
[Reys]
) REFERENCES [dbo].[Reysi] (
[ID]
)
GO

SET QUOTED_IDENTIFIER OFF


GO
SET ANSI_NULLS ON
GO

/****** Object: Trigger dbo.DEL_reys Script Date: 22.01.2008 2:22:40


******/
CREATE trigger DEL_reys on dbo.Reysi
instead of delete
as
37
IF @@ROWCOUNT=1
BEGIN
DECLARE @y INT
SELECT @y=ID
FROM deleted
delete from Tikets where Reys=@y
delete from Zakaz where Reys=@y
END

GO

SET QUOTED_IDENTIFIER OFF


GO
SET ANSI_NULLS ON
GO

38
Приложение 2 – Листинг программы
program Mdiapp;

uses
Forms,
MAIN in 'MAIN.PAS' {MainForm},
about in 'about.pas' {AboutBox},
DataModule in 'DataModule.pas' {DataModule1: TDataModule},
USity in 'USity.pas' {FSity},
UAutovokzaly in 'UAutovokzaly.pas' {FAutovokzaly},
UEditAutovokzal in 'UEditAutovokzal.pas' {FEditAutovokzal},
UAutoPark in 'UAutoPark.pas' {FAutoPark},
UEditAutopark in 'UEditAutopark.pas' {FEditAutopark},
UPersonal in 'UPersonal.pas' {FPersonal},
UEditPersonal in 'UEditPersonal.pas' {FEditPersonal},
UReisy in 'UReisy.pas' {Freisy},
UEditReys in 'UEditReys.pas' {FEditReis},
UEditSity in 'UEditSity.pas' {FEditSity};

{$R *.RES}

begin
Application.Initialize;
Application.Title := 'Курсовая работа "Автовокзалы"';
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.Run;
end.

unit MAIN;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,


StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
ActnList, ToolWin, ImgList, DBActns, DBClientActns, dxExEdtr, dxCntner,
dxTL, dxDBCtrl, dxDBGrid, dxDBTL, ShellApi;

type
TMainForm = class(TForm)
procedure HelpAbout1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure SityExecute(Sender: TObject);
procedure AutovokzalysExecute(Sender: TObject);
procedure AutoparkExecute(Sender: TObject);
procedure PersonalExecute(Sender: TObject);
procedure ReisyExecute(Sender: TObject);
procedure SaveExcelExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation
39
{$R *.dfm}

uses about, USity, UAutovokzaly, UAutoPark, UPersonal, UReisy, DataModule;

procedure TMainForm.HelpAbout1Execute(Sender: TObject);


begin
AboutBox.ShowModal;
end;

procedure TMainForm.FileExit1Execute(Sender: TObject);


begin
Close;
end;

procedure TMainForm.SityExecute(Sender: TObject);


begin
Application.CreateForm(TFSity,FSity);
FSity.Show
end;

procedure TMainForm.AutovokzalysExecute(Sender: TObject);


begin
Application.CreateForm(TFAutovokzaly,FAutovokzaly);
FAutovokzaly.Show
end;

procedure TMainForm.AutoparkExecute(Sender: TObject);


begin
Application.CreateForm(TFAutoPark,FAutoPark);
FAutoPark.Show
end;

procedure TMainForm.PersonalExecute(Sender: TObject);


begin
Application.CreateForm(TFPersonal,FPersonal);
FPersonal.Show
end;

procedure TMainForm.ReisyExecute(Sender: TObject);


begin
Application.CreateForm(TFreisy,Freisy);
Freisy.Show
end;

procedure TMainForm.SaveExcelExecute(Sender: TObject);


var FName:String;
AObject:String;
begin
// with Sender as TdxDBGrid, TdxDBTreeList do begin
// MessageDlg(FName, mtInformation, [mbOk], 0);

if Screen.ActiveForm.ActiveControl <> nil then begin


AObject := Screen.ActiveForm.ActiveControl.ClassName;
if (AObject = 'TdxDBTreeList') or (AObject = 'TdxDBGrid') then begin
if SaveDialog1.Execute then begin
FName := SaveDialog1.FileName;
if AObject = 'TdxDBGrid' then
with Screen.ActiveForm.ActiveControl as TdxDBGrid do
SaveToXLS(FName, False)
else
with Screen.ActiveForm.ActiveControl as TdxDBTreeList do
40
SaveAllToTextFile(FName);

if ShellExecute
(Handle, 'open', @FName[1], nil, nil, SW_SHOWNORMAL)<32 then
MessageDlg('Не буду !', mtInformation, [mbOk], 0)
else
MessageDlg('Создан файл '+FName, mtInformation, [mbOk], 0);
end;
// WinExec() CreateProcess()
end;
end;

end;

procedure TMainForm.FormCreate(Sender: TObject);


begin
DataModule1.MSConnection1.Connect
end;

end.

unit DataModule;

interface

uses
SysUtils, Classes, DBAccess, SdacVcl, DB, MSAccess, MemDS;

type
procedure AutovokzalyAfterInsert(DataSet: TDataSet);
procedure AutoParkAfterInsert(DataSet: TDataSet);
procedure PersonalAfterInsert(DataSet: TDataSet);
procedure ReisyAfterInsert(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;

var
DataModule1: TDataModule1;

implementation

uses UEditAutovokzal, UEditAutopark, UEditPersonal, UEditReys, UReisy;

{$R *.dfm}

procedure TDataModule1.AutovokzalyAfterInsert(DataSet: TDataSet);


begin
FEditAutovokzal.ShowModal
end;

procedure TDataModule1.AutoParkAfterInsert(DataSet: TDataSet);


begin
FEditAutopark.ShowModal
end;

procedure TDataModule1.PersonalAfterInsert(DataSet: TDataSet);


begin
FEditPersonal.ShowModal
end;

41
procedure TDataModule1.ReisyAfterInsert(DataSet: TDataSet);
begin
FEditReis.ShowModal;
end;

end.

42