Проектирование информационной системы для хранения данных о фильмах и кинотеатрах

 

Содержание


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

2. Проектирование информационной системы

2.1 Построение диаграммы вариантов использования

2.2 Диаграмма последовательности действий

2.3 Построение диаграммы классов

3. Проектирование реляционной модели базы данных

4. Мапирование реляционной модели в метамодель

4.1 Построение диаграммы классов для метамодели

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

5. Логическая реализация Базы данных

6. Физическая реализация Базы данных

6.1 Скрипты

7. Создание выборок

Выводы

Список литературы

Приложение

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


Кинотеатры (информация для зрителей):

фильмы: название, описание, жанр, длительность, популярность, в каких кинотеатрах показывается, цены на билеты;

кинотеатры: название, адрес, схема проезда, описание, число мест, акустическая система, формат.

2. Проектирование информационной системы


2.1 Построение диаграммы вариантов использования


На первом этапе предпроектного исследования выяснено, что основная задача разрабатываемой системы - сопровождение процесса.

Диаграмма вариантов использования представлена на картинке ниже:


Рисунок 2.1 - Диаграмма вариантов использования


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

информационная система база программа

2.2 Диаграмма последовательности действий


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


Рисунок 2.2 - Диаграмма последовательности действий


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


2.3 Построение диаграммы классов


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


Рисунок 2.3 - Диаграмма классов


Исходя из диаграммы последовательности действий, мы получим 2 класса: Фильм и Кинотеатр. В класс Фильм входят 6 атрибутов, из которых атрибут ID_фильма является идентификационным номером фильма. Класс Кинотеатр имеет также 6 атрибутов, в котором ID_кинотеатра является его идентифицирующим номером. Классы соединены между собой отношением "Многие ко многим".

3. Проектирование реляционной модели базы данных


Возьмем за правило считать классы сущностями. Объектной модели можно сопоставить модели данных из-за постоянного характера классов. Стойкие классы могут выступать в качестве постоянного хранения данных во время работы приложения. Следовательно, для всех постоянных классов можно применить утверждение, что они могут использовать однозначное отображение в сущностях. Этот процесс называется "Маппирование" (от. англ. Mapping).

Тогда отношения Фильм и Кинотеатр, выявленные на этапе построения концептуальной модели характеризуются следующими атрибутами (табл.3.1)


Таблица 3.1 Атрибуты отношения "Фильм"

АтрибутОписаниеID_фильмаПервичный ключНазвание_фильмаНазвание фильмаДлительность Жанр Рейтинг Цена билетаДлительность фильма Жанр фильма Рейтинг фильма Цена билета

Отношению Фильм соответствует полная ФЗ: ID_фильма ? Название фильма, длительность, жанр, рейтинг, цена билета. Все поля кроме "ID_фильма" не могут быть первичным ключом.


Таблица 3.2 Атрибуты отношения "Кинотеатр"

АтрибутОписаниеID_кинотеатраПервичный ключАдресАдрес кинотеатраНазвание_кинотеатра Число_мест Акустическая_система Формат_экранаНазвание кинотеатра Число мест Акустическая система Формат экрана

Отношению Кинотеатр соответствует полная ФЗ: ID_кинотеатра ? адрес, название кинотеатра, число мест, акустическая система, формат экрана. Все поля кроме "ID_кинотеатра" не могут быть первичным ключом.

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

Сущности Фильм и Кинотеатр соединены связью "многие ко многим" (М: N). Мощность связи многие-ко-многим означает неоднозначность связи экземпляров сущностей. Для разрешения этой проблемы вводим составную сущность ids. Она состоит из первичных ключей соединяемых сущностей.

Окончательная реляционная модель базы данных выглядит следующим образом:


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

4. Мапирование реляционной модели в метамодель


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

Одним из основоположников метамодели стал Анатолий Тенцер [4]. Он описал пять основных тезисов, на которых должна строиться проектируемая база данных:

.Каждая сущность, информация о которой хранится в БД, - это объект.

2.Каждый объект уникален в пределах БД и имеет уникальный идентификатор.

.Объект имеет свойства (строковые, числовые, временные, перечислимые), которые описывают атрибуты сущности.

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

