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




 

После анализа особенностей автоматизируемой области деятельности следует приступить к, возможно, самому важному этапу - проектированию будущей БД, которое заключается в определении состава полей её таблиц и связей между ними. От того, насколько тщательно проведен анализ и насколько грамотно спроектирована БД, в существеннейшей мере зависит эффективность будущего приложения БД и его полезность для пользователя.

В проектируемой базе данных должно быть 4 таблицы (исходя из полученных четырех отношений в 3НФ). В таблице Avtobys разместим полные сведения о каждом автобусе. Таблица Voditel предназначена для хранения сведений о водителях - то есть: номер водителя, ФИО водителя и его смена. В таблице Bilet содержится информация о билетах с указанием номера рейса и стоимости. В таблице Reis - будут храниться все необходимые сведения о рейсе - с указанием номера, даты отправления, пункта отправления и назначения, номера автобуса, номера водителя, времени в пути.

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


Таблица Reis:

Имя поля Назначение
Nomer_reisa Уникальный идентификатор рейса
Nomer_voditelya Уникальный идентификатор водителя
Nomer_avtobysa Уникальный идентификатор водителя
Pynkt_otpravleniya Пункт отправления
Pynkt_naznacheniya Пункт назначения
Data_otpravleniya Дата отправления
Prodannie_mesta Количество проданных мест
Vremya_v_pyti Время в пути (первичный ключ)

 

Таблица Avtobys:

Имя поля Назначение
Nomer_avtobysa Уникальный идентификатор автобуса
Pynkt_otpravleniya Пункт отправления
Pynkt_naznacheniya Пункт назначения
Kolichestvo_mest Количество мест в данном автобусе

 

Таблица Voditel:

Имя поля Назначение
Nomer_voditelya Уникальный идентификатор водителя
FIO_voditelya ФИО водителя
Smena Логическое поле (True/False)

 

Таблица Bilet:

Имя поля Назначение
Nomer_bileta Уникальный идентификатор билета
Nomer_reisa Уникальный идентификатор рейса
Stoimost Цена

Создание базы данных

 

Под созданием базы данных подразумевается создание таблиц будущей БД, проектирование связей между ними, а также задание свойств таблиц. При необходимости следует ввести контроль за содержимым полей, проверку правильности введенного в поле значения; добавить вычисляемые и просматриваемые поля. Перед созданием БД необходимо создать каталог, в котором будут размещаться таблицы, и настроить рабочий каталог утилиты DataBase Desktop (File/Working Directory).

После определения структуры таблиц создадим все таблицы базы данных "Автостанция".

Так как в базе данных поле Nomer_reisa должно содержать ссылку на купленный билет в таблице Bilet, то требуется установить однозначную связь между этими полями.

Поле Nomer_voditelya в таблице Voditel должно содержать ссылку на рейс в таблице Reis. Поэтому устанавливаем однозначную связь между этими полями.

Поле Nomer_avtobysa в таблице Avtobys должно содержать ссылку на рейс в таблице Reis. Для этого устанавливаем однозначную связь между этими полями.

Программирование

 

Важным шагом, конечно же, является конструирование главной и вспомогательных (при необходимости) форм. Delphi предоставляет разработчику широкие возможности быстрого и качественного проектирования графического интерфейса пользователя. Но следует учесть, что разработанное приложение будет являться одним из приложений Windows, и от графического интерфейса, оптимально удобного расположения компонентов - зависит производительность работы пользователя с вашим программным продуктом. Каждое окно, которое вы вводите в свое приложение должно быть тщательно продумано и скомпоновано, неудачная компоновка может рассеивать внимание, отвлекать на поиск нужной кнопки и т.д. При проектировании приложения важно правильно определить последовательность фокусировки элементов.

В данной работе были использованы следующие компоненты Delphi:

. Button - является простейшей и, пожалуй, наиболее часто используемой кнопкой, которая располагается на странице библиотеки Standard. Основное событие любой кнопки - OnClick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Из методов, присущих кнопкам, имеет смысл отметить один - Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке.

. RadioGroup - э то панель, которая может содержать регулярно расположенные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк. В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете - столько и будет кнопок. Кнопки, появившиеся в панели после задания значений Items, можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т.е. кнопки размещаются друг под другом. Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, которое показывает индекс выбранной кнопки. Индексы, как всегда в Delphi, начинаются с 0. По умолчанию ItemIndex = - 1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствующее значение ItemIndex во время проектирования.

