当前位置:   article > 正文

数据库课设(图书管理系统)_数据库设置管理图书馆保管和借还的数据库

数据库设置管理图书馆保管和借还的数据库

1、系统分析

1.1项目背景

        图书管理系统是为了帮助图书馆或书店更有效地管理他们的图书资源、借阅记录和读者信息而设计的软件系统。该系统可以提供图书检索、借阅、归还、读者管理等功能,从而提高图书管理的效率和便利性。通过数据库存储和后端逻辑处理,系统能够满足用户的图书管理需求,包括图书入库、借阅历史记录、读者信息管理等。

1.2需求分析

1.2.1管理员需求 

管理员可以登录系统 

查询、添加、编辑和删除图书信息

管理读者信息和借阅记录   

1.2.2读者需求 

用户可以登录系统

用户可以注册新账户

用户可以搜索图书、借阅图书、归还图书、预约图书以及缴纳罚款

1.2.3系统功能需求

实现用户登录和注册功能以及管理员登录功能。

实现图书查询功能,通过查询书名来查询整条记录。

实现借书、还书、预约书籍和缴纳罚款等功能。

实现添加、编辑、删减图书功能。

系统需要与MySQL数据库连接,对图书信息、用户信息等进行存储和管理。 

1.3系统可行性分析

1.3.1数据库选择

MySQL数据库是一种成熟且广泛应用的关系型数据库管理系统,能够支持系统的数据存储和管理需求。对于图书管理系统而言,MySQL提供了稳定的数据存储和高效的数据检索功能,因此在技术上是可行的选择。

1.3.2经济可行性 

系统开发、部署和维护的成本相对较低,因为不需要投入大量资源在 UI 界面的设计和开发上。

1.3.3法律与环境可行性 

系统的设计和实施需要符合相关的法律法规,包括数据隐私保护、用户信息安全等方面的合规性。在数据库存储和管理方面需要特别注意数据隐私和安全性。 

1.4 数据流图

1.4.1顶层数据流图 

1.4.2第二层数据流图 

 2、数据库分析

2.1 分类表(category)

分类编号:category_id char(10), (主键)

类名:Cname char(20)

2.2书籍信息表(book) 

书籍名字:Bname  char(30)

索书号:Bid char(10) (主键)

作者:author char(100)

出版社:press char(20)

国际标准书号:ISBN char(30)

价格:price int

剩余数量:remain int

分类编号:category_id char(10)

2.3书表(book)

书本编号:id char(10)(主键)

索书号:Bid char(10)(外键)

状态:state char(4)

2.4用户表( users) 

用户编号:UserId char(10), (主键)

用户名字:Uname char(20),

用户性别:Usex char(6),

用户手机号:Uphone char(30),

用户密码:password char(30)

身份:identity char(4)

可以借阅的最多天数':Max_day int

2.5借还记录表(Records) 

用户编号:UserId char(10) (主键)

书本编号:id char(10)(主键)

借阅时间:Bdate date(主键)

归还时间:Rdate date

2.6管理员表(ad) 

管理员编号:AdId char(10), (主键)

用户名:username char(20)

管理员密码:password char(30)

2.7预约记录表( reservation) 

用户编号:UserId char(10)  (主键)

书本编号:id char(10)(主键)

预约记录时间:Rdate date

2.8罚款记录表(fine) 

罚款记录编号:FineId char(10)

用户编号:UserId char(10) (主键)

书本编号:id char(10) (主键)

金额:amout int

罚款时间:Ftime date

3、概念结构设计

3.1 图书管理系统的实体

分析之后可以设计出能够满足用户需求的各种实体以及他们之间的关系,为下一节的 逻辑结构设计打下基础。这些实体包括各种信息,通过相互之间的作用形成数据的流动。 本系统数据库的各实体信息如下所示:

        书籍分类:分类编号,类名

        书籍信息:书籍名字,索书号,作者,出版社,国际标准书号,价格,剩余数量,类号

        书本:书本编号,索书号,状态

        用户:用户编号,用户名字,用户性别,用户手机号,用户身份,可以解约的最多天数,用户密码

        管理员:管理员编号,用户名,管理员密码

        借阅(关系):用户编号,书本编号,借阅时间,归还时间

        预约(关系):用户编号,书本编号,预约记录时间

        罚款(关系):罚款记录编号,用户编号,书本编号,金额,罚款时间