.Объект может быть хранилищем. В этом случае допускается хранение в нем других объектов.

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

4.1 Построение диаграммы классов для метамодели


Исходя из описанных выше утверждений, была спроектирована диаграмма классов, которая удовлетворяет этим тезисам (рис.4.1).

Как видно из диаграммы классов она состоит из 4 классов: Типы, Объекты, Атрибуты и Параметры. В каждом классе, кроме класса Параметры, имеется 3 атрибута, из которых один - это идентификатор данного класса. В классы Объекты и Атрибуты мигрирует идентификатор из класса Типы. Класс Параметры не имеет своего идентификатора, но в него мигрируют идентификаторы из классов Атрибуты и Объекты.


Рисунок 4.1 - Диаграмма классов


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


Отношения Типы, Объекты, Атрибуты и Параметры, выявленные на этапе построения концептуальной модели характеризуются следующими атрибутами (табл.3.1).


Таблица 3.1 Атрибуты отношения "Типы"

АтрибутОписаниеID_типа_объектаПервичный ключНазваниеНазвание типаОписаниеОписание типа

Таблица 3.2 Атрибуты отношения "Объекты"

АтрибутОписаниеID_объектаПервичный ключID_типа_объектаВнешний ключ отношения "Типы"Название_объектаНазвание объекта

Таблица 3.3 Атрибуты отношения "Атрибуты"

АтрибутОписаниеID_атрибутаПервичный ключID_типа_объектаВнешний ключ отношения "Типы"Название_атрибутаНазвание атрибута

Таблица 3.3 Атрибуты отношения "Параметры"

АтрибутОписаниеID_объектаВнешний ключ отношения "Объекты" ID_отношения ID_атрибута Показывает отношение между объектами Внешний ключ отношения "Атрибуты"Текстовое значение Номерное значениеПоле для текстовых данных Поле для числовых данных

Отношение Параметры играет роль связи "Многие ко Многим", а атрибут ID_отношения показывает эту связь.

5. Логическая реализация Базы данных


Реализуем таблицу cf_types. Для идентификации записей введем первичный ключ object_type_id.


Таблица 5.1 Обоснование типов полей таблицы cf_types:

АтрибутСтолбецТип данныхМотивацияПримечаниеID_типа_объектаobject_type_idNUMBERPrimary KeyНазваниеnameVARCHAR2 (50) НазваниеОписаниеdescriptionVARCHAR2 (100) Описание

Реализуем таблицу cf_obj. Для идентификации записей введем первичный ключ object_id.


Таблица 5.2 Обоснование типов полей таблицы cf_obj:

АтрибутСтолбецТип данныхМотивацияПримечаниеID_объектаobject_idNUMBERPrimary KeyID_типа_объектаobject_type_idNUMBERForeign KeyНазвание_объектаnameVARCHAR2 (150) Название объекта

Реализуем таблицу cf_attr. Для идентификации записей введем первичный ключ attr_id.


Таблица 5.3 Обоснование типов полей таблицы cf_attr:

АтрибутСтолбецТип данныхМотивацияПримечаниеID_атрибутаattr_idNUMBERPrimary KeyID_типа_объектаobject_type_idNUMBERForeign KeyНазвание_атрибутаnameVARCHAR2 (50) Название атрибута

Реализуем таблицу cf_par. Первичных ключей таблица не имеет.

Таблица 5.4 Обоснование типов полей таблицы cf_par:

АтрибутСтолбецТип данныхМотивацияПримечаниеID_объектаobject_idNUMBERНомер объектаForeign KeyID_отношенияrelation_idNUMBERНомер отношенияID_атрибутаattr_idNUMBERНомер атрибутаForeign KeyТекстовое_значениеtext_valueVARCHAR2 (150) Поле для текстовых данныхНомерное_значениеnumber_valueNUMBERПоле для цифровых данных

Схема базы данных cf_meta была реализована так:


Рисунок 5.1 - Схема базы данных cf_meta

6. Физическая реализация Базы данных


6.1 Скрипты


Создадим таблицы, согласно схеме указанной выше:


