大家好,欢迎来到IT知识分享网。
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表的创建
建表 |
6.1.3视图的创建
建视图 |
(1)用于用户查询书籍的基本信息 (2)用于用户查询自己的借阅书籍的情况 |
6.2数据装载
插入数据使用insert语句
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的地方都改过来了
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127232.html