Проектирование информационной системы для хранения данных о фильмах и кинотеатрах
Варианты использования информационной системы: заказ билета, просмотр каталога фильмов и списка кинотеатров. Проектирование реляционной модели базы данных, ее мапирование в метамодель, логическая и физическая реализация. Результаты работы программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.11.2011 |
Размер файла | 673,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2
Размещено на http://www.allbest.ru/
Содержание
- 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]. Он описал пять основных тезисов, на которых должна строиться проектируемая база данных:
1. Каждая сущность, информация о которой хранится в БД, - это объект.
2. Каждый объект уникален в пределах БД и имеет уникальный идентификатор.
3. Объект имеет свойства (строковые, числовые, временные, перечислимые), которые описывают атрибуты сущности.
4. Объекты могут быть связаны между собой произвольным образом. Связь характеризуется связанными объектами и типом связи.
5. Объект может быть хранилищем. В этом случае допускается хранение в нем других объектов.
Такая структура базы данных не привязана ни к какой бизнес-модели и позволяет реализовать на этой основе практически любую бизнес-логику.
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_id |
NUMBER |
Primary Key |
||
Название |
name |
VARCHAR2 (50) |
Название |
||
Описание |
description |
VARCHAR2 (100) |
Описание |
Реализуем таблицу cf_obj. Для идентификации записей введем первичный ключ object_id.
Таблица 5.2 Обоснование типов полей таблицы cf_obj:
Атрибут |
Столбец |
Тип данных |
Мотивация |
Примечание |
|
ID_объекта |
object_id |
NUMBER |
Primary Key |
||
ID_типа_объекта |
object_type_id |
NUMBER |
Foreign Key |
||
Название_объекта |
name |
VARCHAR2 (150) |
Название объекта |
Реализуем таблицу cf_attr. Для идентификации записей введем первичный ключ attr_id.
Таблица 5.3 Обоснование типов полей таблицы cf_attr:
Атрибут |
Столбец |
Тип данных |
Мотивация |
Примечание |
|
ID_атрибута |
attr_id |
NUMBER |
Primary Key |
||
ID_типа_объекта |
object_type_id |
NUMBER |
Foreign Key |
||
Название_атрибута |
name |
VARCHAR2 (50) |
Название атрибута |
Реализуем таблицу cf_par. Первичных ключей таблица не имеет.
Таблица 5.4 Обоснование типов полей таблицы cf_par:
Атрибут |
Столбец |
Тип данных |
Мотивация |
Примечание |
|
ID_объекта |
object_id |
NUMBER |
Номер объекта |
Foreign Key |
|
ID_отношения |
relation_id |
NUMBER |
Номер отношения |
||
ID_атрибута |
attr_id |
NUMBER |
Номер атрибута |
Foreign Key |
|
Текстовое_значение |
text_value |
VARCHAR2 (150) |
Поле для текстовых данных |
||
Номерное_значение |
number_value |
NUMBER |
Поле для цифровых данных |
Схема базы данных cf_meta была реализована так:
Рисунок 5.1 - Схема базы данных cf_meta
6. Физическая реализация Базы данных
6.1 Скрипты
Создадим таблицы, согласно схеме указанной выше:
Create table cf_types (
object_type_id Number NOT NULL,
name Varchar2 (50),
description Varchar2 (100),
Constraint pk_cf_types primary key (object_type_id));
Create table cf_attr (
attr_id Number NOT NULL,
object_type_id Number,
name Varchar2 (50),
Constraint pk_cf_attr primary key (attr_id));
Create table cf_obj (
object_id Number NOT NULL,
object_type_id Number,
name Varchar2 (150),
Constraint pk_cf_obj primary key (object_id));
Create table cf_par (
object_id Number NOT NULL,
relation_id Number,
attr_id Number,
text_value Varchar2 (150),
number_value Number);
Alter table cf_attr add Constraint r_12 foreign key (object_type_id) references cf_types (object_type_id);
Alter table cf_obj add Constraint r_11 foreign key (object_type_id) references cf_types (object_type_id);
Alter 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 name
FROM cf_obj
WHERE SUBSTR (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_value
FROM cf_obj obj
JOIN cf_par genre ON genre. object_id=obj. object_id
AND obj. name LIKE '% %'
AND obj. object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')
AND genre. attr_id= (SELECT attr_id FROM cf_attr WHERE name='genre')
JOIN cf_par dur ON dur. object_id=obj. object_id
WHERE dur. attr_id= (SELECT attr_id FROM cf_attr WHERE name='duration')
Задание 4
Вывести название фильма, продолжительность и рейтинг. Цена и жанр которых описывается следующим набором данных (30.75, 35) и (Ужасы, Приключения)
SELECT obj. name, genre. text_value, dur. number_value, price. number_value
FROM cf_obj obj
JOIN cf_par genre ON genre. object_id=obj. object_id
AND obj. object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')
AND genre. text_value IN ('Ужасы','Приключения')
JOIN cf_par price ON price. object_id=obj. object_id
AND price. number_value IN (35,30.75)
JOIN cf_par dur ON dur. object_id=obj. object_id
WHERE attr_id= (SELECT attr_id FROM cf_attr WHERE name='duration')
Задание 5
Вывести список фильмов, которые проходят в кинотеатре Космос
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='Космос')
Задание 6
Вывести список кинотеатров и весь список фильмов их цен, жанров, продолжительности которые проходят в этих кинотеатрах, отсортированных по названию кинотеатра
SELECT cin. name, film. name, price. number_value, genre. text_value, duration. number_value
FROM cf_obj cin
JOIN cf_par par ON par. object_id=cin. object_id
AND par. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='ids')
JOIN cf_obj film ON film. object_id=par. relation_id
JOIN cf_par price ON price. object_id=film. object_id
AND price. attr_id= (SELECT attr_id FROM cf_attr WHERE name='price')
JOIN cf_par genre ON genre. object_id=film. object_id
AND genre. attr_id= (SELECT attr_id FROM cf_attr WHERE name='genre')
JOIN cf_par duration ON duration. object_id=film. object_id
WHERE duration. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='duration')
ORDER BY cin. name
Задание 7
Вывести список фильмов, жанр и цену, цена которых находится в промежутке от 25 до 30
SELECT film. name, genre. text_value, price. number_value
FROM (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')
JOIN cf_obj film ON film. object_id=ff. object_id
JOIN cf_par price ON price. object_id=ff. object_id
WHERE price. 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
FROM (SELECT film. object_id FROM cf_obj film WHERE film. name LIKE 'Метро') f
JOIN cf_par rel ON rel. relation_id=f. object_id
JOIN cf_obj cinema ON cinema. object_id=rel. object_id
JOIN cf_par address ON address. object_id=cinema. object_id
AND address. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='address')
JOIN cf_par acoustic ON acoustic. object_id=cinema. object_id
AND acoustic. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='acoustic')
JOIN cf_par format ON format. object_id=cinema. object_id
AND format. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='format')
JOIN cf_par place ON place. object_id=cinema. object_id
AND place. 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_value
FROM cf_obj film
JOIN cf_par genre ON genre. object_id=film. object_id
JOIN cf_par duration ON duration. object_id=film. object_id
JOIN cf_par rait ON rait. object_id=film. object_id
JOIN cf_par price ON price. object_id=film. object_id
WHERE film. object_type_id= (SELECT object_type_id FROM cf_types WHERE name='Film')
AND genre. attr_id IN (SELECT attr_id FROM cf_attr WHERE name=LOWER ('GENRE'))
AND duration. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='duration')
AND rait. attr_id IN (SELECT attr_id FROM cf_attr WHERE name='rait')
AND 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 с.
3. Ульман Дж. Основы систем баз данных /Пер. c англ. М.Р. Когаловского. - М.: Финансы и статистика, 1983. - 334 с.
4. Анатолий Тенцер. База данных - хранилище объектов - М.: "КомпьютерПресс", http://www.compress.ru, 2001
Приложение
Код заполнения таблиц:
INSERT INTO cf_types VALUES (1,'Cinema','Cinema');
INSERT INTO cf_types VALUES (2,'Film','Film');
INSERT INTO cf_types VALUES (3,'ids','ids');
INSERT INTO cf_attr VALUES (1,1,'address');
INSERT INTO cf_attr VALUES (2,1,'place');
INSERT INTO cf_attr VALUES (3,1,'acoustic');
INSERT INTO cf_attr VALUES (4,1,'format');
INSERT INTO cf_attr VALUES (5,2,'genre');
INSERT INTO cf_attr VALUES (6,2,'duration');
INSERT INTO cf_attr VALUES (7,2,'rait');
INSERT INTO cf_attr VALUES (8,2,'price');
INSERT INTO cf_attr VALUES (9,3,'ids');
INSERT INTO cf_obj VALUES (11,1,'Метрополис 5D');
INSERT INTO cf_obj VALUES (12,1,'IMAX Блокбастер');
INSERT INTO cf_obj VALUES (13,1,'Алмаз');
INSERT INTO cf_obj VALUES (14,1,'Жовтень');
INSERT INTO cf_obj VALUES (15,1,'Кинопалац');
INSERT INTO cf_obj VALUES (16,1,'Украина');
INSERT INTO cf_obj VALUES (17,1,'Дружба');
INSERT INTO cf_obj VALUES (18,1,'Космос');
INSERT INTO cf_obj VALUES (21,2,'Альфа и Омега');
INSERT INTO cf_obj VALUES (22,2,'Бабл Дабл');
INSERT INTO cf_obj VALUES (23,2,'Бундишванские горки');
INSERT INTO cf_obj VALUES (24,2,'Бурлеск');
INSERT INTO cf_obj VALUES (25,2,'В плену у тьмы');
INSERT INTO cf_obj VALUES (26,2,'Выкрутасы');
INSERT INTO cf_obj VALUES (27,2,'Любовь-Морковь 3');
INSERT INTO cf_obj VALUES (28,2,'Меняющие реальность');
INSERT INTO cf_obj VALUES (29,2,'Мертвый дом');
INSERT INTO cf_obj VALUES (210,2,'Метро');
INSERT INTO cf_obj VALUES (211,2,'Настоящее мужество');
INSERT INTO cf_obj VALUES (212,2,'Небоскребки');
INSERT INTO cf_obj VALUES (213,2,'Орел девятого легиона');
INSERT INTO cf_obj VALUES (214,2,'Откуда ты знаешь');
INSERT INTO cf_obj VALUES (215,2,'Я - четвертый');
INSERT INTO cf_par VALUES (11,NULL,1,'Малиновского 12',NULL);
INSERT INTO cf_par VALUES (12,NULL,1,'Московский 34-В',NULL);
INSERT INTO cf_par VALUES (13,NULL,1,'Миропольская 17А',NULL);
INSERT INTO cf_par VALUES (14,NULL,1,'Константиновская 26',NULL);
INSERT INTO cf_par VALUES (15,NULL,1,'Институтская 1',NULL);
INSERT INTO cf_par VALUES (16,NULL,1,'Городецкого 5',NULL);
INSERT INTO cf_par VALUES (17,NULL,1,'просп. Шевченко 20',NULL);
INSERT INTO cf_par VALUES (18,NULL,1,'Октябрьская 12',NULL);
INSERT INTO cf_par VALUES (11,NULL,2,NULL,80);
INSERT INTO cf_par VALUES (12,NULL,2,NULL,278);
INSERT INTO cf_par VALUES (13,NULL,2,NULL,100);
INSERT INTO cf_par VALUES (14,NULL,2,NULL,100);
INSERT INTO cf_par VALUES (15,NULL,2,NULL,326);
INSERT INTO cf_par VALUES (16,NULL,2,NULL,250);
INSERT INTO cf_par VALUES (17,NULL,2,NULL,180);
INSERT INTO cf_par VALUES (18,NULL,2,NULL,165);
INSERT INTO cf_par VALUES (11,NULL,3,'Dolby Digital',NULL);
INSERT INTO cf_par VALUES (12,NULL,3,'Dolby Suround',NULL);
INSERT INTO cf_par VALUES (13,NULL,3,'Dolby Suround',NULL);
INSERT INTO cf_par VALUES (14,NULL,3,'Dolby Suround',NULL);
INSERT INTO cf_par VALUES (15,NULL,3,'Dolby Suround',NULL);
INSERT INTO cf_par VALUES (16,NULL,3,'Dolby Digital',NULL);
INSERT INTO cf_par VALUES (17,NULL,3,'Dolby Suround',NULL);
INSERT INTO cf_par VALUES (18,NULL,3,'Dolby Digital',NULL);
INSERT INTO cf_par VALUES (11,NULL,4,'Широкоформатный 16: 9',NULL);
INSERT INTO cf_par VALUES (12,NULL,4,'Широкоформатный 16: 9',NULL);
INSERT INTO cf_par VALUES (13,NULL,4,'Пропорциональный 5: 4',NULL);
INSERT INTO cf_par VALUES (14,NULL,4,'Широкоформатный 16: 9',NULL);
INSERT INTO cf_par VALUES (15,NULL,4,'Широкоформатный 16: 9',NULL);
INSERT INTO cf_par VALUES (16,NULL,4,'Пропорциональный 5: 4',NULL);
INSERT INTO cf_par VALUES (17,NULL,4,'Широкоформатный 16: 9',NULL);
INSERT INTO cf_par VALUES (18,NULL,4,'Пропорциональный 5: 4',NULL);
INSERT INTO cf_par VALUES (21,NULL,5,'Мультфильм',NULL);
INSERT INTO cf_par VALUES (22,NULL,5,'Приключения',NULL);
INSERT INTO cf_par VALUES (23,NULL,5,'Приключения',NULL);
INSERT INTO cf_par VALUES (24,NULL,5,'Драма',NULL);
INSERT INTO cf_par VALUES (25,NULL,5,'Приключения',NULL);
INSERT INTO cf_par VALUES (26,NULL,5,'Фантастика',NULL);
INSERT INTO cf_par VALUES (27,NULL,5,'Комедия',NULL);
INSERT INTO cf_par VALUES (28,NULL,5,'Комедия',NULL);
INSERT INTO cf_par VALUES (29,NULL,5,'Ужасы',NULL);
INSERT INTO cf_par VALUES (210,NULL,5,'Ужасы',NULL);
INSERT INTO cf_par VALUES (211,NULL,5,'Драма',NULL);
INSERT INTO cf_par VALUES (212,NULL,5,'Приключения',NULL);
INSERT INTO cf_par VALUES (213,NULL,5,'Боевик',NULL);
INSERT INTO cf_par VALUES (214,NULL,5,'Драма',NULL);
INSERT INTO cf_par VALUES (215,NULL,5,'Боевик',NULL);
INSERT INTO cf_par VALUES (21,NULL,6,NULL,1.37);
INSERT INTO cf_par VALUES (22,NULL,6,NULL,1.42);
INSERT INTO cf_par VALUES (23,NULL,6,NULL,1.35);
INSERT INTO cf_par VALUES (24,NULL,6,NULL,1.35);
INSERT INTO cf_par VALUES (25,NULL,6,NULL,1.51);
INSERT INTO cf_par VALUES (26,NULL,6,NULL,1.28);
INSERT INTO cf_par VALUES (27,NULL,6,NULL,1.51);
INSERT INTO cf_par VALUES (28,NULL,6,NULL,2.12);
INSERT INTO cf_par VALUES (29,NULL,6,NULL,1.32);
INSERT INTO cf_par VALUES (210,NULL,6,NULL,1.24);
INSERT INTO cf_par VALUES (211,NULL,6,NULL,1.42);
INSERT INTO cf_par VALUES (212,NULL,6,NULL,1.27);
INSERT INTO cf_par VALUES (213,NULL,6,NULL,1.45);
INSERT INTO cf_par VALUES (214,NULL,6,NULL,1.22);
INSERT INTO cf_par VALUES (215,NULL,6,NULL,1.36);
INSERT INTO cf_par VALUES (21,NULL,7,NULL,47);
INSERT INTO cf_par VALUES (22,NULL,7,NULL,67);
INSERT INTO cf_par VALUES (23,NULL,7,NULL,77);
INSERT INTO cf_par VALUES (24,NULL,7,NULL,51);
INSERT INTO cf_par VALUES (25,NULL,7,NULL,71);
INSERT INTO cf_par VALUES (26,NULL,7,NULL,74);
INSERT INTO cf_par VALUES (27,NULL,7,NULL,87);
INSERT INTO cf_par VALUES (28,NULL,7,NULL,88);
INSERT INTO cf_par VALUES (29,NULL,7,NULL,81);
INSERT INTO cf_par VALUES (210,NULL,7,NULL,83);
INSERT INTO cf_par VALUES (211,NULL,7,NULL,70);
INSERT INTO cf_par VALUES (212,NULL,7,NULL,68);
INSERT INTO cf_par VALUES (213,NULL,7,NULL,63);
INSERT INTO cf_par VALUES (214,NULL,7,NULL,68);
INSERT INTO cf_par VALUES (215,NULL,7,NULL,75);
INSERT INTO cf_par VALUES (21,NULL,8,NULL,25);
INSERT INTO cf_par VALUES (22,NULL,8,NULL,32.5);
INSERT INTO cf_par VALUES (23,NULL,8,NULL,35);
INSERT INTO cf_par VALUES (24,NULL,8,NULL,28);
INSERT INTO cf_par VALUES (25,NULL,8,NULL,30.75);
INSERT INTO cf_par VALUES (26,NULL,8,NULL,34);
INSERT INTO cf_par VALUES (27,NULL,8,NULL,35);
INSERT INTO cf_par VALUES (28,NULL,8,NULL,37.3);
INSERT INTO cf_par VALUES (29,NULL,8,NULL,35);
INSERT INTO cf_par VALUES (210,NULL,8,NULL,35.5);
INSERT INTO cf_par VALUES (211,NULL,8,NULL,33.5);
INSERT INTO cf_par VALUES (212,NULL,8,NULL,30);
INSERT INTO cf_par VALUES (213,NULL,8,NULL,31.65);
INSERT INTO cf_par VALUES (214,NULL,8,NULL,27);
INSERT INTO cf_par VALUES (215,NULL,8,NULL,29);
INSERT INTO cf_par VALUES (11,23,9,NULL,NULL);
INSERT INTO cf_par VALUES (11,25,9,NULL,NULL);
INSERT INTO cf_par VALUES (11,28,9,NULL,NULL);
INSERT INTO cf_par VALUES (11,211,9,NULL,NULL);
INSERT INTO cf_par VALUES (12,211,9,NULL,NULL);
INSERT INTO cf_par VALUES (12,21,9,NULL,NULL);
INSERT INTO cf_par VALUES (12,24,9,NULL,NULL);
INSERT INTO cf_par VALUES (13,21,9,NULL,NULL);
INSERT INTO cf_par VALUES (13,22,9,NULL,NULL);
INSERT INTO cf_par VALUES (13,23,9,NULL,NULL);
INSERT INTO cf_par VALUES (13,24,9,NULL,NULL);
INSERT INTO cf_par VALUES (14,22,9,NULL,NULL);
INSERT INTO cf_par VALUES (14,24,9,NULL,NULL);
INSERT INTO cf_par VALUES (14,25,9,NULL,NULL);
INSERT INTO cf_par VALUES (14,29,9,NULL,NULL);
INSERT INTO cf_par VALUES (14,211,9,NULL,NULL);
INSERT INTO cf_par VALUES (14,212,9,NULL,NULL);
INSERT INTO cf_par VALUES (15,212,9,NULL,NULL);
INSERT INTO cf_par VALUES (15,215,9,NULL,NULL);
INSERT INTO cf_par VALUES (15,213,9,NULL,NULL);
INSERT INTO cf_par VALUES (15,27,9,NULL,NULL);
INSERT INTO cf_par VALUES (16,23,9,NULL,NULL);
INSERT INTO cf_par VALUES (16,25,9,NULL,NULL);
INSERT INTO cf_par VALUES (16,215,9,NULL,NULL);
INSERT INTO cf_par VALUES (16,214,9,NULL,NULL);
INSERT INTO cf_par VALUES (16,210,9,NULL,NULL);
INSERT INTO cf_par VALUES (17,27,9,NULL,NULL);
INSERT INTO cf_par VALUES (17,21,9,NULL,NULL);
INSERT INTO cf_par VALUES (17,24,9,NULL,NULL);
INSERT INTO cf_par VALUES (17,29,9,NULL,NULL);
INSERT INTO cf_par VALUES (17,211,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,21,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,23,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,26,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,27,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,29,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,210,9,NULL,NULL);
INSERT INTO cf_par VALUES (18,214,9,NULL,NULL);
Код программной реализации:
// Обработчик кнопки "Запрос" и двух радио-кнопок
void CcifiDlg:: OnBnClickedRadio1 ()
{
bFilm=false;
bCinema=true;
// TODO: Add your control notification handler code here
}
void CcifiDlg:: OnBnClickedRadio2 ()
{
bCinema=false;
bFilm=true;
// TODO: Add your control notification handler code here
}
void CcifiDlg:: OnBnClickedButton1 ()
{
m_list. ResetContent ();
if (! bFilm &&! bCinema)
{
AfxMessageBox ("Вы не указали что искать!");
return;
}
CString s;
e_get. GetWindowTextA (s);
if (s=="")
{
AfxMessageBox ("Пустая строка запроса!");
return;
}
CDB db;
db. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=127.0.0.1");
BOOL check=db. IsOpen ();
if (! check)
{
AfxMessageBox ("Не удается установить соединение с БД!");
return;
}
e_get. GetWindowTextA (m_get);
CRecordset rec (&db);
if (bCinema)
{
m_check=1;
m_list. AddString ("Список фильмов кинотеатра "+m_get+": ");
rec. 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);
while (! rec. IsEOF ())
{
rec. GetFieldValue (short (0),s);
m_list. AddString (s);
rec. MoveNext ();
}
}
if (bFilm)
{
m_check=2;
m_list. AddString ("Список кинотеатров где показывают "+m_get+": ");
rec. 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);
while (! rec. IsEOF ())
{
rec. GetFieldValue (short (0),s);
m_list. AddString (s);
rec. MoveNext ();
}
}
// TODO: Add your control notification handler code here
}
// Обработчики текстовых полей, реагирующих на нажатие Левой Кнопки Мыши.
void CcifiDlg:: OnLbnSelchangeList1 ()
{
m_list. GetText (m_list. GetCurSel (),m_get);
if (m_list. GetCurSel () ==0)
{
return;
}
if (m_check==1)
{
CDlgFilm cFilm;
cFilm. m_get=m_get;
int result=cFilm. DoModal ();
if (result==IDOK)
{
return;
}
}
if (m_check==2)
{
CDlgCinema cCinema;
cCinema. m_get=m_get;
int result=cCinema. DoModal ();
if (result==IDOK)
{
return;
}
}
// TODO: Add your control notification handler code here
}
void CcifiDlg:: OnBnClickedButton2 ()
{
CCfList cf;
int result=cf. DoModal ();
if (result==IDOK)
{
m_FromList=cf. m_FromList;
e_get. SetWindowTextA (m_FromList);
return;
}
// TODO: Add your control notification handler code here
}
// Обработчик кнопки "Список"
void CcifiDlg:: OnBnClickedButton2 ()
{
CCfList cf;
int result=cf. DoModal ();
if (result==IDOK)
{
m_FromList=cf. m_FromList;
e_get. SetWindowTextA (m_FromList);
return;
}
// TODO: Add your control notification handler code here
}
// Функция инициализации диалогового окна "Информация по фильму"
BOOL CDlgFilm:: OnInitDialog (void)
{
CDialog:: OnInitDialog ();
CString s;
CDB db;
db. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=localhost");
BOOL check=db. IsOpen ();
CRecordset rec (&db);
rec. 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);
while (! rec. IsEOF ())
{
rec. GetFieldValue (short (0),s);
m_fname. SetWindowTextA (s);
rec. GetFieldValue (short (1),s);
m_genre. SetWindowTextA (s);
rec. GetFieldValue (short (2),s);
m_duration. SetWindowTextA (s);
rec. GetFieldValue (short (3),s);
m_rait. SetWindowTextA (s);
rec. GetFieldValue (short (4),s);
m_price. SetWindowTextA (s);
rec. MoveNext ();
}
rec. Close ();
return TRUE;
}
// Функция инициализации диалогового окна "Информация о Кинотеатре"
BOOL CDlgCinema:: OnInitDialog (void)
{
CDialog:: OnInitDialog ();
CString s;
CDB db;
db. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=localhost");
BOOL check=db. IsOpen ();
CRecordset rec (&db);
rec. 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);
while (! rec. IsEOF ())
{
rec. GetFieldValue (short (0),s);
m_cname. SetWindowTextA (s);
rec. GetFieldValue (short (1),s);
m_address. SetWindowTextA (s);
rec. GetFieldValue (short (2),s);
m_place. SetWindowTextA (s);
rec. GetFieldValue (short (3),s);
m_acoustic. SetWindowTextA (s);
rec. GetFieldValue (short (4),s);
m_format. SetWindowTextA (s);
rec. MoveNext ();
}
rec. Close ();
return TRUE;
}
// Функция инициализации диалогового окна "Список" с обработчиками функций списковых текстовых полей
BOOL CCfList:: OnInitDialog (void)
{
CDialog:: OnInitDialog ();
CString s;
CDB db;
db. Open ("localhost",FALSE,FALSE,"DRIVER={Oracle in XE}; UID=SYSTEM; PWD=1; SERVER=localhost");
BOOL check=db. IsOpen ();
CRecordset rec (&db);
rec. Open (CRecordset:: forwardOnly,"SELECT name FROM cf_obj WHERE object_type_id=1",CRecordset:: readOnly);
while (! rec. IsEOF ())
{
rec. GetFieldValue (short (0),s);
m_cinema. AddString (s);
rec. MoveNext ();
}
rec. Close ();
rec. Open (CRecordset:: forwardOnly,"SELECT name FROM cf_obj WHERE object_type_id=2",CRecordset:: readOnly);
while (! rec. IsEOF ())
{
rec. GetFieldValue (short (0),s);
m_film. AddString (s);
rec. MoveNext ();
}
rec. Close ();
return TRUE;
}
void CCfList:: OnLbnSelchangeList2 ()
{
m_film. GetText (m_film. GetCurSel (),m_FromList);
OnOK ();
// TODO: Add your control notification handler code here
}
void CCfList:: OnLbnSelchangeList1 ()
{
m_cinema. GetText (m_cinema. GetCurSel (),m_FromList);
OnOK ();
// TODO: Add your control notification handler code here
}
Результат работы программы:
Рисунок 1 - Главное меню программы
Рисунок 2 - Меню списка кинотеатров и фильмов в прокате
Рисунок 3 - Запрос по кинотеатру "Космос"
Рисунок 4 - Вывод информации по выбранному фильму
Рисунок 5 - Вывод информации по выбранному кинотеатру
Размещено на Allbest.ru
Подобные документы
- Разработка серверной части информационной системы для сопровождения процесса выдачи заработной платы
Построение диаграммы последовательности действий и диаграммы классов при автоматизации процесса выдачи заработной платы. Логическая и физическая реализация базы данных, заполнение таблиц и создание выборок. Мапирование реляционной модели в метамодель.
курсовая работа [1,6 M], добавлен 29.11.2011 - Разработка серверной части информационной системы для сопровождения процесса выдачи заработной платы
Построение use case диаграммы. Проектирование базы данных. Концептуальная модели 1-уровня (диаграмма последовательности действий). Мапирование реляционной модели в метамодель. Логическая реализация метамодели. Скрипты, заполнение таблиц, создание выборок.
курсовая работа [1,4 M], добавлен 28.12.2011 Логическая и физическая схема действующей компьютерной сети. Проблемы, решение которых актуально для предприятия. Базы данных задач и работ бизнес-процессов. Структура информационной системы. Проектирование подсистемы "Управление основным производством".
курсовая работа [4,8 M], добавлен 17.12.2011Анализ предметной области. Логическая и физическая модели информационной системы. Средства реализации диаграмм потоков данных. Заполнение форм ввода. Проверка регистрационных данных, работа с форумом. Требования к функционированию компонентов системы.
курсовая работа [2,3 M], добавлен 14.01.2018Анализ существующей методики воинского учета. Схема архитектуры и программная реализация разрабатываемого АРМ специалиста отдела мобилизационной работы и комплектования. Логическая структура реляционной базы данных. Результаты тестирования программы.
дипломная работа [1,4 M], добавлен 16.05.2013Задачи, функции и структура филиала университета. Оценка информационных потоков и UML-моделирование. Анализ структуры информационной системы и системы навигации. Проектирование базы данных, физическая реализация и тестирование информационной системы.
дипломная работа [6,0 M], добавлен 21.01.2012Создание информационной системы товарооборота на основе использования технологий баз данных кирпичного завода. Физическая модель базы данных. Проектирование БД в СУБД Microsoft SQL Server. Схема функциональной структуры программной системы. Запросы к БД.
курсовая работа [3,5 M], добавлен 05.03.2015Проектирование информационной системы бронирования билетов кассы аэропорта. Анализ информационных задач и круга пользователей системы. Составление реляционных отношений. Дополнительные ограничения целостности. Физическое проектирование базы данных.
курсовая работа [949,1 K], добавлен 28.03.2011Разработка программного обеспечения для автоматизации деятельности работников книжного магазина. Проектирование информационной системы с использованием базы данных Access. Методы хранения данных. Средства защиты данных от несанкционированного доступа.
контрольная работа [664,9 K], добавлен 13.06.2014Понятие реляционной модели данных, целостность ее сущности и ссылок. Основные этапы создания базы данных, связывание таблиц на схеме данных. Проектирование базы данных книжного каталога "Books" с помощью СУБД Microsoft Access и языка запросов SQL.
курсовая работа [838,9 K], добавлен 25.11.2010