Файл: Организационно-экономическая характеристика предприятия.pdf
Добавлен: 25.05.2023
Просмотров: 1140
Скачиваний: 5
СОДЕРЖАНИЕ
1.1. Организационно-экономическая характеристика предприятия
1.2. Описание проектируемой системы
1.5. Формализованное описание в виде набора основных диаграмм
2. Проектирование базы данных информационной системы
2.1. Концептуальное проектирование базы данных
2.2. Логическое проектирование базы данных
2.3. Физическое проектирование базы данных
3.2. Связывание базы данных с программой Delphi
3.3. Разработка программного средства
Рисунок 2.4. Декомпозиция контекстной диаграммы
2. Проектирование базы данных информационной системы
2.1. Концептуальное проектирование базы данных
Проведем концептуальное проектирование базы данных.
Для этого опишем сущности, которые должны присутствовать в базе данных, и связи между ними.
Посетители кинотеатра покупают билеты. Каждый билет имеет определенную стоимость.
В кинотеатре демонстрируются фильмы. Фильмы показываются в залах. Фильмы демонстрируются на сеансах. Каждый фильм имеет определенную страну-производителя.
В залах присутствуют места, каждое из которых относится к определенному типу.
Таким образом, нами определены следующие сущности в базе данных:
- Страны-производители;
- Фильмы:
- Билеты;
- Типы билетов;
- Залы;
- Сеансы;
- Цены на билеты.
2.2. Логическое проектирование базы данных
7
2.3. Физическое проектирование базы данных
2.4. Состав таблиц
Опишем назначение и состав каждой из таблиц базы данных.
Таблица «Страны» (countries) содержит информацию о странах – производителях фильмов.
Таблица содержит следующие поля:
Таблица 2.1. Состав полей таблицы «Страны»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_country |
Идентификатор страны |
Integer |
Первичный |
Таблица «Билеты» (tickets) содержит информацию о проданных билетах.
Таблица содержит следующие поля:
Таблица 2.2. Состав полей таблицы «Билеты»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_ticket |
Идентификатор билета |
Integer |
Первичный |
|
Id_seans |
Идентификатор сеанса |
Integer |
Внешний |
|
Number_mesto |
Номер места |
Integer |
|
|
Id_type |
Идентификатор типа места |
Integer |
Внешний |
|
Price |
Цена билета |
money |
Таблица «Сеансы» (seans) содержит информацию о сеансах на фильмы.
Таблица содержит следующие поля.
Таблица 2.3. Состав полей таблицы «Сеансы»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_seans |
Идентификатор сеанса |
Integer |
Первичный |
|
Id_film |
Идентификатор фильма |
Integer |
Внешний |
|
Id_zal |
Идентификатор зала |
Integer |
Внешний |
|
Time |
Время начала сеанса |
Datetime |
Таблица «Фильмы» (films) содержит информацию о фильмах.
Таблица содержит следующие поля.
Таблица 2.4. Состав полей таблицы «Фильмы»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_film |
Идентификатор фильма |
Integer |
Первичный |
|
Name |
Название фильма |
Varchar(20) |
|
|
Id_country |
Идентификатор страны |
Integer |
Внешинй |
|
Director |
ФИО режиссера фильма |
Varchar(20) |
|
|
Length |
Длина фильма в минутах |
Integer |
|
|
Description |
Описание фильма |
Varchar (200) |
Таблица «Залы» (zaly) содержит информацию о залах.
Таблица содержит следующие поля.
Таблица 2.5. Состав полей таблицы «Залы»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_zal |
Идентификатор зала |
Integer |
Первичный |
|
Name |
Название зала |
Varchar(20) |
|
|
Mest |
Количество мест |
Integer |
|
|
Ryadov |
Количество рядов |
Integer |
Таблица «Типы мест» (type_mesta) содержит информацию о типах мест в залах.
Таблица содержит следующие поля.
Таблица 2.6. Состав полей таблицы «Типы мест»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_type |
Идентификатор типа |
Integer |
Первичный |
|
Name |
Название типа |
Varchar(20) |
Таблица «Цены на билеты» (ticket prices) предназначена для сохранения цен на билеты.
Таблица содержит следующие поля.
Таблица 2.7. Состав полей таблицы «Цены на билеты»
|
Название поля |
Описание поля |
Тип данных |
Ключ |
|
Id_price |
Идентификатор цены |
Integer |
Первичный |
|
Id_seans |
Идентификатор сеанса |
Integer |
Внешний |
|
Id_type |
Идентификатор типа |
Integer |
Внешний |
|
Price |
Цена на билет |
Money |
Далее с помощью инструменты среды ErWin Data Modeler под названием Forward Engineer был сгенерирован сценарий создания базы данных.
3. Программная реализация
3.1. Архитектура приложения
Проект имеет модульную структуру. Каждой форме проекта соответствует определенный файл модуля.
Приведем список модулей проекта с указанием назначения каждого из них.
Таблица 3.1
Список модулей проекта
|
Название модуля |
Назначение модуля |
|
Umain.pas |
Главный модуль проекта. Содержит все главные процедуры |
|
UFilmy.pas |
Модуль справочника фильмов |
|
UDataModule.pas |
Файл модуля данных, связывающий все компоненты, ответственные за доступ к базе данных |
|
UCenyBilety.pas |
Модуль справочника цен на билеты |
|
USeansy.pas |
Модуль справочника сеансов |
|
UStrany.pas |
Модуль справочника стран |
|
UTipyMest.pas |
Модуль справочника типов мест |
|
UZaly.pas |
Модуль справочника залов |
|
UZalyRyady.pas |
Модуль справочника рядов в залах |
|
UProdajaZaly.pas |
Модуля отчета «Продажа по залам» |
|
UProdajaFilmy.pas |
Модуль отчета «Продажа по фильмам» |
|
UProdajaTipy.pas |
Модуль отчета «Продажа по типам билетов» |
3.2. Связывание базы данных с программой Delphi
После того, как база данных создана, необходимо организовать её связь с программой в Delphi. Наша задача состоит в том, чтобы организовать такое взаимодействие без использования дополнительных SQL-запросов и представлений.
Итак, создаем проект Delphi. Для того, чтобы таблицы обрабатывались централизованно (что в дальнейшем значительно облегчит работу с ними) мы будем использовать компонент типа Data Module. Data Module – это разновидность формы Delphi, на которой не может быть представлено никаких визуальных компонентов, кроме компонентов, предназначенных для работы с базами данных.
Создаем такой модуль, выбрав в главном меню File – New – Data Module. Сохраним программную часть этого компонента под названием UDataModule.
Разместим в данном модуле компонент ADOConnection для связи с базой данных. Для того, чтобы иметь доступ к БД, необходимо указать в свойстве ConnectionString данного компонента строку подключения к базе данных.
Для этого нажимаем на кнопку с тремя точками рядом с этим свойством. На экран выводится следующее окно.
Рисунок 3.1 – Свойства подключения
Далее нажимаем кнопку Build и настраиваем соединение с базой данных, указывая наименование сервера и базы данных.
Рисунок 3.2 – Настройка подключения к базе данных
Для проверки соединения можно нажать на кнопку «Проверить подключение». Если выведется сообщение о том, что подключение успешно, то данные правильны. После нажатия на кнопку «ОК» строка соединения будет сформирована.
Разместим на полученном модуле несколько компонентов типа ADOTable и несколько компонентов типа DataSource, дав им соответствующие имена.
После того, как мы добавили компоненты и указали их свойства, необходимо создать связи внешних ключей в одних таблицах с ключевыми в других, чтобы при отображении на компоненте DBGrid можно было выбирать значения из списка и значения соответствующих ключевых полей подставлялись в таблицу автоматически. Для этого используется поле таблицы типа fkLookup.
Сначала настроим такие связи для таблицы TFilmty. Для этого два раза щелкаем мышью по таблице на форме. Появляется редактор полей. Сейчас он пуст. В него необходимо добавить все поля таблицы. Для этого нажимаем в поле редактора правой кнопкой мыши и выбираем в контекстном меню Add Fields. Появится список, в котором автоматически будут выделены все поля, содержащиеся в исходной таблице. Нажимаем ОК, поля будут добавлены в редактор.
Теперь создадим подстановочные поля. Для этого нажимаем правой кнопкой в окне редактора, и выбираем «New Field».
В появившемся окне необходимо указать следующие параметры:
Рисунок 3.3 – Создание Lookup поля
Поясним эти параметры.
В поле Name указывается название поля. Можно указать любое не дублирующееся с имеющимся название.
В поле Type указывается тип данных в поле. Для корректной работы необходимо выбрать значение Variant.
Поле Field Type указывает на тип поля. Необходимо указать тип Lookup.
Поле Key Fields указывает поле в исходной таблице для подстановки ключевого значения.
Поле Dataset указывает на таблицу, из которой будут браться значения для автоподстановки в таблицу.
Поле Lookup Keys указывает значения ключевых полей, которые будут подставляться.
Поле Result Fields указывает поля с названиями ключевых полей.
Нажимаем на кнопку OK. Таким образом мы добавили поле типа Lookup в таблицу TFilmy.
Остальные ключевые поля для этой и других таблиц создаются аналогичным образом.
3.3. Разработка программного средства
Файл UMain.pas имеет несколько ключевых процедур.
Основной процедурой является процедура отрисовки зала.
Приведем код данной процедуры с подробными комментариями.
procedure TMain.Otrisovka;
//Одна из основных процедур в программе - процедура отрисовки зала
var s,fn:string;
Color:TColor;
begin
if DBLookupComboBox1.KeyValue<>null then
begin
//Сначала проверяем, все ли нужные таблицы активны. Если какая то не активна - выходим из процедуры
if DataModule1.TZaly.Active<>true or DataModule1.TZaly_ryady.Active<>true or DataModule1.TBilety.Active<>true then exit;
//Устанавливаем цвет заливки в цвет формы
Canvas.Brush.Color:=ClBtnFace;
//Заливаем форму этим цветом (необходимо для очистки формы от предыдущего рисунка зала)
Canvas.FillRect(Canvas.ClipRect);
//Запоминаем идентификатор выбранного зала
id:=DBLookupComboBox1.KeyValue;
//Переходим в таблице "Залы" к этому залу
DataModule1.TZaly.Locate('id_zal',id, []);
//Запоминаем количество рядов в зале
ryadov:=DataModule1.TZaly.FieldByName('ryadov').AsInteger;
//Запоминаем количество мест в зале
mest:=DataModule1.TZaly.FieldByName('mest').AsInteger;
//Узнаем путь к схеме зала
fn:=ExtractFilePath(Application.ExeName)+'Залы\'+DataModule1.TZaly.FieldByName('File_schema').AsString;
//Связываем текстовую переменную с файлом
assignfile(textf, fn);
//Вычисляем шаг (размер ячейки места) по горизонтали