Create table cf_types (_type_id Number NOT NULL,Varchar2 (50),Varchar2 (100),pk_cf_types primary key (object_type_id));table cf_attr (_id Number NOT NULL,_type_id Number,Varchar2 (50),pk_cf_attr primary key (attr_id));table cf_obj (_id Number NOT NULL,_type_id Number,Varchar2 (150),pk_cf_obj primary key (object_id));table cf_par (_id Number NOT NULL,_id Number,_id Number,_value Varchar2 (150),_value Number);table cf_attr add Constraint r_12 foreign key (object_type_id) references cf_types (object_type_id);table cf_obj add Constraint r_11 foreign key (object_type_id) references cf_types (object_type_id);table cf_par add Constraint r_14 foreign key (attr_id) references cf_attr (attr_id);

Alter table cf_par add Constraint r_13 foreign key (object_id) references cf_obj (object_id);

7. Создание выборок


Задание 1


Вывести список не повторяющихся жанров фильма.


SELECT DISTINCT text_value FROM cf_par par WHERE attr_id IN (SELECT attr_id FROM cf_attr WHERE name='genre')


Задание 2


Вывести название фильмов в которых 5-я буква "о"


SELECT namecf_objSUBSTR (name,5,1) ='о' AND object_type_id IN (SELECT object_type_id FROM cf_types WHERE name LIKE 'Film')


Задание 3


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


SELECT obj. name, genre. text_value, dur. number_valuecf_obj objcf_par genre ON genre. object_id=obj. object_idobj. name LIKE '% %'obj. object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')genre. attr_id= (SELECT attr_id FROM cf_attr WHERE name='genre')cf_par dur ON dur. object_id=obj. object_iddur. attr_id= (SELECT attr_id FROM cf_attr WHERE name='duration')


Задание 4


Вывести название фильма, продолжительность и рейтинг. Цена и жанр которых описывается следующим набором данных (30.75, 35) и (Ужасы, Приключения)

obj. name, genre. text_value, dur. number_value, price. number_valuecf_obj objcf_par genre ON genre. object_id=obj. object_idobj. object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')genre. text_value IN ('Ужасы','Приключения')cf_par price ON price. object_id=obj. object_idprice. number_value IN (35,30.75)cf_par dur ON dur. object_id=obj. object_idattr_id= (SELECT attr_id FROM cf_attr WHERE name='duration')


Задание 5


Вывести список фильмов, которые проходят в кинотеатре Космос


SELECT obj. namecf_obj objcf_par rel ON rel. relation_id=obj. object_idrel. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='ids')rel. object_id IN (SELECT object_id FROM cf_obj WHERE name='Космос')


Задание 6


Вывести список кинотеатров и весь список фильмов их цен, жанров, продолжительности которые проходят в этих кинотеатрах, отсортированных по названию кинотеатра


SELECT cin. name, film. name, price. number_value, genre. text_value, duration. number_valuecf_obj cincf_par par ON par. object_id=cin. object_idpar. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='ids')cf_obj film ON film. object_id=par. relation_idcf_par price ON price. object_id=film. object_idprice. attr_id= (SELECT attr_id FROM cf_attr WHERE name='price')cf_par genre ON genre. object_id=film. object_idgenre. attr_id= (SELECT attr_id FROM cf_attr WHERE name='genre')cf_par duration ON duration. object_id=film. object_idduration. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='duration')BY cin. name

Задание 7


Вывести список фильмов, жанр и цену, цена которых находится в промежутке от 25 до 30


SELECT film. name, genre. text_value, price. number_value(SELECT object_id FROM cf_par WHERE number_value BETWEEN 25 AND 30 AND attr_id IN (SELECT attr_id FROM cf_attr WHERE name='price')) ff

JOIN cf_par genre ON genre. object_id=ff. object_id

AND genre. attr_id= (SELECT attr_id FROM cf_attr WHERE name='genre')cf_obj film ON film. object_id=ff. object_idcf_par price ON price. object_id=ff. object_idprice. attr_id= (SELECT attr_id FROM cf_attr WHERE name='price')


Задание 8


