赞
踩
图书管理系统是为了帮助图书馆或书店更有效地管理他们的图书资源、借阅记录和读者信息而设计的软件系统。该系统可以提供图书检索、借阅、归还、读者管理等功能,从而提高图书管理的效率和便利性。通过数据库存储和后端逻辑处理,系统能够满足用户的图书管理需求,包括图书入库、借阅历史记录、读者信息管理等。
管理员可以登录系统
查询、添加、编辑和删除图书信息
管理读者信息和借阅记录
用户可以登录系统
用户可以注册新账户
用户可以搜索图书、借阅图书、归还图书、预约图书以及缴纳罚款
实现用户登录和注册功能以及管理员登录功能。
实现图书查询功能,通过查询书名来查询整条记录。
实现借书、还书、预约书籍和缴纳罚款等功能。
实现添加、编辑、删减图书功能。
系统需要与MySQL数据库连接,对图书信息、用户信息等进行存储和管理。
MySQL数据库是一种成熟且广泛应用的关系型数据库管理系统,能够支持系统的数据存储和管理需求。对于图书管理系统而言,MySQL提供了稳定的数据存储和高效的数据检索功能,因此在技术上是可行的选择。
系统开发、部署和维护的成本相对较低,因为不需要投入大量资源在 UI 界面的设计和开发上。
系统的设计和实施需要符合相关的法律法规,包括数据隐私保护、用户信息安全等方面的合规性。在数据库存储和管理方面需要特别注意数据隐私和安全性。
分类编号:category_id char(10), (主键)
类名:Cname char(20)
书籍名字:Bname char(30)
索书号:Bid char(10) (主键)
作者:author char(100)
出版社:press char(20)
国际标准书号:ISBN char(30)
价格:price int
剩余数量:remain int
分类编号:category_id char(10)
书本编号:id char(10)(主键)
索书号:Bid char(10)(外键)
状态:state char(4)
用户编号:UserId char(10), (主键)
用户名字:Uname char(20),
用户性别:Usex char(6),
用户手机号:Uphone char(30),
用户密码:password char(30)
身份:identity char(4)
可以借阅的最多天数':Max_day int
用户编号:UserId char(10) (主键)
书本编号:id char(10)(主键)
借阅时间:Bdate date(主键)
归还时间:Rdate date
管理员编号:AdId char(10), (主键)
用户名:username char(20)
管理员密码:password char(30)
用户编号:UserId char(10) (主键)
书本编号:id char(10)(主键)
预约记录时间:Rdate date
罚款记录编号:FineId char(10)
用户编号:UserId char(10) (主键)
书本编号:id char(10) (主键)
金额:amout int
罚款时间:Ftime date
分析之后可以设计出能够满足用户需求的各种实体以及他们之间的关系,为下一节的 逻辑结构设计打下基础。这些实体包括各种信息,通过相互之间的作用形成数据的流动。 本系统数据库的各实体信息如下所示:
书籍分类:分类编号,类名
书籍信息:书籍名字,索书号,作者,出版社,国际标准书号,价格,剩余数量,类号
书本:书本编号,索书号,状态
用户:用户编号,用户名字,用户性别,用户手机号,用户身份,可以解约的最多天数,用户密码
管理员:管理员编号,用户名,管理员密码
借阅(关系):用户编号,书本编号,借阅时间,归还时间
预约(关系):用户编号,书本编号,预约记录时间
罚款(关系):罚款记录编号,用户编号,书本编号,金额,罚款时间
分类表(分类编号,类名)
主键:分类编号
书籍信息表(书籍名字,索书号,作者,出版社,国际标准书号,价格,剩余数量,类号)
主键:索书号
书表(书本编号,索书号,状态)
主键:书本编号
外键:索书号
用户表(用户编号,用户名字,用户性别,用户手机号,用户身份,可以解约的最多天数,用户密码)
主键:用户编号
借还记录表(用户编号,书本编号,借阅时间,归还时间)
主键:用户编号、书本编号、借阅时间
外键:用户编号、书本编号
管理员表(管理员编号,用户名,管理员密码)
主键:管理员编号
预约记录表(用户编号,书本编号,预约记录时间)
主键:用户编号,书本编号
外键:书本编号,用户编号
罚款记录表(罚款记录编号,用户编号,书本编号,金额,罚款时间)
主键:罚款记录编号,
外码:用户编号,书本编号
优化到3NF
分类表(分类编号,类名)
书籍信息表(书籍名字,索书号,作者,出版社,国际标准书号,价格,剩余数量,类号)
用户表(用户编号,用户名字,用户性别,用户手机号,用户身份,可以解约的最多天数,用户密码)
借还记录表(用户编号,书本编号,借阅时间,归还时间)
管理员表(管理员编号,用户名,管理员密码)
预约记录表(用户编号,书本编号,预约记录时间)
罚款记录表(罚款记录编号,用户编号,书本编号,金额,罚款时间)
外模式的设计给用户带来直观的感受,设计了一下视图:
1、书籍信息视图
2、预约信息视图
建库 |
create database library; use library; |
建表 |
create table category create table book_information create table book create table users create table Records create table ad create table reservation create table fine |
建视图 |
(1)用于用户查询书籍的基本信息 create view user_select(Bname,Bid,id,author,press,ISBN,price,Cname,state) (2)用于用户查询自己的借阅书籍的情况 create view record_history(UserId,Uname,Bname,id,Bdate,Rdate) |
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")
等等。
(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 ;
#检查事件调度器的当前状态
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 ;
功能模块一
功能模块二
系统在运用什么样的前台后台环境进行设计,系统的效率如何,有没有实现主要功能: 该系统运用sql和vscode和python同设计而成,该系统效率较高.
在使用Python连接MySQL数据库并获取数据时,由于通常会返回元组类型的数据,导致我想使用其中某个属性的值老是出现问题,如果使用下标也不是很方便,于是我手动将查询结果转换为字典,然后使用列名来访问值
示例:
刚开始由于没有考虑到用户可能会不小心输入错误,导致当用户没有选中我提供的选项时就会报错,于是后面加了部分代码用来处理不小心输错的情况,示例如下
一开始没有搞清楚fetchall和fetchone,全程一直用的fetchone,导致有时候明明有多条数据满足要求,却没有被选中,最后展现出来的结果不对,发现错误以后全部检查了一遍,把需要用fetchall的地方都改过来了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。