
5сем / lab7_database
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Ассистент |
|
|
|
Б.К.Акопян |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №7 |
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ |
по курсу: БАЗЫ ДАННЫХ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4016 |
|
|
|
М.О. Жовтяк |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2022
Цель работы
Программная реализация пользовательских функций на сервере.
Вариант работы
Вариант 14.
Библиотека в Хоббитонии есть библиотека «Башня Саурумана». Вы являетесь ее руководителем. Библиотека зарабатывает деньги, выдавая напрокат некоторые книги, имеющиеся в небольшом количестве экземпляров. Одной из задач разрабатываемой ИС является отслеживание финансовых показателей работы библиотеки. У каждой книги, выдаваемой в прокат, есть название, автор, жанр. В зависимости от ценности книги Вы определили для каждой из них залоговую стоимость (сумма, вносимая клиентом при взятии книги напрокат) и стоимость проката (сумма, которую клиент платит при возврате книги, получая назад залог). В библиотеку обращаются читатели. Все читатели регистрируются в картотеке, указывая свои персональные данные. Каждый читатель может обращаться в библиотеку несколько раз. Все обращения читателей фиксируются, при этом по каждому факту выдачи книги запоминаются дата выдачи и ожидаемая дата возврата. Стоимость проката книги должна зависеть не только от самой книги, но и от срока ее проката. Кроме того, необходимо добавить систему штрафов за вред, нанесенный книге и систему скидок для некоторых категорий читателей. Произведения авторов, составляющие библиотечный фонд, также можно разделить на различные категории, характеризующиеся собственным набором атрибутов: учебники, повести, романы, статьи, стихи, диссертации, рефераты, тезисы докладов и т.д. Сотрудники библиотеки, работающие в различных залах различных библиотек, ведут учет читателей, а также учет размещения и выдачи литературы.
Ход работы
На рисунке 1 представлена схема данных БД согласно индивидуальному варианту.
Рисунок 1 – Схема данных БД
Создается 1-я функция с операторами ветвления в MySQL c определенной задачей. Задача заключается в определении количества опозданий определенным читателем сдачи книг. Если опозданий больше 1, то пользователь вносится в черный список, иначе можно выдать книгу. Входные параметры представлены в таблице 1.
Таблица 1
Входные параметры функции
-
Название
Тип данных
Комментарий
indexx
INT
Индекс проверяемого пользователя
Функция принимает входной параметр индекса пользователя и считает количество опозданий. В условии проверяется, сколько опозданий и соответственно на выходе функции информация о том, можно ли выдать книгу.
Результаты выполнения функции представлены на рисунках 2-4.
Рисунок 2 – Пример плохого читателя
Рисунок 3 – Пример хорошего читателя
Рисунок
4 – Журнал истории выполнения функции
Создается 2-я функция с циклом в MySQL c определенной задачей. Задача заключается в определении процента успешных продаж. Входные параметры представлены в таблице 2.
Таблица 2
Входные параметры функции
-
Название
Тип данных
Комментарий
summa
INT
Порог успешной продажи
Функция принимает входной параметр порога успешной продажи. Через цикл итерируются все полученные суммы обращений, где определяется, сколько было выполнено успешных продаж. На выходе показывается процент успешных продаж от всех продаж.
Результаты выполнения функции представлены на рисунках 5-7.
Рисунок 5 – Процент продаж при высоком пороге
Рисунок 6 – Процент продаж при низком пороге
Рисунок 7 – Журнал истории выполнения функции
Вывод
В ходе работы я научился создавать пользовательские функции на сервере с помощью языка MySQL. Я закрепил знания об основных принципах программирования на этом языке, а именно: переменные, условия, циклы, функции. В итоге мной были созданы функции, одна из которых вычисляет безответственных читателей, а другая считает процент успешных продаж библиотеки.
В ходе работы проблем не возникло.
Приложение А
DROP FUNCTION IF EXISTS checking;
DELIMITER //
CREATE FUNCTION checking(indexx int)
returns VARCHAR(150) DETERMINISTIC
begin
SET @message = 'Всего пропусков ';
SET @count = (SELECT SUM(datediff(return_day, return_day_expected)) FROM my_library.appeals WHERE id_reader = indexx);
case
when @count > 1 then set @message = (select concat(@message , @count, ', внесен в черный список'));
when @count < 2 then set @message = (select concat(@message , @count, ', книгу выдать можно'));
end case;
return @message;
end; //
select checking(6);
Приложение Б
DROP FUNCTION IF EXISTS sales;
DELIMITER //
CREATE FUNCTION sales(summa int)
returns VARCHAR(150) DETERMINISTIC
begin
SET @message = 'Процент успешных продаж ';
SET @cikl = (SELECT MAX(id_appeal) FROM my_library.appeals);
SET @count = 0;
WHILE @cikl > 0 DO
SET @total = (SELECT (total) from my_library.appeals where id_appeal = @cikl);
CASE
WHEN @total > summa THEN set @count = @count + 1;
else begin end;
END case;
set @cikl = @cikl -1;
END WHILE;
set @procent = ROUND(@count/(SELECT MAX(id_appeal) FROM my_library.appeals)*100);
SET @message = (select concat(@message , @procent, '%'));
return @message;
end; // select sales(150);
Список использованных источников
Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом» - Аграновский А.В., В.В. Боженко, Е.Л. Турнецкая, 2022 г.