3.2 全局ER图:

4、逻辑结构设计

4.1关系模型的设计

分类表(分类编号,类名)

主键:分类编号

书籍信息表(书籍名字,索书号,作者,出版社,国际标准书号,价格,剩余数量,类号)

主键:索书号

书表(书本编号,索书号,状态)

主键:书本编号

外键:索书号

用户表(用户编号,用户名字,用户性别,用户手机号,用户身份,可以解约的最多天数,用户密码)

主键:用户编号

借还记录表(用户编号,书本编号,借阅时间,归还时间)

主键:用户编号、书本编号、借阅时间

外键:用户编号、书本编号

管理员表(管理员编号,用户名,管理员密码)

主键:管理员编号

预约记录表(用户编号,书本编号,预约记录时间)

主键:用户编号,书本编号 

外键:书本编号,用户编号

罚款记录表(罚款记录编号,用户编号,书本编号,金额,罚款时间) 

主键:罚款记录编号,

外码:用户编号,书本编号

4.2 关系模型优化

优化到3NF

分类表(分类编号,类名)

书籍信息表(书籍名字,索书号,作者,出版社,国际标准书号,价格,剩余数量,类号)

用户表(用户编号,用户名字,用户性别,用户手机号,用户身份,可以解约的最多天数,用户密码)

借还记录表(用户编号,书本编号,借阅时间,归还时间)

管理员表(管理员编号,用户名,管理员密码)

预约记录表(用户编号,书本编号,预约记录时间)

罚款记录表(罚款记录编号,用户编号,书本编号,金额,罚款时间) 

4.3视图设计

外模式的设计给用户带来直观的感受,设计了一下视图:

1、书籍信息视图

2、预约信息视图

5、物理结构设计

5.1数据库表结构的设计

5.2表间关系图

6、图书管理系统数据库系统实现

6.1数据库的建立

6.1.1创建数据库

建库
create database library;
use library;

6.1.2表的创建

建表

create table category
(category_id char(10) primary key comment'类号',
Cname char(20) comment'类名'
)comment'分类表';

create table book_information
(Bname char(30) comment'书名',
Bid char(10) primary key comment'索书号',
author char(100) comment'作者',
press char(20) comment'出版社',
ISBN char(30) comment'国标书号',
price int comment'价格',
remain int comment'剩余数量',
category_id char(10) comment'类号',
foreign key(category_id) references category(category_id) on update cascade on delete cascade
) comment'书籍信息表';

create table book
(id char(10) primary key comment'书本编号',
Bid char(10) comment'索书号',
state char(4) check(state in('在馆','借出','预约')) default('在馆') comment'状态',
foreign key(Bid) references book_information(Bid) on update cascade on delete cascade
) comment'书籍表';

create table users
(UserId char(10) primary key comment'用户编号',
Uname char(20) comment'用户名',
Usex char(6) comment'性别',
Uphone char(30) comment'手机号',
identity char(4) check(identity in('教师','学生')) comment'身份',
Max_day int check(Max_day in(45,30))comment'可以借阅的最多天数',
password char(30) comment'密码'
) comment'用户表';

create table Records
(UserId char(10) comment'用户编号',
id char(10) comment'书本编号',
Bdate date comment'借阅时间',
Rdate date comment'归还时间',
primary key(UserId,id,Bdate),
foreign key(UserId) references users(UserId) on update cascade on delete cascade,
foreign key(id) references book(id) on update cascade on delete cascade
) comment'借还记录表';

create table ad
(AdId char(10) primary key comment'管理员编号',
username char(20) comment'用户名',
password char(30) comment'密码'
) comment'管理员表';

create table reservation
(UserId char(10) comment'用户编号',
id char(10) comment'书本编号',
Rdate date comment'预约记录时间',
primary key(UserId,id),
foreign key(UserId) references users(UserId) on update cascade on delete cascade,
foreign key(id) references book(id) on update cascade on delete cascade
) comment'预约记录表';

create table fine
(FineId char(100) primary key comment'罚款记录编号',
UserId char(10) comment'用户编号',
id char(10) comment'书本编号',
amount float comment'金额',
Ftime date comment'罚款时间',
foreign key(UserId) references users(UserId) on update cascade on delete cascade,
foreign key(id) references book(id) on update cascade on delete cascade
) comment'罚款记录表';

