Файл: Курсовая работа по дисциплине Базы и хранилища данных Разработка базы данных для предметной области Библиотека.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 41

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Чтобы получить отчет, нужно ввести входные данные в поле, если они предусмотрены, и нажать кнопку «выгрузить».



Рисунок 14. Отчет А
Отчёт с выгрузкой количества выдач по месяцам в заданном году:



Рисунок 15. Отчет B
Самые старые книги по читальным залам:



Рисунок 16. Отчет C
Зал, в котором есть книги только выбранных пользователем типов (ни больше, ни меньше):



Рисунок 17. Отчет D
Пять самых популярных книг:

Код всех процедур и самого веб-приложения приведен в приложениях 1 и 2.

Заключение


База данных - очень мощный инструмент, позволяющий управлять огромным количеством информации, использовать её и анализировать.

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

Во время выполнения курсовой работы мною были освоены методы анализа предметной области и разные виды проектирования базы данных (инфологическое, даталогическое, физическое), был получен полезный опыт разработки приложения для работы с данными.

Данная курсовая работа позволила автоматизировать учет книг и выдачу книг читателям в библиотеке.

БД позволяет удобно управлять списками читателей и книг, делить книги на категории с точки зрения жанра и с точки зрения их физического расположения в библиотеке, а так же формировать различные отчеты, которые будут полезны при инвентаризациях и аудитах.


Библиография


Основная литература

  1. И.П. Карпова. Базы данных: Учебное пособие. СПб: Питер, 2013г. – 240с.





  1. М.П. Малыхина. Базы данных: основы, проектирование, использование. 2-е изд. СПб: БХВ-Петербург, 2007.




  1. В.В. Кирилов, Г.Ю. Громов. Введение в реляционные базы данных. – СПб.:БХВ-Петербург, 2009г. – 464с.


Дополнительная литература


  1. Т. Конноли, К. Бегг. Базы данных: проектирование, реализация и сопровождение. Теория и практика. Вильямс, 2003г – 1440с.

  2. Г. Хансен, Дж. Хансен. Базы данных: разработка и управление. М: Бином, 1999г. – 704с.




  1. Г. Гарсиа-Молина, Дж. Ульман, Дж. Уидом. Системы баз данных. Полный курс. Вильямс, 2003г. – 1088с.


Интернет-источники


        1. Справочник по HTML и CSS: https://www.w3.org/Style/Examples/011/firstcss.ru.html

        2. Документация MySQL: https://dev.mysql.com/doc/refman/8.0/en/

        3. Документация PHP: https://www.php.net/manual/ru/index.php


Приложение 1. SQL скрипты


Создание БД:

CREATE DATABASE `library`;
Таблица readers:

CREATE TABLE `readers` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

`phone` varchar(50) NOT NULL,

`birthday` varchar(10) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;
Таблица types:

CREATE TABLE `types` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;
Таблица readrooms:

CREATE TABLE `readrooms` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;
Таблица slips:

