Vue+SpringBoot打造图书借阅系统

news/2024/7/10 22:13:44 标签: vue.js, spring boot, 前端, java, javascript, 开源, spring

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 登陆注册模块
    • 2.2 图书管理模块
    • 2.3 图书评论模块
    • 2.4 图书预定模块
    • 2.5 图书资讯模块
  • 三、系统设计
    • 3.1 系统结构设计
      • 3.1.1登陆注册模块的结构设计
      • 3.1.2图书管理模块的结构设计
      • 3.1.3图书评论模块的结构设计
      • 3.1.4图书预定模块的结构设计
      • 3.1.5图书资讯模块的结构设计
    • 3.2 E-R设计
    • 3.3 数据库设计
  • 四、系统展示
  • 五、核心代码
    • 5.1 查询图书数据
    • 5.2 新增图书评论
    • 5.3 新建图书订单
    • 5.4 查询我的图书订单
    • 5.5 图书订单付款
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的图书借阅系统,包含了图书档案模块、图书预定模块、图书评论模块、图书新闻模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,图书借阅系统基于角色的访问控制,给管理员、学生使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

图书馆借阅管理系统采用了前后端分离的架构,前端和后端通过API进行连接,后端采用MVC三层架构,本章将详细讲解图书馆借阅管理系统的架构设计,使我们的图书馆借阅管理系统更具可伸缩性和直观性,图书馆借阅管理系统的具体的划分结构示意图如下图所示。

在这里插入图片描述

2.1 登陆注册模块

登陆注册模块包括了基础的用户登陆和用户注册功能,用户通过这个模块进行认证,从而进入到图书馆图书借阅管理系统。

2.2 图书管理模块

图书管理模块是将所有图书数据规则化保存至图书馆图书借阅管理系统,图书馆人员可以根据需要进行录入图书、取消录入图书、更新图书信息、将图书导出到Excel的操作。

2.3 图书评论模块

当用户消费完成后可以进行评论,可以给与图书好评,告诉别人这是一本好书,其他顾客可以看到关于单个图书的评论信息;用户也可以给出差评,告诉别人这本书的质量不符合自己的要求,让其他用户不要借阅。

2.4 图书预定模块

图书预定模块用户保存顾客的图书下单信息,即预约订单数据。当顾客对某个图书进行预约后,系统应当自动生成预订单,顾客可以进入到图书预定模块,对订单进行支付,也可以查询自己的历史下单数据。

2.5 图书资讯模块

图书管理员可以根据自己的需求,发布关于图书的新闻信息,新闻资讯应当可以包括图片、文字,管理员发布后,用户可以看到这些内容。


三、系统设计

3.1 系统结构设计

3.1.1登陆注册模块的结构设计

登陆注册模块包括了基础的用户登陆和用户注册功能,用户通过这个模块进行认证,从而进入到图书馆图书借阅管理系统。

在这里插入图片描述

3.1.2图书管理模块的结构设计

图书管理模块是将所有图书数据规则化保存至图书馆图书借阅管理系统,图书馆人员可以根据需要进行录入图书、取消录入图书、更新图书信息、将图书导出到Excel的操作。

在这里插入图片描述

3.1.3图书评论模块的结构设计

当用户消费完成后,可以对图书的环境和服务进行评论,以方便其他顾客对图书有一个初步的了解,顾客可以对图书的某个图书进行评论,其他顾客可以看到关于单个图书的评论信息。

在这里插入图片描述

3.1.4图书预定模块的结构设计

图书预定模块用户保存顾客的图书下单信息,即预约订单数据。当顾客对某个图书进行预约后,系统应当自动生成预订单,顾客可以进入到图书预定模块,对订单进行支付,也可以查询自己的历史下单数据。

在这里插入图片描述

3.1.5图书资讯模块的结构设计

图书管理员可以根据自己的需求,发布关于图书的新闻信息,新闻资讯应当可以包括图片、文字,管理员发布后,用户可以看到这些内容。

在这里插入图片描述

3.2 E-R设计

