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

5сем / lab6_database

.docx
Скачиваний:
2
Добавлен:
27.08.2024
Размер:
162.91 Кб
Скачать

ГУАП

КАФЕДРА № 41

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

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

Ассистент

Б.К.Акопян

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

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

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

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

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ХРАНИМЫХ ПРОЦЕДУР

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

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

СТУДЕНТ ГР. №

4016

М.О. Жовтяк

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

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

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

  1. Цель работы

Программная реализация хранимых процедур на сервере.

  1. Вариант работы

Вариант 14.

Библиотека в Хоббитонии есть библиотека «Башня Саурумана». Вы являетесь ее руководителем. Библиотека зарабатывает деньги, выдавая напрокат некоторые книги, имеющиеся в небольшом количестве экземпляров. Одной из задач разрабатываемой ИС является отслеживание финансовых показателей работы библиотеки. У каждой книги, выдаваемой в прокат, есть название, автор, жанр. В зависимости от ценности книги Вы определили для каждой из них залоговую стоимость (сумма, вносимая клиентом при взятии книги напрокат) и стоимость проката (сумма, которую клиент платит при возврате книги, получая назад залог). В библиотеку обращаются читатели. Все читатели регистрируются в картотеке, указывая свои персональные данные. Каждый читатель может обращаться в библиотеку несколько раз. Все обращения читателей фиксируются, при этом по каждому факту выдачи книги запоминаются дата выдачи и ожидаемая дата возврата. Стоимость проката книги должна зависеть не только от самой книги, но и от срока ее проката. Кроме того, необходимо добавить систему штрафов за вред, нанесенный книге и систему скидок для некоторых категорий читателей. Произведения авторов, составляющие библиотечный фонд, также можно разделить на различные категории, характеризующиеся собственным набором атрибутов: учебники, повести, романы, статьи, стихи, диссертации, рефераты, тезисы докладов и т.д. Сотрудники библиотеки, работающие в различных залах различных библиотек, ведут учет читателей, а также учет размещения и выдачи литературы.

  1. Ход работы

На рисунке 1 представлена схема данных БД согласно индивидуальному варианту.

Рисунок 1 – Схема данных БД

Создается процедура в MySQL c определенной задачей. Задача заключается в заполнения столбца total таблицы appeals(обращения). В этом столбце заполняется итоговая стоимость аренды книги, которая рассчитывается исходя из депозита, суточной аренды, количества дней пользования книгой, скидки. При этом скидка распространяется только на оговоренный ранее срок. Входные параметры представлены в таблице 1.

Таблица 1

Входные параметры процедуры

Название

Тип данных

Комментарий

full_fill

VARCHAR(1)

y/n – ответ на вопрос, нужно ли полное заполнение

id1

INT

Номер обращения при ответе “n”, не учитывается при “y”

Процедура содержит условие y/n. При выборе “y” выполняется автоматический подсчет каждой строки столбца total в рамках цикла. При выборе “n” выполняется подсчет определенного обращения, выбранного в качестве второго параметра. Блок-схема процедуры представлена на рисунке 2, листинг представлен в Приложении.

Рисунок 2 – Блок-схема процедуры

Результаты выполнения процедуры представлены на рисунках 3-6.

Рисунок 3 – Таблица appeals до выполнения процедуры

Рисунок 4 – Заполненная позиция по номеру обращения

Рисунок 5 – Полное заполнение столбца total

Рисунок 6 – Журнал истории выполнения процедуры

Прикладное назначение процедуры очень удобное: администратор библиотеки больше может не считать количество дней аренды каждого обращения, и нет необходимости искать конкретный номер депозита и аренды за книгу, скидку читателя для подсчета итоговой стоимости аренды. Также данная процедура полезна тем, что можно узнать стоимость аренды не только определенной позиции, но и автоматическом заполнении всего столбца, что экономит много времени.

  1. Вывод

В ходе работы я научился создавать процедуры на сервере с помощью языка MySQL. Я познакомился с основными принципами программирования на этом языке, а именно: переменные, условия, циклы, функции. В итоге мной была создана процедура, которая автоматически подсчитывает итоговую стоимость аренды книги.

В ходе работы проблем не возникло.

ПРИЛОЖЕНИЕ

DROP PROCEDURE IF EXISTS filling_total;

DELIMITER //

CREATE PROCEDURE filling_total(full_fill varchar(1), id1 int)

BEGIN

IF full_fill = 'y' THEN

SET @cikl = (SELECT MAX(id_appeal) FROM my_library.appeals);

SET @summa = 0;

WHILE @cikl > 0 DO

SET @summa = (SELECT (datediff(my_library.appeals.return_day, my_library.appeals.issue_date)

* my_library.books.coast_per_day + my_library.books.deposit

- datediff(my_library.appeals.return_day_expected, my_library.appeals.issue_date)*my_library.readers.discount_reader/100)

FROM my_library.appeals, my_library.books, my_library.readers

WHERE my_library.appeals.id_appeal = @cikl

and my_library.appeals.id_book = my_library.books.id_book

and my_library.appeals.id_reader = my_library.readers.id_reader);

UPDATE my_library.appeals

SET total = @summa

WHERE my_library.appeals.id_appeal = @cikl;

SET @cikl = @cikl - 1;

END WHILE;

END IF;

IF full_fill = 'n' THEN

SET @summa = (SELECT (datediff(my_library.appeals.return_day, my_library.appeals.issue_date)

* my_library.books.coast_per_day + my_library.books.deposit

- datediff(my_library.appeals.return_day_expected, my_library.appeals.issue_date)*my_library.readers.discount_reader/100)

FROM my_library.appeals, my_library.books, my_library.readers

WHERE my_library.appeals.id_appeal = id1

and my_library.appeals.id_book = my_library.books.id_book

and my_library.appeals.id_reader = my_library.readers.id_reader);

UPDATE my_library.appeals

SET total = @summa

WHERE my_library.appeals.id_appeal = id1;

END IF;

SELECT * FROM my_library.appeals;

END

//

CALL filling_total('y', 2);

Список использованных источников

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

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