- •Аннотация.
- •Оглавление
- •Введение.
- •Цель курсовой работы.
- •Задание на выполнение курсовой работы.
- •Концептуальная модель данных.
- •Логическая структура данных.
- •Этапы реализации системы.
- •6.1. Запросы.
- •6.2. Индексы.
- •6.3. Роли.
- •6.4. Процедуры.
- •6.5. Триггеры.
- •Руководство пользователя-клиента.
- •Руководство инструктора.
- •Руководство администратора.
- •Список литературы
- •Листинг программ. Интерфейс для пользователя hikingtrips. Файл Form2.Cs
- •Файл Form1.Cs
- •Файл Form4.Cs
- •Файл Form3.Cs
- •Файл Form5.Cs
- •Файл Form6.Cs
- •Листинг программ. Интерфейс для инструктора hikingtripsinstructors. Файл Form1.Cs
- •Файл Form2.Cs
Этапы реализации системы.
Для наполнения базы данных использовались запросы по созданию таблиц и добавлению внутрь них каких-либо данных. Также для корректного функционирования системы были написаны триггеры и процедуры и спроектированы роли пользователей базы данных. Индексация полей в таблицах происходила из соображений того, что в будущем по этим полям планируется производить поиск и сортировку.
6.1. Запросы.
Запросы на создание таблиц:
CREATE TABLE costumers (last_name VARCHAR(50), first_name VARCHAR(20), middle_name VARCHAR(20), phone_number VARCHAR(11), email VARCHAR(50), date_of_birth DATE);
CREATE TABLE (last_name VARCHAR(50), first_name VARCHAR(20), middle_name VARCHAR(20), phone_number VARCHAR(11), email VARCHAR(50), seniority INT);
Запросы на добавление данных:
INSERT INTO `equipment` (`equipment_id`, `title`, `amount`) VALUES (NULL, 'Sunglasses', '6'), (NULL, 'First aid kit', '8');
|
Рис. 22. Результат работы запроса.
INSERT INTO `routes` (`route_id`, `title`, `duration_in_hours`, `point_of_departure`, `price`) VALUES (NULL, 'The magical paths of Kirzhach', '72', 'Sanino railway station', '5000'), (NULL, 'Kapeshnaya sotnya (Moscow region)', '72', 'Tugolesye platform', '5850');
|
Рис. 23. Результат работы запроса.
INSERT INTO `qualification-of-instructor` (`qualification_id`, `instructor`, `document`, `date_of_receipt`) VALUES ('5', '5', 'Hiking school \"The Merry Way\"', '2023-09-15');
|
Рис. 24. Результат работы запроса.
Удаляем людей младше 18 лет:
DELETE FROM costumers WHERE YEAR(date_of_birth) > 2005;
|
Рис. 25. Изначальная таблица.
|
Рис. 26. Полученная после выполнения запроса таблица.
Ищем маршруты, длительность которых меньше или равна 24 часам:
SELECT * FROM routes WHERE duration_in_hours <= 24
|
Рис. 27. Результат работы запроса.
Ищем имена и фамилии инструкторов, которые получили дипломы раньше 2022 года:
SELECT last_name, first_name FROM instructors JOIN `qualification-of-instructor` ON instructors.instructor_id = `qualification-of-instructor`.instructor WHERE YEAR(date_of_receipt) < 2022;
|
Рис. 28. Результат работы запроса.
Найти имя маршрута, у которых больше одного привала:
SELECT title FROM routes JOIN `route-halt` ON routes.route_id = `route-halt`.route GROUP BY title HAVING COUNT(`route-halt`.halt) > 1;
|
Рис. 29. Результат работы запроса.
Найти максимальное количество привалов на всех маршрутах:
SELECT MAX(halt_count) AS max_halts FROM ( SELECT `route-halt`.route, COUNT(`route-halt`.halt) AS halt_count FROM `route-halt` GROUP BY `route-halt`.route) AS route_halt_counts;
|
Рис. 30. Результат работы запроса.
Найти минимальное количество привалов на всех маршрутах:
SELECT MIN(halt_count) AS min_halts FROM (SELECT `route-halt`.route, COUNT(`route-halt`.halt) AS halt_count FROM `route-halt` GROUP BY `route-halt`.route) AS route_halt_counts;
|
Рис. 31. Результат работы запроса.
Средний возраст туристов:
SELECT ROUND(AVG(YEAR(CURDATE()) - YEAR(date_of_birth) - (DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(date_of_birth, '%m%d')))) AS average_age FROM costumers;
|
Рис. 32. Результат работы запроса.
Вывести название и цену самого дорогого и самого дешевого маршрута:
SELECT title, price FROM routes WHERE price = (SELECT MAX(price) FROM routes) OR price = (SELECT MIN(price) FROM routes);
|
Рис. 33. Результат работы запроса.
Найти людей, которые ходили в поход с Егоровой Аллой Альбертовной и в каком году это было:
SELECT DISTINCT YEAR(trip.date_of_begining), costumers.last_name, costumers.first_name, costumers.middle_name FROM trip
JOIN teams AS tm1 ON trip.trip_id = tm1.trip
JOIN costumers ON costumers.user_id = tm1.user
WHERE
EXISTS (
SELECT 1
FROM costumers AS c
JOIN teams AS tm3 ON c.user_id = tm3.user
WHERE c.last_name = 'Egorova'
AND c.first_name = 'Alla'
AND c.middle_name = 'Albertovna'
AND c.user_id = tm3.user
)
AND NOT (costumers.last_name = 'Egorova'
AND costumers.first_name = 'Alla'
AND costumers.middle_name = 'Albertovna')
ORDER BY YEAR(trip.date_of_begining);
|
Рис. 34. Результат работы запроса.
Найти когда, куда и с каким инструктором ходила Егорова Алла Альбертовна:
SELECT DISTINCT routes.title, trip.date_of_begining, trip.date_of_ending, instructors.last_name, instructors.first_name, instructors.middle_name FROM trip
JOIN teams AS tm1 ON trip.trip_id = tm1.trip
JOIN instructors ON instructors.instructor_id = tm1.instructor
JOIN routes ON routes.route_id = trip.route
WHERE
EXISTS (
SELECT 1
FROM costumers AS c
JOIN teams AS tm3 ON c.user_id = tm3.user
WHERE c.last_name = 'Egorova'
AND c.first_name = 'Alla'
AND c.middle_name = 'Albertovna'
AND c.user_id = tm3.user
);
|
Рис. 35. Результат работы запроса.
Вывести название маршрутов, на который сходило больше 10 человек в июне любого года и длительность которого 72 часа (3 дня):
SELECT routes.title FROM routes
JOIN trip AS tp ON routes.route_id = tp.route
JOIN teams AS tm ON tm.trip = tp.trip_id
WHERE routes.duration_in_hours = 72 AND MONTH(tp.date_of_begining)=6
GROUP BY routes.title
HAVING COUNT(tm.user) >= 10;
|
Рис. 36. Результат работы запроса.
Вывести данные людей, которые ходили на маршрут «The road to the Lavra»:
SELECT
c.last_name,
c.first_name,
c.middle_name,
c.phone_number
FROM
costumers AS c
JOIN
teams AS tm ON c.user_id = tm.user
JOIN
trip AS tp ON tm.trip = tp.trip_id
JOIN
routes AS r ON tp.route = r.route_id
WHERE
r.title = "The road to the Lavra";
|
Рис. 37. Результат работы запроса.