Вывести список названий кинотеатров, их адрес, акустическую систему, формат экрана, число мест в которых показывают фильм "Метро"


SELECT cinema. name, address. text_value, acoustic. text_value, format. text_value, place. number_value(SELECT film. object_id FROM cf_obj film WHERE film. name LIKE 'Метро') fcf_par rel ON rel. relation_id=f. object_idcf_obj cinema ON cinema. object_id=rel. object_idcf_par address ON address. object_id=cinema. object_idaddress. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='address')cf_par acoustic ON acoustic. object_id=cinema. object_idacoustic. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='acoustic')cf_par format ON format. object_id=cinema. object_idformat. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='format')cf_par place ON place. object_id=cinema. object_idplace. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='place')


Задание 9


Вывести весь список фильмов находящихся в прокате и всю информацию по ним.


SELECT film. object_id, film. name, genre. text_value, duration. number_value, rait. number_value, price. number_valuecf_obj filmcf_par genre ON genre. object_id=film. object_idcf_par duration ON duration. object_id=film. object_idcf_par rait ON rait. object_id=film. object_idcf_par price ON price. object_id=film. object_idfilm. object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')genre. attr_id IN (SELECT attr_id FROM cf_attr WHERE name=LOWER ('GENRE'))duration. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='duration')rait. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='rait')price. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='price')

Выводы


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

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

Список литературы


1.Codd E.F. Relational completeness of data base sublanguages. - Ibid. 1972, p.65-98.

2.А. Чекалов. Базы данных: от проектирования до разработки приложений - СПб.: БХВ-Петербург, 2003. - 384 с.

.Ульман Дж. Основы систем баз данных /Пер. c англ. М.Р. Когаловского. - М.: Финансы и статистика, 1983. - 334 с.

.Анатолий Тенцер. База данных - хранилище объектов - М.: "КомпьютерПресс", #"center">Приложение


Код заполнения таблиц:


INSERT INTO cf_types VALUES (1,'Cinema','Cinema');

