Заболотников_Максим_9373_КурсоваяРабота_Кинотеатры
.pdfРисунок 8 После выбора кинотеатра и пункта "Посмотреть главную информацию".
Рисунок 96 После выбора пункта "Посмотреть репертуар"
2)Информация о сеансах и билетах на эти сеансы
Теперь, при нажатии на один из фильмов, покажется информация о
сеансах на этот фильм:
21
Рисунок 107 Информация о сеансах
При желании, можно посмотреть всю информацию о фильме. Для этого
необходимо нажать на кнопку "О фильме".
Рисунок 11 Отображение поставщиков.
3)Действия администратора
Если войти как администратор, можно выполнить три действия:
добавить информацию о новом кинотеатре (если построен новый кинотеатр),
снять какой-либо фильм с проката или же изменить репертуар кинотеатра.
22
Рисунок 12 Отображение реквизитов
Чтобы добавить сведения об открывшемся кинотеатре, нужно нажать кнопку "Добавить сведения о новом кинотеатре". Чтобы изменения вступили в силу, надо нажать на кружок у каждого пункта.
Рисунок 13 Заполнение информации о новом кинотеатре
Также администратор может снять какой-то фильм с проката:
23
Рисунок 14 Выбор фильма для снятия я проката
В случае изменения репертуара, администратор добавить информацию о новом фильме (чтобы изменения вступили в силу, надо нажать на кружок у каждого пункта):
Рисунок 15 Изменение репертуара кинотеатров
24
ПРИЛОЖЕНИЕ Б
ЛИСТИНГ ПРОГРАММНОГО КОДА
1. Код SQL-запросов:
1.1.Создание составленных отношений:
create table if not exists Cinemas( cinema_id int primary key, cinema_name text,
district char, adress text
);
create table if not exists Categories( category_n int primary key, capacity int
);
create table if not exists Cinema_Categ( bond_id int primary key,
cinema_id int references Cinemas(cinema_id), category_id int references Categories(category_n)
);
create table if not exists Titles( title_id int primary key, title_name text,
production text, director text, genre text
);
create table if not exists Playbill( playbill_id int primary key,
cinema_id int references Cinemas(cinema_id), title_id int references Titles(title_id)
);
create table if not exists Tiket_Prices( cost_id int primary key,
title_id int references Titles(title_id), category_n int references Categories(category_n), price int
);
create table if not exists Session( session_id int primary key,
playbill_id int references Playbill(playbill_id), cost_id int references Tiket_Prices(cost_id), free_places_n int,
session_date date
);
1.2.Запросы по разграничению прав доступа:
1) Администратор БД
create user admin with password '123456789';
grant select, update, insert, delete on Cinemas to admin; grant select, update, insert, delete on Categories to admin; grant select, update, insert, delete on Cinema_Categ to admin; grant select, update, insert, delete on Titles to admin;
grant select, update, insert, delete on Playbill to admin; grant select, update, insert, delete on Tiket_Prices to admin; grant select, update, insert, delete on Session to admin;
25
2) Менеджер
create user manager with password '666'; grant select, insert on Cinemas to manager;
grant select, insert on Categories to manager;
grant select, update, insert on Cinema_Categ to manager; grant select, insert on Titles to manager;
grant select, insert on Playbill to manager; grant select, insert on Tiket_Prices to manager; grant select, insert on Session to manager;
3) Работник справочной службы
create user worker with password '0000'; grant select on Cinemas to worker;
grant select on Categories to worker; grant select on Cinema_Categ to worker; grant select on Titles to worker;
grant select on Playbill to worker; grant select on Tiket_Prices to worker; grant select on Session to worker;
1.3.Запросы для отображения информации.
1) Вывод репертуара кинотеатра
select c.cinema_name, t.title_name from Cinemas c join Playbill p on c.cinema_id = p.cinema_id
join Titles t on p.title_id = t.title_id where c.cinema_name = 'РусьКино';
2) Вывод адреса и района кинотеатра
select cinema_name, district, adress from Cinemas where cinema_name = 'РусьКино';
3) Вывод числа свободных мест на данный сеанс
select c.cinema_name, t.title_name, s.session_date, s.free_places_n from Cinemas c
join Playbill p on c.cinema_id = p.cinema_id join Titles t on p.title_id = t.title_id
join Session s on p.playbill_id = s.playbill_id
where t.title_name = 'Люди Х' and c.cinema_name = 'Киномакс';
4) Цена билетов на данный сеанс
select price from Tiket_Prices tp
join Session s on s.cost_id = tp.cost_id where tp.category_n = (
select category_n from Cinema_Categ cc
join Cinemas c on cc.cinema_id = c.cinema_id where c.cinema_name = 'Великан-Парк'
)
26
and s.playbill_id = (
select playbill_id from Playbill p
join Cinemas c on p.cinema_id = c.cinema_id join Titles t on p.title_id = t.title_id
where t.title_name = 'Человек Паук' and c.cinema_name = 'Великан-Парк'
)
and s.session_date = '2021-02-07';
5) Жанр, производство и режиссёр данного фильма
select title_name, genre, production, director from Titles where title_name = 'Гарри Поттер: Орден Феникса';
6) Вместимость данного кинотеатра
select cin.cinema_name, c.capacity from Cinemas cin join Cinema_Categ cc on cin.cinema_id = cc.cinema_id join Categories c on c.category_n = cc.category_id where cin.cinema_name = 'Пик';
7) Открытие нового кинотеатра (для администратора)
insert into Cinemas(cinema_id, cinema_name, district, adress) values
(5, 'КиноХайп', 'Октябрьский р-н', 'Пр-кт Фегина, д.15');
8) Снятие фильма с проката (для администратора)
delete from Titles
where title_name = 'Люди Х';
9) Изменение репертуара кинотеатра (для администратора)
begin;
insert into Titles(title_id, title_name, production, director, genre) values
(4, 'Рождество на двоих', 'Feigco Entertainment', ' Пол Фиг', 'Драма');
insert into Playbill(playbill_id, cinema_id, title_id) values (5, 1, 4), (6, 2, 4), (7, 3, 4), (8, 4, 4);
insert into Tiket_Prices(cost_id, title_id, category_n, price) values
(2, 2, 1, 100), (5, 2, 2, 150);
insert into Session(session_id, playbill_id, cost_id, free_places_n, session_date) values
(5, 5, 5, 5000, '2021-02-13'), (6, 6, 2, 2000, '2021-02-14'), (7, 7, 5, 5000, '2021-02-15'), (8, 8, 2, 2000, '2021-02-16'), (17, 5, 5, 5000, '2021-02-13'), (18, 6, 2, 2000, '2021-02-14'), (19, 7, 5, 5000, '2021-02-15'),
27
(20, 8, 2, 2000, '2021-02-16'); commit;
2. SQL-запросы для отчётов и справок
2.1.Для справки о сеансах фильма в указанном кинотеатре
select s.session_date, s.free_places_n, s.session_id, t.title_name, tp.price from Tiket_Prices tp
join Session s on s.cost_id = tp.cost_id join Titles t on tp.title_id = t.title_id where tp.category_n = (
select cc.category_id from Cinema_Categ cc join Cinemas c on cc.cinema_id = c.cinema_id where c.cinema_name = 'Великан-Парк'
)
and s.playbill_id = (
select playbill_id from Playbill p
join Cinemas c on p.cinema_id = c.cinema_id join Titles t on p.title_id = t.title_id
where t.title_name = 'Человек Паук' and c.cinema_name = 'Великан-
Парк' );
2.2.SQL-запрос для отчета о прокате фильмов в районах города
select title_name, cinema_name, price from Titles t join Playbill p on t.title_id = p.title_id
join Cinemas c on p.cinema_id = c.cinema_id join Session s on p.playbill_id = s.playbill_id join Tiket_Prices tp on s.cost_id = tp.cost_id
where s.session_date = '2021-01-05' or s.session_date = '2021-01-07';
28