作者主页:Designer 小郑 作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。
基于JAVA+Vue+SpringBoot+MySQL的图书借阅系统,包含了图书档案模块、图书预定模块、图书评论模块、图书新闻模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,图书借阅系统基于角色的访问控制,给管理员、学生使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
图书馆借阅管理系统采用了前后端分离的架构,前端和后端通过API进行连接,后端采用MVC三层架构,本章将详细讲解图书馆借阅管理系统的架构设计,使我们的图书馆借阅管理系统更具可伸缩性和直观性,图书馆借阅管理系统的具体的划分结构示意图如下图所示。
登陆注册模块包括了基础的用户登陆和用户注册功能,用户通过这个模块进行认证,从而进入到图书馆图书借阅管理系统。
图书管理模块是将所有图书数据规则化保存至图书馆图书借阅管理系统,图书馆人员可以根据需要进行录入图书、取消录入图书、更新图书信息、将图书导出到Excel的操作。
当用户消费完成后可以进行评论,可以给与图书好评,告诉别人这是一本好书,其他顾客可以看到关于单个图书的评论信息;用户也可以给出差评,告诉别人这本书的质量不符合自己的要求,让其他用户不要借阅。
图书预定模块用户保存顾客的图书下单信息,即预约订单数据。当顾客对某个图书进行预约后,系统应当自动生成预订单,顾客可以进入到图书预定模块,对订单进行支付,也可以查询自己的历史下单数据。
图书管理员可以根据自己的需求,发布关于图书的新闻信息,新闻资讯应当可以包括图片、文字,管理员发布后,用户可以看到这些内容。
登陆注册模块包括了基础的用户登陆和用户注册功能,用户通过这个模块进行认证,从而进入到图书馆图书借阅管理系统。
图书管理模块是将所有图书数据规则化保存至图书馆图书借阅管理系统,图书馆人员可以根据需要进行录入图书、取消录入图书、更新图书信息、将图书导出到Excel的操作。
当用户消费完成后,可以对图书的环境和服务进行评论,以方便其他顾客对图书有一个初步的了解,顾客可以对图书的某个图书进行评论,其他顾客可以看到关于单个图书的评论信息。
图书预定模块用户保存顾客的图书下单信息,即预约订单数据。当顾客对某个图书进行预约后,系统应当自动生成预订单,顾客可以进入到图书预定模块,对订单进行支付,也可以查询自己的历史下单数据。
图书管理员可以根据自己的需求,发布关于图书的新闻信息,新闻资讯应当可以包括图片、文字,管理员发布后,用户可以看到这些内容。
图书管理模块是图书的基础信息进行记录并管理,其中图书类型的信息包括了图书的类型编号、类型名称、图书价格、图书总数、图书剩余数、图书描述、备注等,其中类型编号是系统图书的确定性因素。
图书档案的数据存储包括图书的楼栋号、楼层号、图书号、图书ID、图书状态、图书类型ID、图书类型、房价、备注等信息。
图书订单档案的数据存储包括订单号、下单人ID、下单人名称、下单人手机号、订单ID、订单价格、预定图书数、下单时间、订单状态、备注等信息。
系统的整体E-R图如图所示。
学生在使用图书馆图书借阅管理系统的过程中,需要有一个登陆用户的存在,告诉系统当前登陆的用户是谁,以便于传递参数时可以减少性能消耗,以下是图书借阅系统的数据库设计表。
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询图书数据")
public Result<IPage<Dormitory>> getByPage(@ModelAttribute Dormitory dormitory, @ModelAttribute PageVo page){
QueryWrapper<Dormitory> qw = new QueryWrapper<>();
if(!ZwzNullUtils.isNull(dormitory.getTitle())) {
qw.like("title",dormitory.getTitle());
}
if(!ZwzNullUtils.isNull(dormitory.getType())) {
qw.eq("type",dormitory.getType());
}
if(!ZwzNullUtils.isNull(dormitory.getBreakfast())) {
qw.eq("breakfast",dormitory.getBreakfast());
}
IPage<Dormitory> data = iDormitoryService.page(PageUtil.initMpPage(page),qw);
return new ResultUtil<IPage<Dormitory>>().setData(data);
}
@RequestMapping(value = "/addMyDiscuss", method = RequestMethod.POST)
@ApiOperation(value = "新增图书评论")
public Result<Object> addMyDiscuss(@RequestParam String id, @RequestParam String reply, @RequestParam String text){
Dormitory dormitory = iDormitoryService.getById(id);
if(dormitory == null) {
return ResultUtil.error("图书不存在");
}
User currUser = securityUtil.getCurrUser();
DormitoryDiscuss discuss = new DormitoryDiscuss();
discuss.setUserId(currUser.getId());
discuss.setUserName(currUser.getNickname());
discuss.setReply(reply);
discuss.setDormitoryId(dormitory.getId());
discuss.setDiscussTime(DateUtil.now());
discuss.setContent(text);
iDormitoryDiscussService.saveOrUpdate(discuss);
return ResultUtil.success("OK");
}
@RequestMapping(value = "/addMyOrder", method = RequestMethod.POST)
@ApiOperation(value = "新建图书订单")
public Result<Object> addMyOrder(@RequestParam String id, @RequestParam String date){
Dormitory dormitory = iDormitoryService.getById(id);
if(dormitory == null) {
return ResultUtil.error("图书不存在");
}
QueryWrapper<DormitoryOrder> qw = new QueryWrapper<>();
qw.eq("dormitory_id",id);
qw.eq("order_date",date);
long count = iDormitoryOrderService.count(qw);
if(count > 0) {
return ResultUtil.error("图书当日已被预定");
}
User currUser = securityUtil.getCurrUser();
DormitoryOrder order = new DormitoryOrder();
order.setUserId(currUser.getId());
order.setUserName(currUser.getNickname());
order.setOrderTime(DateUtil.now());
order.setPayFlag("否");
order.setDormitoryId(dormitory.getId());
order.setPrice(dormitory.getPrice());
order.setRemark("");
order.setDormitoryName(dormitory.getTitle());
order.setOrderDate(date);
iDormitoryOrderService.saveOrUpdate(order);
return ResultUtil.success();
}
@RequestMapping(value = "/getMyPage", method = RequestMethod.GET)
@ApiOperation(value = "查询我的图书订单")
public Result<IPage<DormitoryOrder>> getMyPage(@ModelAttribute DormitoryOrder order,@ModelAttribute PageVo page){
User currUser = securityUtil.getCurrUser();
QueryWrapper<DormitoryOrder> qw = new QueryWrapper<>();
qw.eq("user_id",currUser.getId());
if(!ZwzNullUtils.isNull(order.getDormitoryId())) {
qw.eq("dormitory_id",order.getDormitoryId());
}
if(!ZwzNullUtils.isNull(order.getUserName())) {
qw.eq("user_name",order.getUserName());
}
IPage<DormitoryOrder> data = iDormitoryOrderService.page(PageUtil.initMpPage(page),qw);
return new ResultUtil<IPage<DormitoryOrder>>().setData(data);
}
@RequestMapping(value = "/payOrder", method = RequestMethod.POST)
@ApiOperation(value = "图书订单付款")
public Result<Object> payOrder(@RequestParam String id){
DormitoryOrder order = iDormitoryOrderService.getById(id);
if(!order.getPayFlag().equals("是")) {
order.setPayFlag("是");
iDormitoryOrderService.saveOrUpdate(order);
return ResultUtil.success();
}
return ResultUtil.error("已付款,请勿重复支付");
}
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!