图书管理模块是图书的基础信息进行记录并管理,其中图书类型的信息包括了图书的类型编号、类型名称、图书价格、图书总数、图书剩余数、图书描述、备注等,其中类型编号是系统图书的确定性因素。

在这里插入图片描述
图书档案的数据存储包括图书的楼栋号、楼层号、图书号、图书ID、图书状态、图书类型ID、图书类型、房价、备注等信息。

在这里插入图片描述
图书订单档案的数据存储包括订单号、下单人ID、下单人名称、下单人手机号、订单ID、订单价格、预定图书数、下单时间、订单状态、备注等信息。

在这里插入图片描述

系统的整体E-R图如图所示。

在这里插入图片描述

3.3 数据库设计

学生在使用图书馆图书借阅管理系统的过程中,需要有一个登陆用户的存在,告诉系统当前登陆的用户是谁,以便于传递参数时可以减少性能消耗,以下是图书借阅系统的数据库设计表。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、核心代码

5.1 查询图书数据

java">@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);
}

5.2 新增图书评论

java">@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");
}

5.3 新建图书订单

java">@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();
}

5.4 查询我的图书订单

java">@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);
}

5.5 图书订单付款

java">@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("已付款,请勿重复支付");
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述


http://www.niftyadmin.cn/n/5406764.html

相关文章

【Docker】Windows11操作系统下安装、使用Docker保姆级教程

【Docker】Windows11操作系统下安装、使用Docker保姆级教程 大家好 我是寸铁&#x1f44a; 总结了一篇【Docker】Windows11操作系统下安装、使用Docker保姆级教程的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 什么是 Docker&#xff1f; Docker 是一个开源平台&…

C++ Primer Plus Sixth Edition - 下载电子书与源代码

C Primer Plus Sixth Edition - 下载电子书与源代码 1. C Primer Plus, 6th Edition1.1. Download the source code files1.2. 下载源代码文件 2. C Primer Plus, Sixth Edition (PDF)3. Table of ContentsReferences 1. C Primer Plus, 6th Edition C Primer Plus, 6th Editi…

瑞_23种设计模式_享元模式

文章目录 1 享元模式&#xff08;Flyweight Pattern&#xff09;1.1 介绍1.2 概述1.3 享元模式的结构1.4 享元模式的优缺点1.5 享元模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;Integer类&#xff09; &#x1f64a; …

09 OpenCV图像的形态学运算

文章目录 形态学处理算子示例 形态学处理 算子 形态学算子 void morphologyEx( InputArray src, OutputArray dst,int op, InputArray kernel,Point anchor Point(-1,-1), int iterations 1,int borderType BORDER_CONSTANT,const Scalar& borderValue morphologyDefau…

【Linux】Linux系统磁盘分区和挂载相关命令介绍

Linux系统磁盘分区和挂载相关命令介绍 文章目录 Linux系统磁盘分区和挂载相关命令介绍磁盘分区1、使用fdisk创建分区2、使用parted创建分区 格式化分区分区挂载自动挂载其他常见&#xff08;用&#xff09;的磁盘相关命令 在Linux系统中&#xff0c;磁盘分区和磁盘挂载是管理存…

GitLab EE 企业版破解

在当今数字化时代&#xff0c;软件开发与团队协作已经成为现代企业不可或缺的一部分。而在这个过程中&#xff0c;版本控制、协作和持续集成等工具的运用变得至关重要。GitLab作为一个领先的、完整的DevOps平台&#xff0c;为团队提供了一个集成的解决方案&#xff0c;使得软件…

百度AI,能否“投”出未来?

图片&#xff5c;freeflo.ai ©自象限原创 作者丨程心、罗辑 2月28日&#xff0c;百度发布了2023年四季度财报及全年未经审计的财务报告&#xff0c;AI大模型带来的收入和利润成为最大的亮点。 财报显示&#xff0c;2023年百度集团总营收达1345.98亿元&#xff0c;同比增…

如何创建MinIO存储服务公网地址实现固定TCP域名异地远程访问——“cpolar内网穿透”

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统&#xff0c;它可以100%的运行在标准硬件上&#xff0c;即X86等…