Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
3
Добавлен:
11.04.2025
Размер:
157.73 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Ассистент

Б.К.Акопян

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №7

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ

по курсу: БАЗЫ ДАННЫХ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ гр. №

4116

подпись, дата

инициалы, фамилия

Санкт-Петербург 2023

Цель работы: программная реализация пользовательских функций на сервере.

Вариант 21.

Организация спортивного мероприятия

В Гуапландии любят спорт. Спортивная инфраструктура страны представлена спортивными сооружениями различного типа: спортивные залы, манежи, стадионы, корты и т.д. Каждая из категорий спортивных сооружений обладает атрибутами, специфичными только для нее: стадион характеризуется вместимостью, корт – типом покрытия. Гуапчане-спортсмены под руководством тренеров занимаются отдельными видами спорта, при этом один и тот же спортсмен может заниматься несколькими видами спорта, и в рамках одного и того же вида спорта может тренироваться у нескольких тренеров. Все спортсмены объединяются в спортивные клубы, при этом каждый из них может выступать только за один клуб. Организаторы соревнований проводят состязания по отдельным видам спорта на спортивных сооружениях города. По результатам участия спортсменов в соревнованиях производится награждение.

Ход работы:

Модель данных из прошлой лабораторной работы открыта в формате .mwb (рисунок 1)

Рисунок 1- модель данных

Реализована хранимая функция athlete_training_time, которая принимает на вход код спортсмена и по времени из столбца «дата» (таблица «тренировки») выводит в какую часть дня у него тренировка: «раннее утро», «дневное время», «вечер». Переменная result является глобальной. Training_time хранит время тренировки, для определения времени дня используются условные операторы (рисунок 4,5).

Рисунок 2- таблица «соревнования»

Рисунок 3- таблица «спортсмены»

Листинг. Функция определения времени тренировки спортсмена

DELIMITER //

CREATE FUNCTION athlete_training_time( код_спортсмена INT) RETURNS VARCHAR(255) DETERMINISTIC

BEGIN

DECLARE training_time TIME;

SELECT TIME(т.дата) INTO training_time

FROM тренировки AS т

WHERE т.код_спортсмена = код_спортсмена

ORDER BY т.дата

LIMIT 1;

IF training_time > '08:00:00' AND training_time < '12:00:00' THEN

SET @result = 'Раннее утро';

ELSEIF training_time >= '12:00:00' AND training_time < '16:00:00' THEN

SET @result = 'Дневное время';

ELSE

SET @result = 'Вечер';

END IF;

RETURN @result;

END;

//

DELIMITER ;

SELECT athlete_training_time(1);

Рисунок 4- выполнение функции athlete_training_time для спортсмена с кодом 1

Рисунок 5- выполнение функции athlete_training_time для спортсмена с кодом 3

Для реализации следующей хранимой функции, в таблицу «соревнования» добавлены новые записи (рисунок 6).

Рисунок 6- таблица «соревнования»

Функция Competition_Date выводит информацию о соревнованиях, у которых дата проведения меньше текущей даты. С помощью условия cur, выбираются данные из таблицы. Переменная done используется для отслеживания завершения цикла. FETCH cur сохраняет данные, выбранные курсором в переменные. Если done становится true, значит записей больше нет, и цикл завершается. CONCAT объединяет строки из разных записей.

Листинг. Функция поиска прошедшего соревнования

DELIMITER //

CREATE FUNCTION Competition_Date()

RETURNS VARCHAR(1000)

DETERMINISTIC

BEGIN

DECLARE код INT;

DECLARE дата DATE;

DECLARE result VARCHAR(1000) DEFAULT '';

DECLARE done INT DEFAULT FALSE;

DECLARE cur CURSOR FOR

SELECT код_соревнования, дата_проведения

FROM соревнования

WHERE дата_проведения < CURDATE()

ORDER BY дата_проведения;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP

FETCH cur INTO код, дата;

IF done THEN

LEAVE read_loop;

END IF;

SET result = CONCAT(result, 'Код соревнования: ', код, ', Дата проведения: ', дата, '; ');

END LOOP;

CLOSE cur;

SET @global_result = result;

RETURN @global_result;

END;

//

DELIMITER ;

SELECT Competition_Date();

Рисунок 7- выполнение функции Competition_Date

Для просмотра списка хранимых функций БД, выполнены команды USE и SHOW FUNCTION STATUS (рисунок 8)

Рисунок 8- вывод всех хранимых функций БД

Рисунок 9- фрагмент списка хранимых функций БД

Вывод: реализованы две хранимые функции: athlete_training_time и Competition_Date. Athlete_training_time выводит в какое время дня у спортсмена тренировка, competition_Date выводит информацию о соревнованиях, которые уже прошли.

Список используемых источников:

1. A.В. Аграновский, В.В. Боженко, Е.Л. Турнецкая. - Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом»‒ СПб.: ГУАП, 2022

2. Руководство по MySQL: https://metanit.com/sql/mysql.

Соседние файлы в папке БД 3 курс осень