. Label - используется для отображения различных надписей на форме. Тексты, отображаемые в перечисленных компонентах, определяются значением их свойства Caption. Его можно устанавливать в процессе проектирования или задавать и изменять программно во время выполнения приложения. Для метки Label цвет и шрифт - единственно доступные элементы оформления надписи. Размер метки Label определяется также свойством AutoSize. Если это свойство установлено в true, то вертикальный и горизонтальный размеры компонента определяются размером надписи. Если же AutoSize равно false, то выравнивание текста внутри компонента определяется свойством Alignment, которое позволяет выравнивать текст по левому краю, правому краю или центру клиентской области метки.

.В компоненте Edit вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается и пользователь может перемещаться по нему с помощью курсора. Окна редактирования можно использовать и просто как компоненты отображения текста. Для этого надо установить в true свойство ReadOnly. При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. Для вывода это описанные при рассмотрении меток функции FloatToStr и IntToStr. При вводе это функции StrToFloat - преобразование строки в значение с плавающей запятой, и StrToInt - преобразование строки в целое значение. Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. В противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.

.com boBox - отображает списки строк. Этот компонент позволяет отображать список как в развернутом виде, так и в виде выпадающего списка, что обычно удобнее, так как экономит площадь окна приложения. Основное свойство этого компонента, содержащее список строк, - Items, имеющее тип TStrings. Заполнить его во время проектирования можно, нажав кнопку с многоточием около этого свойства в окне Инспектора Объектов. Выбор пользователя или введенный им текст можно определить по значению свойства Text. Если же надо определить индекс выбранного пользователем элемента списка, то можно воспользоваться свойством ItemIndex. Если в окне проводилось редактирование данных, то ItemIndex = - 1. По этому признаку можно определить, что редактирование проводилось.

. В Delphi для работы с наборами данных служат такие компоненты, как Table и Query, которые являются производными от класса DBDataSet - потомка класса TDataSet. Они имеют схожие с базовыми классами характеристики и поведение, но каждый из них имеет и свои особенности.

Для компонента Table использование свойства DataBaseName является единственной возможностью задать местонахождение таблиц базы данных. Для компонента Query дополнительно можно указать в запросе SQL путь доступа к каждой таблице.

Открытый компонент Table (т.е. Active=True) содержит набор данных, соответствующий данным таблицы, связанной с ним через свойство TableName.

Для открытого компонента Query данных соответствует результатам выполнения SQL-запроса, содержащегося в свойстве SQL этого компонента.

Компонент Table обеспечивает взаимодействие с таблицей базы данных. Для связи с требуемой таблицей нужно установить соответствующее значение свойствам DataBaseName, указывающему путь к базе данных, и TableName указывающему имя таблицы. После задания таблицы для открытия набора данных свойству Active должно быть установлено значение True.

. DataSource обеспечивает взаимодействие набора данных с компонентами отображения данных. Чаще всего одному набору данных соответствует один компонент DataSource, хотя их может быть несколько. Компонент DataSource должен быть связан с набором данных, значения полей которого требуется передать в параметры. Названия параметров должны соответствовать названиям полей этого набора данных, тогда свойство DataSource начнет работать.

Еще одна функция компонента DataSource заключается в синхронизации поведения компонентов отображения данных с состоянием набора данных. Если набор данных работает в режиме "только для чтения", то компонент DataSource обязан передать в компоненты отображения данных запрещение на изменение данных.

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

. Компонент TDBNavigator при помощи свойства DataSourse связывается с компонентом TDataSourse и через него с набором данных. Такая схема позволяет обеспечить изменение текущих значений полей сразу во всех связанных с TDataSourse компонентах отображения данных. Таким образом TDBNavigator только дает команду на выполнение перемещения по набору данных или другой управляющей операции, а всю реальную работу выполняет компонент набора данных и компонент TDataSourse. Компонентом отображения остается только применить данные от своих полей.

DBNavigator содержит следующие кнопки:

1. nbFirst - перемещение на первую запись набора данных

2. nbPrior - перемещение на предыдущую запись набора данных

3. nbNext - перемещение на следующую запись набора данных

4. nbLast - перемещение на последнюю запись набора данных

5. nbInsert - вставка новой записи в текущей позиции набора данных

6. nbDelete - удаление текущей записи, курсор перемещается на следующую запись

7. nbEdit - набор данных переводится в режим редактирования

8. nbPost - в базу данных переносятся все изменения в текущей записи

9. nbCancel - все изменения в текущей записи отменяются

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

. DBGrid - этот компонент инкапсулирует двумерную таблицу, в которой сроки представляют собой записи, а столбцы поля.

Компонент DBGrid является потомком классов TDBCustomGrid и TCustomGrid от TCustomGrid наследует все функции отображения и управления работой двумерной структуры данных. Класс TDBCustomGrid обеспечивает визуализацию и редактирование полей из набора данных, причем TDBGrid только публикует свойства и методы класса TDBCustomGrid, не добавляя собственных.