INSERT INTO cf_types VALUES (2,'Film','Film');INTO cf_types VALUES (3,'ids','ids');INTO cf_attr VALUES (1,1,'address');INTO cf_attr VALUES (2,1,'place');INTO cf_attr VALUES (3,1,'acoustic');INTO cf_attr VALUES (4,1,'format');INTO cf_attr VALUES (5,2,'genre');INTO cf_attr VALUES (6,2,'duration');INTO cf_attr VALUES (7,2,'rait');INTO cf_attr VALUES (8,2,'price');INTO cf_attr VALUES (9,3,'ids');INTO cf_obj VALUES (11,1,'Метрополис 5D');INTO cf_obj VALUES (12,1,'IMAX Блокбастер');INTO cf_obj VALUES (13,1,'Алмаз');INTO cf_obj VALUES (14,1,'Жовтень');INTO cf_obj VALUES (15,1,'Кинопалац');INTO cf_obj VALUES (16,1,'Украина');INTO cf_obj VALUES (17,1,'Дружба');INTO cf_obj VALUES (18,1,'Космос');INTO cf_obj VALUES (21,2,'Альфа и Омега');INTO cf_obj VALUES (22,2,'Бабл Дабл');INTO cf_obj VALUES (23,2,'Бундишванские горки');INTO cf_obj VALUES (24,2,'Бурлеск');INTO cf_obj VALUES (25,2,'В плену у тьмы');INTO cf_obj VALUES (26,2,'Выкрутасы');INTO cf_obj VALUES (27,2,'Любовь-Морковь 3');INTO cf_obj VALUES (28,2,'Меняющие реальность');INTO cf_obj VALUES (29,2,'Мертвый дом');INTO cf_obj VALUES (210,2,'Метро');INTO cf_obj VALUES (211,2,'Настоящее мужество');INTO cf_obj VALUES (212,2,'Небоскребки');INTO cf_obj VALUES (213,2,'Орел девятого легиона');INTO cf_obj VALUES (214,2,'Откуда ты знаешь');INTO cf_obj VALUES (215,2,'Я - четвертый');INTO cf_par VALUES (11,NULL,1,'Малиновского 12',NULL);INTO cf_par VALUES (12,NULL,1,'Московский 34-В',NULL);INTO cf_par VALUES (13,NULL,1,'Миропольская 17А',NULL);INTO cf_par VALUES (14,NULL,1,'Константиновская 26',NULL);INTO cf_par VALUES (15,NULL,1,'Институтская 1',NULL);INTO cf_par VALUES (16,NULL,1,'Городецкого 5',NULL);INTO cf_par VALUES (17,NULL,1,'просп. Шевченко 20',NULL);INTO cf_par VALUES (18,NULL,1,'Октябрьская 12',NULL);INTO cf_par VALUES (11,NULL,2,NULL,80);INTO cf_par VALUES (12,NULL,2,NULL,278);INTO cf_par VALUES (13,NULL,2,NULL,100);INTO cf_par VALUES (14,NULL,2,NULL,100);INTO cf_par VALUES (15,NULL,2,NULL,326);INTO cf_par VALUES (16,NULL,2,NULL,250);INTO cf_par VALUES (17,NULL,2,NULL,180);INTO cf_par VALUES (18,NULL,2,NULL,165);INTO cf_par VALUES (11,NULL,3,'Dolby Digital',NULL);INTO cf_par VALUES (12,NULL,3,'Dolby Suround',NULL);INTO cf_par VALUES (13,NULL,3,'Dolby Suround',NULL);INTO cf_par VALUES (14,NULL,3,'Dolby Suround',NULL);INTO cf_par VALUES (15,NULL,3,'Dolby Suround',NULL);INTO cf_par VALUES (16,NULL,3,'Dolby Digital',NULL);INTO cf_par VALUES (17,NULL,3,'Dolby Suround',NULL);INTO cf_par VALUES (18,NULL,3,'Dolby Digital',NULL);INTO cf_par VALUES (11,NULL,4,'Широкоформатный 16: 9',NULL);INTO cf_par VALUES (12,NULL,4,'Широкоформатный 16: 9',NULL);INTO cf_par VALUES (13,NULL,4,'Пропорциональный 5: 4',NULL);INTO cf_par VALUES (14,NULL,4,'Широкоформатный 16: 9',NULL);INTO cf_par VALUES (15,NULL,4,'Широкоформатный 16: 9',NULL);INTO cf_par VALUES (16,NULL,4,'Пропорциональный 5: 4',NULL);INTO cf_par VALUES (17,NULL,4,'Широкоформатный 16: 9',NULL);INTO cf_par VALUES (18,NULL,4,'Пропорциональный 5: 4',NULL);INTO cf_par VALUES (21,NULL,5,'Мультфильм',NULL);INTO cf_par VALUES (22,NULL,5,'Приключения',NULL);INTO cf_par VALUES (23,NULL,5,'Приключения',NULL);INTO cf_par VALUES (24,NULL,5,'Драма',NULL);INTO cf_par VALUES (25,NULL,5,'Приключения',NULL);INTO cf_par VALUES (26,NULL,5,'Фантастика',NULL);INTO cf_par VALUES (27,NULL,5,'Комедия',NULL);INTO cf_par VALUES (28,NULL,5,'Комедия',NULL);INTO cf_par VALUES (29,NULL,5,'Ужасы',NULL);INTO cf_par VALUES (210,NULL,5,'Ужасы',NULL);INTO cf_par VALUES (211,NULL,5,'Драма',NULL);INTO cf_par VALUES (212,NULL,5,'Приключения',NULL);INTO cf_par VALUES (213,NULL,5,'Боевик',NULL);INTO cf_par VALUES (214,NULL,5,'Драма',NULL);INTO cf_par VALUES (215,NULL,5,'Боевик',NULL);INTO cf_par VALUES (21,NULL,6,NULL,1.37);INTO cf_par VALUES (22,NULL,6,NULL,1.42);INTO cf_par VALUES (23,NULL,6,NULL,1.35);INTO cf_par VALUES (24,NULL,6,NULL,1.35);INTO cf_par VALUES (25,NULL,6,NULL,1.51);INTO cf_par VALUES (26,NULL,6,NULL,1.28);INTO cf_par VALUES (27,NULL,6,NULL,1.51);INTO cf_par VALUES (28,NULL,6,NULL,2.12);INTO cf_par VALUES (29,NULL,6,NULL,1.32);INTO cf_par VALUES (210,NULL,6,NULL,1.24);INTO cf_par VALUES (211,NULL,6,NULL,1.42);INTO cf_par VALUES (212,NULL,6,NULL,1.27);INTO cf_par VALUES (213,NULL,6,NULL,1.45);INTO cf_par VALUES (214,NULL,6,NULL,1.22);INTO cf_par VALUES (215,NULL,6,NULL,1.36);INTO cf_par VALUES (21,NULL,7,NULL,47);INTO cf_par VALUES (22,NULL,7,NULL,67);INTO cf_par VALUES (23,NULL,7,NULL,77);INTO cf_par VALUES (24,NULL,7,NULL,51);INTO cf_par VALUES (25,NULL,7,NULL,71);INTO cf_par VALUES (26,NULL,7,NULL,74);INTO cf_par VALUES (27,NULL,7,NULL,87);INTO cf_par VALUES (28,NULL,7,NULL,88);INTO cf_par VALUES (29,NULL,7,NULL,81);INTO cf_par VALUES (210,NULL,7,NULL,83);INTO cf_par VALUES (211,NULL,7,NULL,70);INTO cf_par VALUES (212,NULL,7,NULL,68);INTO cf_par VALUES (213,NULL,7,NULL,63);INTO cf_par VALUES (214,NULL,7,NULL,68);INTO cf_par VALUES (215,NULL,7,NULL,75);INTO cf_par VALUES (21,NULL,8,NULL,25);INTO cf_par VALUES (22,NULL,8,NULL,32.5);INTO cf_par VALUES (23,NULL,8,NULL,35);INTO cf_par VALUES (24,NULL,8,NULL,28);INTO cf_par VALUES (25,NULL,8,NULL,30.75);INTO cf_par VALUES (26,NULL,8,NULL,34);INTO cf_par VALUES (27,NULL,8,NULL,35);INTO cf_par VALUES (28,NULL,8,NULL,37.3);INTO cf_par VALUES (29,NULL,8,NULL,35);INTO cf_par VALUES (210,NULL,8,NULL,35.5);INTO cf_par VALUES (211,NULL,8,NULL,33.5);INTO cf_par VALUES (212,NULL,8,NULL,30);INTO cf_par VALUES (213,NULL,8,NULL,31.65);INTO cf_par VALUES (214,NULL,8,NULL,27);INTO cf_par VALUES (215,NULL,8,NULL,29);INTO cf_par VALUES (11,23,9,NULL,NULL);INTO cf_par VALUES (11,25,9,NULL,NULL);INTO cf_par VALUES (11,28,9,NULL,NULL);INTO cf_par VALUES (11,211,9,NULL,NULL);INTO cf_par VALUES (12,211,9,NULL,NULL);INTO cf_par VALUES (12,21,9,NULL,NULL);INTO cf_par VALUES (12,24,9,NULL,NULL);INTO cf_par VALUES (13,21,9,NULL,NULL);INTO cf_par VALUES (13,22,9,NULL,NULL);INTO cf_par VALUES (13,23,9,NULL,NULL);INTO cf_par VALUES (13,24,9,NULL,NULL);INTO cf_par VALUES (14,22,9,NULL,NULL);INTO cf_par VALUES (14,24,9,NULL,NULL);INTO cf_par VALUES (14,25,9,NULL,NULL);INTO cf_par VALUES (14,29,9,NULL,NULL);INTO cf_par VALUES (14,211,9,NULL,NULL);INTO cf_par VALUES (14,212,9,NULL,NULL);INTO cf_par VALUES (15,212,9,NULL,NULL);INTO cf_par VALUES (15,215,9,NULL,NULL);INTO cf_par VALUES (15,213,9,NULL,NULL);INTO cf_par VALUES (15,27,9,NULL,NULL);INTO cf_par VALUES (16,23,9,NULL,NULL);INTO cf_par VALUES (16,25,9,NULL,NULL);INTO cf_par VALUES (16,215,9,NULL,NULL);INTO cf_par VALUES (16,214,9,NULL,NULL);INTO cf_par VALUES (16,210,9,NULL,NULL);INTO cf_par VALUES (17,27,9,NULL,NULL);INTO cf_par VALUES (17,21,9,NULL,NULL);INTO cf_par VALUES (17,24,9,NULL,NULL);INTO cf_par VALUES (17,29,9,NULL,NULL);INTO cf_par VALUES (17,211,9,NULL,NULL);INTO cf_par VALUES (18,21,9,NULL,NULL);INTO cf_par VALUES (18,23,9,NULL,NULL);INTO cf_par VALUES (18,26,9,NULL,NULL);INTO cf_par VALUES (18,27,9,NULL,NULL);INTO cf_par VALUES (18,29,9,NULL,NULL);INTO cf_par VALUES (18,210,9,NULL,NULL);INTO cf_par VALUES (18,214,9,NULL,NULL);

