Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 / курсовая.docx
Скачиваний:
7
Добавлен:
16.05.2025
Размер:
2.22 Mб
Скачать

5 Анализ разрешений и запретов на операции с табличными данными для различных пользователей

В данной ИС будут присутствовать следующие пользователи:

  • менеджер по организации рейсов заключает договоры с авиакомпаниями;

  • кассир принимает наличные деньги и оформляет финансовые

документы;

  • системный администратор имеет полное право доступа к БД, отвечает за

её работу. Менеджер по организации рейсов:

  • Может просматривать данные в таблицах Рейс, Билет, Самолет;

  • Может обновлять данные в таблице Авиакомпания;

  • Не может удалять записи ни в одной из таблиц;

  • Не может добавлять записи ни в одной из таблиц.

Кассир:

  • Может просматривать данные в таблицах Билет, Авиакомпания, Рейс,

  • Может добавлять новые записи в таблицу Билет

  • Может обновлять данные в таблице Билет

  • Не может удалять записи ни в одной из таблиц

Админ:

  • Может просматривать, добавлять, обновлять и удалять записи во всех таблицах

Были созданы 3 пользователя: менеджер обслуживания рейсов (mor), кассир (cashier) и администратор БД (adminbd). Создание пользователей и их доступов представлено в листинге 12. Результат создания пользователей представлен на рисунке 13.

Листинг 12 – Создание пользователей

create user 'mor' identified by 'mor1';

grant select on `рейс` to 'mor';

grant select on `билет` to 'mor';

grant select on `самолет` to 'mor';

grant update on `авиакомпания` to 'mor';

create user 'cashier' identified by 'cashier1';

grant select on `билет` to 'cashier';

grant select on `авиакомпания` to 'cashier';

grant select on `рейс` to 'cashier';

grant update on `билет` to 'cashier';

grant insert on `билет` to 'cashier';

create user 'Adminbd' identified by 'adminbd1';

grant all privileges on *.* to 'Adminbd';

Рисунок 12 - Список пользователей и их привилегий

6 Проектирование пользовательского интерфейса

6.1 Реализация всех запросов через вызовы хранимых процедур

Все запросы были реализованы через вызовы хранимых процедур.

Реализация запроса 1, вывод информации о о пассажирах по данному вылету, в процедуру get_passenger_info представлена в листинге 13. Пример вызова процедуры представлен на рисунке 14.

Листинг 13 – Реализация запроса 1 в процедуру get_passenger_info

DELIMITER //

CREATE PROCEDURE get_passenger_info()

BEGIN

SELECT `пассажиры`.`№ Пассажира`, `пассажиры`.`Ф.И.О.`

FROM `пассажиры`

JOIN `билет` ON `пассажиры`.`№ Пассажира` = `билет`.`№ Пассажира`

WHERE `билет`.`№ Рейса` = 2;

END //

DELIMITER ;

Рисунок 13 - Пример вызова процедуры get_passenger_info

Реализация запроса 2, вывод списка самолетов по годам выпуска в заданном интервале конкретной авиакомпании, в процедуру get_airplane_info представлена в листинге 14. Пример вызова процедуры представлен на рисунке 15.

Листинг 14 – Реализация запроса 2 в процедуру get_airplane_info

DELIMITER //

CREATE PROCEDURE get_airplane_info()

BEGIN

SELECT `самолет`.`Тип самолета`, `самолет`.`Год выпуска`

FROM `самолет`

JOIN `авиакомпания` ON `самолет`.`№ Самолета` = `авиакомпания`.`№ самолета`

WHERE `авиакомпания`.`Название авиакомпании` = 'Нарутотревел'

AND `самолет`.`Год выпуска` BETWEEN 2011 AND 2020;

END //

DELIMITER ;

Рисунок 14 - Пример вызова процедуры get_airplane_info

Реализация запроса 3, вывод списка экипажа на данный рейс, в процедуру get_crew_info представлена в листинге 15. Пример вызова процедур представлены на рисунке 16.

Листинг 15 – Реализация запроса 3 в процедуру get_crew_info

DELIMITER //

CREATE PROCEDURE get_crew_info()

BEGIN

SELECT `сотрудники`.`№ Экипажа`, `сотрудники`.`Ф.И.О.`, `сотрудники`.`Должность`

FROM `сотрудники`

JOIN `рейс` ON `сотрудники`.`№ Экипажа` = `рейс`.`№ Экипажа`

WHERE `рейс`.`№ Рейс` = 1;

END //

DELIMITER ;

Рисунок 16 - Пример вызова процедуры get_crew_info

Реализация запроса 4, вывод проданных билетов по каждой авиакомпании за определенный период, в процедуру get_airline_ticket_count1 представлена в листинге 16. Пример вызова процедур представлены на рисунке 17.

Листинг 16 – Реализация запроса 3 в процедуру get_airline_ticket_count1

DELIMITER //

CREATE PROCEDURE get_airline_ticket_count1()

BEGIN

SELECT `авиакомпания`.`Название авиакомпании`, COUNT(`билет`.`№ Билет`) AS `Количество билетов`