6.1.3视图的创建

建视图

(1)用于用户查询书籍的基本信息

create view user_select(Bname,Bid,id,author,press,ISBN,price,Cname,state)
as
select book_information.Bname,book_information.Bid,book.id,book_information.author,book_information.press,book_information.ISBN,book_information.price,category.Cname,book.state
from book_information,book,category
where book_information.Bid=book.Bid and category.category_id=book_information.category_id
with check option;

(2)用于用户查询自己的借阅书籍的情况

create view record_history(UserId,Uname,Bname,id,Bdate,Rdate)
as
select users.UserId,users.Uname,book_information.Bname,records.id,records.Bdate,records.Rdate
from users,book_information,records,book
where users.UserId=records.UserId and records.id=book.id and book.Bid=book_information.Bid
with check option;

6.2数据装载

插入数据使用insert语句

insert into book_information(Bname,Bid,author,press,ISBN,price,remain,category_id) values
("计算机程序的构造与解释","2024001","Harold Abelson, Gerald Jay Sussman","清华大学出版社","978-7302082264",201,6,"001"),
("深入理解计算机系统","2024002","Randal E. Bryant, David R. O'Hallaron","人民邮电出版社","978-7115283666",198,5,"001")
等等。

6.2功能实现

6.2.1用户注册 

6.2.2 登录

6.2.3借书 

6.2.4用户查询本人借书情况

6.2.5还书 

6.2.6查询书籍信息 

6.2.7预约书籍 

6.2.8用户被罚款 

6.2.9管理员查询用户借书情况 

6.2.10管理员查询用户信息 

  

6.2.11管理员查询罚款记录 

6.2.12管理员添加图书 

6.2.13管理员修改图书 

6.2.14管理员删除图书 

6.3完整性设计

6.3.1触发器设计

1 借出书时更新状态

DELIMITER $$
create trigger 
update_remain_state_borrow
after insert on records
for each row
begin
        update book
        set state="
借出"
        where id=new.id;
end $$
DELIMITER ;

2)还书时更新状态

DELIMITER $$
create trigger 
update_remain_state_return
after update on records
for each row
begin
        update book
        set state="
在馆"
        where id=new.id;
end $$
DELIMITER ;

3)预约书时更新状态

DELIMITER $$
create trigger 
update_state_reserve
after insert on reservation
for each row
begin
        update book
        set state="
预约"
        where id=new.id;
end $$
DELIMITER ;

6.3.2存储过程

#检查事件调度器的当前状态

show variables like 'event_scheduler';

#启用事件调度器

set global event_scheduler = on;

#确认事件调度器已经启用

show processlist;

#创建事件,每天执行一次存储过程,检查预约日期并更新 book 表中的状态。
create event if not exists updateBook_Event
ON SCHEDULE EVERY 1 DAY
DO
CALL 
updateState_reserve();

DELIMITER $$
create procedure 
updateState_reserve()
BEGIN
    UPDATE book b
    JOIN reservation r 
    ON b.id = r.id
    SET 
b.status = "在馆"
    WHERE 
datediff(curdate(), r.Rdate) > 3;
    
    delete from reservation
    where 
datediff(curdate(), Rdate) > 3;
END $$
DELIMITER ;

7. 图书管理系统运行和维护

7.1 主要功能测试

功能模块一

功能模块二

系统在运用什么样的前台后台环境进行设计,系统的效率如何,有没有实现主要功能: 该系统运用sql和vscode和python同设计而成,该系统效率较高.

7.2 遇到的问题及调试整改

7.2.1

在使用Python连接MySQL数据库并获取数据时,由于通常会返回元组类型的数据,导致我想使用其中某个属性的值老是出现问题,如果使用下标也不是很方便,于是我手动将查询结果转换为字典,然后使用列名来访问值

示例: 

7.2.2

刚开始由于没有考虑到用户可能会不小心输入错误,导致当用户没有选中我提供的选项时就会报错,于是后面加了部分代码用来处理不小心输错的情况,示例如下 

 

7.2.3 

 一开始没有搞清楚fetchall和fetchone,全程一直用的fetchone,导致有时候明明有多条数据满足要求,却没有被选中,最后展现出来的结果不对,发现错误以后全部检查了一遍,把需要用fetchall的地方都改过来了 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/788316
推荐阅读
相关标签
  

闽ICP备14008679号