CREATE TABLE `slips` (

`id` int NOT NULL AUTO_INCREMENT,

`reader` int NOT NULL,

`timefrom` varchar(10) NOT NULL,

`timeto` varchar(10) NOT NULL,

PRIMARY KEY (`id`),

KEY `reader_idx` (`reader`),

CONSTRAINT `reader` FOREIGN KEY (`reader`) REFERENCES `readers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB;
Таблица books:

CREATE TABLE `books` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

`author` varchar(50) NOT NULL,

`year` year NOT NULL,

`pubplace` varchar(200) NOT NULL,

`pubhouse` varchar(200) NOT NULL,

`type` int NOT NULL,

`readroom` int NOT NULL,

`pages` int NOT NULL,

PRIMARY KEY (`id`),

KEY `type` (`type`),

KEY `readroom` (`readroom`),

CONSTRAINT `books_ibfk_1` FOREIGN KEY (`type`) REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `books_ibfk_2` FOREIGN KEY (`readroom`) REFERENCES `readrooms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB;
Таблица slips_info:

CREATE TABLE `slips_info` (

`id` int NOT NULL AUTO_INCREMENT,

`slip` int NOT NULL,

`book` int NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `books_in_slip` (`slip`,`book`),

KEY `book` (`book`),

CONSTRAINT `book` FOREIGN KEY (`book`) REFERENCES `books` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `slip` FOREIGN KEY (`slip`) REFERENCES `slips` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB;
Процедура добавления читателя:

DELIMITER $$

CREATE PROCEDURE `add_reader`(name varchar(50), phone varchar(14), birthday date)

begin

select phone regexp '\\+7\\([:digit:]{3}\\)[:digit:]{7}$' into @phone_in_right_format;

if @phone_in_right_format = 0 then select 'error' as result, 'введите телефон в формате +7(XXX)XXXXXXX' as detail;

else

insert into readers values (default, name, phone, date_format(birthday, '%d/%m/%Y'));

end if;

end$$

DELIMITER ;
Процедура изменения читателя:



DELIMITER $$

CREATE PROCEDURE `edit_reader`(edit_id int, new_name varchar(50), new_phone varchar(14), new_birthday date)

begin

select new_phone regexp '\\+7\\([:digit:]{3}\\)[:digit:]{7}$' into @phone_in_right_format;

if @phone_in_right_format = 0 then select 'error' as result, 'введите телефон в формате +7(XXX)XXXXXXX' as detail;

else

update readers r set `r`.`name` = new_name, `r`.`phone` = new_phone, `r`.`birthday` = date_format(new_birthday, '%d/%m/%Y') where `r`.`id` = edit_id;

end if;

end$$

DELIMITER ;
Процедура добавления заявки:

DELIMITER $$

CREATE PROCEDURE `add_slip`(reader int, timefrom date, timeto date)

begin

if timefrom > timeto then select 'error' as result, 'дата выдачи позднее даты возврата' as detail;

else

insert into slips values (default, reader, date_format(timefrom, '%d/%m/%Y'), date_format(timeto, '%d/%m/%Y'));

select id from slips order by 1 desc;

end if;

end$$

DELIMITER ;
Процедура изменения деталей заявки:

DELIMITER $$

CREATE PROCEDURE `add_slip_nfo`(slip int, book int)

begin

select count(*) from slips_info si where si.slip = slip into @books_in_slip;
if @books_in_slip >= 5 then select 'error' as result, 'одному читателю можно выдать не более 5 книг' as detail;

else

insert into slips_info values (default, slip, book);

select 'success' as result, 'книга внесена в читательское требование' as detail;

end if;

end$$

DELIMITER ;
Запросы для отчетов используются в коде, поэтому содержат переменные, значения которых могут менять результат.

Отчет А:

select month(str_to_date(s.timefrom, '%d/%m/%Y')) as month, count(*) as count from slips s

join slips_info si on(si.slip = s.id)

join readers r on(s.reader = r.id)

join books b on(si.book = b.id)

where year(str_to_date(s.timefrom, '%d/%m/%Y')) = $year

group by month order by 1

где $year вводится пользователем.
Отчет В:

select rr.name as readroom, b.author, b.name as book, year(now())-(year) as age from books b

join readrooms rr on (b.readroom = rr.id)

group by readroom
Отчет С:

select r.name as readroom from books b join readrooms r on(b.readroom = r.id)

    where type in ($list_of_types)

    and readroom not in(select readroom from books b join readrooms r on(b.readroom = r.id) where type in (select id from types where id not in($list_of_types)))

    group by readroom having count(distinct type) = $count_of_types

где $list_of_types - перечень типов, заданных пользователем, а $count_of_types - их количество.
Отчет D:

select b.author, b.name, count(s.id) as count from slips s

join slips_info si on s.id=si.slip

join books b on si.book=b.id

where month(now()) - month(str_to_date(s.timefrom, '%d/%m/%Y')) = 1

group by b.name

order by 3 desc
Приложение 2. Код веб-приложения


index.php:




    

    


        

БИБЛИОТЕКА



        
База данных, которая содержит информацию о работе библиотеки.


        
Библиотека состоит из нескольких читальных залов (зал художественной литературы, зал технической литературы, зал иностранной литературы).

            Библиотекари выдают книги читателям.


        
Необходимо вести учет книг, имеющихся в библиотеке и книг, выданных читателям. Необходимо вести учет посещений библиотеки читателями.