Код программной реализации:


// Обработчик кнопки "Запрос" и двух радио-кнопок

void CcifiDlg:: OnBnClickedRadio1 ()

{=false;=true;

// TODO: Add your control notification handler code here

}CcifiDlg:: OnBnClickedRadio2 ()

{=false;=true;

// TODO: Add your control notification handler code here

}CcifiDlg:: OnBnClickedButton1 ()

{_list. ResetContent ();(! bFilm &&! bCinema)

{("Вы не указали что искать!");;

}s;_get. GetWindowTextA (s);(s=="")

{("Пустая строка запроса!");;

}db;. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=127.0.0.1");check=db. IsOpen ();(! check)

{("Не удается установить соединение с БД!");;

}_get. GetWindowTextA (m_get);rec (&db);(bCinema)

{_check=1;_list. AddString ("Список фильмов кинотеатра "+m_get+": ");. Open (CRecordset:: forwardOnly,"SELECT obj. name FROM cf_obj obj JOIN cf_par rel ON rel. relation_id=obj. object_id AND rel. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='ids') WHERE rel. object_id IN (SELECT object_id FROM cf_obj WHERE name='"+m_get+"')",CRecordset:: readOnly);(! rec. IsEOF ())

{. GetFieldValue (short (0),s);_list. AddString (s);. MoveNext ();

}

}(bFilm)

{_check=2;_list. AddString ("Список кинотеатров где показывают "+m_get+": ");. Open (CRecordset:: forwardOnly,"SELECT cinema. name FROM (SELECT film. object_id FROM cf_obj film WHERE film. name LIKE '"+m_get+"') f JOIN cf_par par ON par. relation_id=f. object_id JOIN cf_obj cinema ON cinema. object_id=par. object_id",CRecordset:: readOnly);(! rec. IsEOF ())

{. GetFieldValue (short (0),s);_list. AddString (s);. MoveNext ();

}

}

// TODO: Add your control notification handler code here

}