В компоненте TDBGrid можно отображать произвольное множество полей использованного набора данных, но число записей ограничивать нельзя, в компоненте всегда присутствуют все записи связанного набора данных. Требуемый набор полей можно составить при двойном щелчке на компоненте, перемещенном на форму, или кнопкой свойства Colums в Инспекторе объектов.

Новая колонка добавляется при помощи кнопки Add New, после этого ее название появляется в списке колонок. Колонки в списке можно редактировать, удалять, менять местами. При помощи кнопки Add All Fields в сетку можно добавлять все поля набора данных.

Программирование работы приложения базы данных приведено в листинге (Приложение А).

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

procedure TForm1. RadioGroup1Click (Sender: TObject);RadioGroup1. ItemIndex=0 then Table3. Filtered: =falseRadioGroup1. ItemIndex=2 then

begin. Filtered: =true;

Table3. Filter: ='Nomer_reisa='+ComboBox1. Text; endRadioGroup1. ItemIndex=3 then. Filtered: =true;. Filter: ='Nomer_voditelya='+ComboBox2. Text; endRadioGroup1. ItemIndex=4 then. Filtered: =true;. Filter: ='Nomer_avtobysa='+ComboBox3. Text; end. Filtered: =False;;

end; end;;

 

Для формирования поставленных в задании запросов воспользуемся языком запросов SQL.

. Выдать информацию о наличии свободного билета на рейс.

select distinct nomer_reisa, kolichestvo_mest, prodannie_mestareis, avtobys(avtobys. nomer_avtobysa=reis. nomer_avtobysa)(kolichestvo_mest-prodannie_mesta) >0

2. Вывести список рейсов в один и тот же город с указанием времени пути и стоимости билета.

select distinct nomer_reisa, pynkt_naznacheniya, stoimost, vremya_v_pytireis, bilet(bilet. nomer_reisa=reis. nomer_reisa)pynkt_naznacheniya='+''''+Edit14. Text+''''

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


Заключение

 

В данной курсовой работе была разработана база данных "Автостанция".

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

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

База данных содержит следующую информацию: данные о рейсе (дата, пункт отправления, пункт назначения, номер автобуса, номер водителя, время в пути), сведения о водителе (ФИО водителя, смена), данные о билетах (стоимость) и данные об автобусе (пункт отправления, назначения, количество мест).

Данная курсовая работа является актуальной и отвечает предъявленным к ней требованиям. Была разработана и написана на языке программирования высокого уровня Borland Delphi 7.0.

база программирование автовокзал информационный


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

 

1. Архангельский А.Я. Программирование в Delphi 5. - М.: ЗАО “Издательство БИНОМ”, 2000. - 1070с.: ил. (ч/з ПаУ)

2. Фаронов В.В. Программирование баз данных в Delphi 6. Учебный курс. - СПб.: Питер, 2002. - 352с.: ил.

. Дарахвелидзе П.Г., Марков Е.П. Delphi - среда визуального программирования: - СПб.: BHV - Санкт-Петербург, 1996. - 352с.

. Гофман В.Э., Хомоненко А.Д. Delphi. Быстрый старт. - СПб.: БХВ - Санкт-Петербург, 2002. - 208с.: ил. (ч/з ПаУ)

. Фаронов В.В. Delphi 4. Учебный курс. - М.: "Нолидж", 1999. - 464с.: ил. (ч/з ПаУ)

. Фаронов В.В. Delphi 5 Учебный курс. - М.: "Нолидж", 2000. - 606с.: ил. (ч/з ПаУ)

. Фаронов В.В. Delphi 6. Учебный курс. - М.: Издатель Молгачева С.В., 2002. - 672с. (ч/з ПаУ)

. Фаронов В.В. Шумаков П.В. Delphi 4. Руководство разработчика баз данных. - М.: “Нолидж”, 1999. - 560с.: ил.

. Фаронов В.В. Шумаков П.В. Delphi 5. Руководство разработчика баз данных. - М.: “Нолидж”, 2000. - 640с.: ил. (ч/з ПаУ)

. Хендерсон К. Руководство разработчика баз данных в Delphi 2/Пер. с англ. - К.: "Диалектика", 1996. - 544с.

. Культин Н.Б. Delphi 6. Программирование на Object Pascal. Самоучитель. - СПб.: БХВ-Петербург, 2001. - 528с.: ил. (ч/з ПаУ)

. Базы данных: интеллектуальная обработка информации В.В. Корнеев, А.Ф. Гареев, С.В. Васютин. - М.: Нолидж, 200. - 352с.: ил. (ч/з ПаУ)



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: