Java Web 图书管理系统

1、项目总体设计

1.1、需求分析

基于Java Web的图书管理系统,该系统应包含图书信息的添加,删除,修改,查询,借书,还书功能,用户层面的查看个人 信息,以及登录,注销,修改用户密码功能,以及查询借阅记录功能。
该系统区分三种不同的角色:管理员、教师、学生。
管理员拥有所有的功能,可查询所有用户的借阅记录,并且可无限借书,且无超期限制。
教师拥有图书查询,借书,还书,查询个人借阅记录,并且拥有用户层面的所有功能,最多可借10本书,超期天数为10天。
学生拥有图书查询,借书,还书,查询个人借阅记录,并且拥有用户层面的所有功能,最多可借5本书,超期天数为8天。
用户登录后可访问有权限的资源,若未登录,重定向到登录页面。
借阅记录页面显示用户是否超期,并且提示用户距离超期时间还有多少时间。

技术选型:
前台 JSP + jQuery + CSS
后台 Servlet + JDBC + MySQL
权限使用JavaWeb的过滤器来实现

1.2、系统功能模块设计

在这里插入图片描述

2、详细设计

2.1、数据库设计

2.1.1、user(用户表)

在这里插入图片描述

2.1.2、book(图书表)

在这里插入图片描述

2.1.3、stock(库存表)

在这里插入图片描述

2.1.4、borrow_record(借阅记录表)

在这里插入图片描述

2.1.5、role(角色表)

在这里插入图片描述

-- 角色表初始化数据:
INSERT INTO `role` VALUES (1, 'teacher', '教师');
INSERT INTO `role` VALUES (2, 'student', '学生');
INSERT INTO `role` VALUES (3, 'admin', '管理员');

2.1.6、permission(操作权限表)

在这里插入图片描述

-- 权限表初始化数据:
INSERT INTO `permission` VALUES (1, 'BookAddServlet', '图书新增');
INSERT INTO `permission` VALUES (2, 'BookDeleteServlet', '图书删除');
INSERT INTO `permission` VALUES (3, 'BookSearchServlet', '图书查询');
INSERT INTO `permission` VALUES (4, 'BookUpdateServlet', '图书修改');
INSERT INTO `permission` VALUES (5, 'BorrowBookServlet', '借书');
INSERT INTO `permission` VALUES (6, 'ReturnBookServlet', '还书');
INSERT INTO `permission` VALUES (7, 'BorrowRecordSearchServlet', '借阅记录查询');

2.1.7、role_permission(角色权限对应表)

在这里插入图片描述

-- 角色权限映射表初始化数据:
INSERT INTO `role_permission` VALUES (1, 1, 3);
INSERT INTO `role_permission` VALUES (2, 1, 5);
INSERT INTO `role_permission` VALUES (3, 1, 6);
INSERT INTO `role_permission` VALUES (4, 1, 7);
INSERT INTO `role_permission` VALUES (5, 2, 3);
INSERT INTO `role_permission` VALUES (6, 2, 5);
INSERT INTO `role_permission` VALUES (7, 2, 6);
INSERT INTO `role_permission` VALUES (8, 2, 7);
INSERT INTO `role_permission` VALUES (9, 3, 1);
INSERT INTO `role_permission` VALUES (10, 3, 2);
INSERT INTO `role_permission` VALUES (11, 3, 3);
INSERT INTO `role_permission` VALUES (12, 3, 4);
INSERT INTO `role_permission` VALUES (13, 3, 5);
INSERT INTO `role_permission` VALUES (14, 3, 6);
INSERT INTO `role_permission` VALUES (15, 3, 7);

2.2、功能实现

2.2.1、登录

在这里插入图片描述
输入用户名密码,系统校验正确后,方可登录成功进入系统。系统登录成功后,将用户信息放置在session中。有其他请求进入系统后,会被Java Web Filter拦截器拦截,判断session中是否存在用户信息,如果存在,证明用户已经登录,则允许继续访问,否则,重定向到登录页面,核心代码见下图:
在这里插入图片描述

2.2.2、注册

在这里插入图片描述
用户填写注册信息,选择相应的角色(本系统有三种角色:管理员、教师、学生),即可注册成功,插入用户表。

2.2.3、查看个人资料

在这里插入图片描述
用户点击个人资料,前台jQuery发送Ajax请求,查询用户信息,servlet将用户信息返回至前台页面,核心代码如下:
在这里插入图片描述

2.2.4、修改密码

在这里插入图片描述
用户登录成功后,方可修改密码

2.2.5、图书查询