// Обработчики текстовых полей, реагирующих на нажатие Левой Кнопки Мыши.

void CcifiDlg:: OnLbnSelchangeList1 ()

{_list. GetText (m_list. GetCurSel (),m_get);(m_list. GetCurSel () ==0)

{;

}(m_check==1)

{cFilm;. m_get=m_get;result=cFilm. DoModal ();(result==IDOK)

{;

}

}(m_check==2)

{cCinema;. m_get=m_get;result=cCinema. DoModal ();(result==IDOK)

{;

}

}

// TODO: Add your control notification handler code here

}CcifiDlg:: OnBnClickedButton2 ()

{cf;result=cf. DoModal ();(result==IDOK)

{_FromList=cf. m_FromList;_get. SetWindowTextA (m_FromList);;

}

// TODO: Add your control notification handler code here

}

// Обработчик кнопки "Список"CcifiDlg:: OnBnClickedButton2 ()

{cf;result=cf. DoModal ();(result==IDOK)

{_FromList=cf. m_FromList;_get. SetWindowTextA (m_FromList);;

}

// TODO: Add your control notification handler code here

}

// Функция инициализации диалогового окна "Информация по фильму"

BOOL CDlgFilm:: OnInitDialog (void)

{:: OnInitDialog ();s;db;. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=localhost");check=db. IsOpen ();rec (&db);. Open (CRecordset:: forwardOnly,"SELECT film. name, genre. text_value, duration. number_value, rait. number_value, price. number_value FROM cf_obj film JOIN cf_par genre ON genre. object_id=film. object_id AND genre. attr_id=5 JOIN cf_par duration ON duration. object_id=film. object_id AND duration. attr_id=6 JOIN cf_par rait ON rait. object_id=film. object_id AND rait. attr_id=7JOIN cf_par price ON price. object_id=film. object_id AND price. attr_id=8 AND film. name='"+m_get+"'",CRecordset:: readOnly);(! rec. IsEOF ())

{. GetFieldValue (short (0),s);_fname. SetWindowTextA (s);. GetFieldValue (short (1),s);_genre. SetWindowTextA (s);. GetFieldValue (short (2),s);_duration. SetWindowTextA (s);. GetFieldValue (short (3),s);_rait. SetWindowTextA (s);. GetFieldValue (short (4),s);_price. SetWindowTextA (s);. MoveNext ();

}. Close ();TRUE;

}