FROM `билет`

JOIN `рейс` ON `билет`.`№ Рейса` = `рейс`.`№ Рейс`

JOIN `авиакомпания` ON `рейс`.`№ авиакомпании` = `авиакомпания`.`№ Авиакомпании`

WHERE `билет`.`Дата приобретения` BETWEEN '2022-01-05' AND '2022-10-05'

GROUP BY `авиакомпания`.`Название авиакомпании`;

END //

DELIMITER ;

Рисунок 15 - Пример вызова процедуры get_airline_ticket_count1

Реализация запроса 5, вывод списка забронированных мест на пассажира, в процедуру get_booked_seat_info представлена в листинге 17. Пример вызова процедуры представлен на рисунке 18.

Листинг 17 – Реализация запроса 5 в процедуру get_booked_seat_info

DELIMITER //

CREATE PROCEDURE get_booked_seat_info()

BEGIN

SELECT `билет`.`№ Места`, `билет`.`Дата бронирования`, `места`.`Класс`

FROM `билет`

JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`

WHERE `билет`.`Дата бронирования` IS NOT NULL;

END //

DELIMITER ;

Рисунок 16 - Пример вызова процедуры get_booked_seat_info

Реализация запроса 6, вывод информации о рейсах в данный пункт назначения, в процедуру get_flight_to_tver представлена в листинге 18. Пример вызова процедур представлены на рисунке 19.

Листинг 18 – Реализация запроса 6 в процедуру get_flight_to_tver

DELIMITER //

CREATE PROCEDURE get_flight_to_tver()

BEGIN

SELECT * FROM рейс WHERE `Пункт прибытия` = 'Тверь';

END //

DELIMITER ;

Рисунок 17 - Пример вызова процедуры get_flight_to_tver

Реализация запроса 7, вывод информации о свободных местах на данный рейс и дату, в процедуру get_tickets_purchased_between_dates представлена в листинге 19. Примеры вызова процедуры представлены на рисунке 20.

Листинг 19 – Реализация запроса 7 в процедуру get_tickets_purchased_between_dates

DELIMITER //

CREATE PROCEDURE get_tickets_purchased_between_dates()

BEGIN

SELECT *

FROM `билет`

WHERE `Дата приобретения` BETWEEN '2022-10-05' AND '2022-10-12'

AND `№ Рейса` IN (2, 4, 10);

END //

DELIMITER ;

Рисунок 20 - Пример вызова процедуры get_tickets_purchased_between_dates

Реализация запроса 8, выводит информацию о средней стоимости билетов бизнес класса, в процедуру get_avg_business_class_ticket_price представлена в листинге 20. Пример вызова процедуры представлен на рисунке 21.

Листинг 20 – Реализация запроса 8 в процедуру get_avg_business_class_ticket_price

DELIMITER //

CREATE PROCEDURE get_avg_business_class_ticket_price()

BEGIN

SELECT AVG(`Стоимость`) AS `Средняя стоимость билета бизнес класса`

FROM `билет`

JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`

WHERE `места`.`Класс` = 'бизнес';

END //

DELIMITER ;

Рисунок 21 - Пример вызова процедуры get_avg_business_class_ticket_price

Реализация запроса 9, выводит информацию о том какой экипаж чаще обслуживает рейсы, в процедуру get_crew_service_frequency представлена в листинге 21. Пример вызова процедуры представлен на рисунке 22.

Листинг 21 – Реализация запроса 9 в процедуру get_crew_service_frequency

DELIMITER //

CREATE PROCEDURE get_crew_service_frequency()

BEGIN

SELECT `экипаж`.`№ Экипажа`, `экипаж`.`Название`, COUNT(`рейс`.`№ Экипажа`) AS `Частота обслуживания`

FROM `рейс`

JOIN `экипаж` ON `рейс`.`№ Экипажа` = `экипаж`.`№ Экипажа`

GROUP BY `экипаж`.`№ Экипажа`, `экипаж`.`Название`

ORDER BY COUNT(`рейс`.`№ Экипажа`) DESC;

END //

DELIMITER ;

Рисунок 22 - Пример вызова процедуры get_crew_service_frequency

Реализация запроса 10, выводит список с Ф.И.О. пассажиров, номером места, классом и расположением на определенный рейс для удобства сотрудников, в процедуру get_passenger_seat_info представлена в листинге 22. Пример вызова процедуры представлен на рисунке 23.

Листинг 22 – Реализация запроса 10 в процедуру get_passenger_seat_info

DELIMITER //

CREATE PROCEDURE get_passenger_seat_info()

BEGIN

SELECT `билет`.`№ Места`, `места`.`Класс`, `места`.`Расположение`, `пассажиры`.`Ф.И.О.`

FROM `билет`

JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`

JOIN `пассажиры` ON `билет`.`№ Пассажира` = `пассажиры`.`№ Пассажира`

WHERE `билет`.`№ Рейса` = 4;

END //

DELIMITER ;

Рисунок 18 - Пример вызова процедуры get_passenger_seat_info

Соседние файлы в папке 2