在这里插入图片描述
提供三个查询条件选择:图书条码、图书名称、出版社,均精确查找
前台页面使用jQuery发送Ajax请求,请求到达BookSearchServlet后,由BookSearchServlet去调用BookDao提供的search方法,search方法根据前台传过来的查询条件动态拼接sql语句,使用jdbc做数据库查询操作,查询结果由servlet返回至前台,前台jQuery得到响应结果后,动态的为图书table添加行,核心代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.6、图书编辑

在这里插入图片描述
只有管理员角色才拥有此操作权限。
前台通过jQuery发送Ajax请求到达BookUpdateServlet,servlet接收到http请求后,调用BookDao提供的update方法,通过jdbc做book表的update操作。核心代码如下:
在这里插入图片描述
在这里插入图片描述

2.2.7、图书删除

在这里插入图片描述
只有管理员角色才拥有此操作权限。
前台通过jQuery发送Ajax请求到达BookDeleteServlet,servlet接收到http请求后,调用BookDao提供的delete方法,通过jdbc做book表的delete操作。核心代码如下:
在这里插入图片描述
在这里插入图片描述

2.2.8、图书入库

在这里插入图片描述
只有管理员角色才拥有此操作权限。
前台通过jQuery发送Ajax请求到达BookAddServlet,servlet接收到http请求后,调用BookDao提供的insert方法,通过jdbc做book表的insert操作。核心代码如下:
在这里插入图片描述
在这里插入图片描述

2.2.9、借书

在这里插入图片描述
前台通过jQuery发送Ajax请求到达BorrowBookServlet,servlet接收到http请求后,首先调用StockDao提供的search方法,查询图书的当前库存数量,若库存不足,返回“库存不足,无法借书”;如果库存充足,接着调用BorrowRecordDao提供的search方法,查询登录人的借书未还数量,如果已经达到最大借书数量(管理员没有限制,教师最大数量为10,学生为5),则返回前台“已达到最大借书数量,不允许继续借书”;如果条件都满足后:
开启数据库事务,做以下两个操作,两个操作都成功后,将事务提交,如果有一个失败,则将该事务回滚,保证数据的一致性:
1、调用StockDao的update方法,通过jdbc操作stock表,将该书的库存-1;
2、调用BorrowRecordDao的insert方法,通过jdbc操作borrow_recod表,插入一条借阅记录
核心代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.10、查询借阅记录

在这里插入图片描述
管理员角色可以查看所有用户的借阅记录,其他角色只能查询本人的借阅记录。
前台通过jQuery发送Ajax请求到达BorrowRecordSearchServlet,servlet接收到http请求后,首先调用BorrowRecordDao提供的search方法,查询用户的借阅记录。查询到借阅记录集合后,做遍历操作,计算每条借阅记录距离超期时刻的时间间隔,并且计算该借阅记录是否超期(管理员没有超期限制,教师最长借书天数为10,学生为8),数据计算完成后,由BorrowRecordSearchServlet返回前台,前台jQuery得到响应后,遍历列表,动态向借阅记录table添加行。核心代码如下:
在这里插入图片描述
在这里插入图片描述

2.2.11、还书

在这里插入图片描述
用户点击还书按钮
首先判断该借阅记录是否有还书时间,若有,提示前台“该书已还”。
前台jQuery发送ajax请求到ReturnBookServlet,servlet接收到用户请求后,首先查询当前登录人是否为该借阅记录的借书人,如果不是,则返回前台“不允许替他人还书”;条件满足后,开始事务,做以下两个操作:
1、调用StockDao的update方法,通过jdbc操作stock表做update操作,将本书的库存+1
2、调用BorrowRecordDao的update方法,通过jdbc操作borrow_record表做update操作,将该借阅记录的还书时间更新为当前时间
这两个操作全部都正确执行后,提交事务,否则将事务回滚,保证数据的一致性
核心代码如下:
在这里插入图片描述
在这里插入图片描述

2.2.12、注销登录

在这里插入图片描述
用户点击退出按钮后,jQuery发送ajax请求到LogoutServlet,servlet接收到用户请求后,将session中的用户信息置空,由jQuery重定向到登录页面
核心代码如下:
在这里插入图片描述

2.2.13、权限校验

在这里插入图片描述
举例:学生角色用户做图书删除操作,会提示“抱歉,您没有该权限!”;
该权限校验功能采用Java Web Filter实现,系统启动时,先将三种角色对应的所有权限加载到系统中,然后再过滤器中对用户的请求做过滤校验操作,如果用户拥有该权限,则继续执行。核心代码如下:
在这里插入图片描述
在这里插入图片描述

3、项目总结

本项目采用JSP + Servlet + JDBC + jQuery + MySQL架构实现,程序运行结果良好,代码格式工整。
适合作为入行者、学生等学习使用。

4、关于博主

可联系博主获取该系统源代码与完整设计文档。
QQ:1597757139

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值