// Функция инициализации диалогового окна "Информация о Кинотеатре"

BOOL CDlgCinema:: OnInitDialog (void)

{:: OnInitDialog ();s;db;. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=localhost");check=db. IsOpen ();rec (&db);. Open (CRecordset:: forwardOnly,"SELECT c. name, a. text_value, p. number_value, ac. text_value, f. text_value FROM cf_obj c JOIN cf_par a ON a. object_id=c. object_id AND a. attr_id=1 JOIN cf_par p ON p. object_id=c. object_id AND p. attr_id=2 JOIN cf_par ac ON ac. object_id=c. object_id AND ac. attr_id=3 JOIN cf_par f ON f. object_id=c. object_id AND f. attr_id=4 AND c. name='"+m_get+"'",CRecordset:: readOnly);(! rec. IsEOF ())

{. GetFieldValue (short (0),s);_cname. SetWindowTextA (s);. GetFieldValue (short (1),s);_address. SetWindowTextA (s);. GetFieldValue (short (2),s);_place. SetWindowTextA (s);. GetFieldValue (short (3),s);_acoustic. SetWindowTextA (s);. GetFieldValue (short (4),s);_format. SetWindowTextA (s);. MoveNext ();

}. Close ();TRUE;

}

// Функция инициализации диалогового окна "Список" с обработчиками функций списковых текстовых полей

BOOL CCfList:: OnInitDialog (void)

{:: OnInitDialog ();s;db;. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=localhost");check=db. IsOpen ();rec (&db);. Open (CRecordset:: forwardOnly,"SELECT name FROM cf_obj WHERE object_type_id=1",CRecordset:: readOnly);(! rec. IsEOF ())

{. GetFieldValue (short (0),s);_cinema. AddString (s);. MoveNext ();

}. Close ();. Open (CRecordset:: forwardOnly,"SELECT name FROM cf_obj WHERE object_type_id=2",CRecordset:: readOnly);(! rec. IsEOF ())

{. GetFieldValue (short (0),s);_film. AddString (s);. MoveNext ();

}. Close ();TRUE;

}CCfList:: OnLbnSelchangeList2 ()

{_film. GetText (m_film. GetCurSel (),m_FromList);();

// TODO: Add your control notification handler code here

}CCfList:: OnLbnSelchangeList1 ()

{_cinema. GetText (m_cinema. GetCurSel (),m_FromList);();

// TODO: Add your control notification handler code here

}


Результат работы программы:


Рисунок 1 - Главное меню программы


Рисунок 2 - Меню списка кинотеатров и фильмов в прокате


Рисунок 3 - Запрос по кинотеатру "Космос"


Рисунок 4 - Вывод информации по выбранному фильму


Рисунок 5 - Вывод информации по выбранному кинотеатру


Содержание 1. Постановка задачи 2. Проектирование информационной системы 2.1 Построение диаграммы вариантов использования 2.2 Диаграмма последов

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