基于SpringBoot2+vue2的图书管理系统
温馨提示:
本文最后更新于 2026年05月28日,已超过 13 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1. 资源
浏览全文可获取
2. 项目简介
图书管理系统,系统实现了图书信息管理、借阅信息管理、用户管理、论坛交流、公告信息发布等核心功能。系统包含前台用户端和后台管理端,前台用户可浏览图书、发起借阅、参与论坛讨论等,后台管理员可对图书、用户、借阅记录、公告、论坛等进行全面管理。
项目提供数据库脚本(MySQL)、后端Spring Boot工程、前端后台管理界面(基于Vue.js)以及前台用户界面(基于layui/html)。系统整体采用B/S架构,支持多角色登录(管理员、普通用户)。
3. 技术栈
| 技术分类 | 框架/工具 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.2.2.RELEASE | 提供RESTful API、依赖管理等 |
| ORM框架 | Mybatis-Plus 2.3 | 简化数据库操作,提供分页、条件构造器 |
| 安全框架 | Apache Shiro 1.3.2 | 权限控制(基于Token的登录验证) |
| 数据库 | MySQL 5.7 | 存储业务数据 |
| 前端管理端 | Vue.js + Element UI | 构建后台管理界面,支持动态路由与权限 |
| 前台用户端 | layui、jQuery、Vue.js、HTML/CSS | 构建用户端页面,响应式设计 |
| 工具库 | Hutool、Fastjson、POI、commons-lang3等 | 简化开发、处理Excel、JSON等 |
4. 详细介绍
4.1 功能模块
4.1.1 图书信息管理
- 图书信息包括:图书编号(唯一)、图书标题、图书类型、图书封面、图书作者、图书出版社、所在书架、图书数量、图书详情。
- 管理员可进行图书的增删改查,前台用户可查看图书列表和详情。
- 图书数量在借阅时自动减少,归还时自动增加。
4.1.2 借阅信息管理
- 用户登录后可借阅图书,需选择借阅天数(正整数)。系统自动记录借阅时间,并更新对应图书库存(图书数量-1)。
- 借阅状态分为“未还”和“已还”。管理员可管理借阅记录,用户可查看自己的借阅历史。
- 归还图书时,系统将借阅状态改为“已还”,并增加对应图书数量。
4.1.3 用户管理
- 普通用户需注册登录,注册时需填写账户、密码、姓名、性别、联系方式、身份证号、邮箱等。系统校验唯一性(账户、手机、身份证号)。
- 用户可登录前台,修改个人信息、头像、密码。
- 管理员可查看、编辑、删除用户(软删除,yonghu_delete字段标记)。
4.1.4 论坛管理
- 用户和管理员均可发布帖子(主题帖)和回帖。帖子状态分为“发帖”和“回帖”。
- 前台显示帖子列表,支持查看详情及评论(回帖)。
- 管理员可管理论坛内容(删除等)。
4.1.5 公告信息管理
- 管理员可发布公告,包括标题、类型、图片、内容等。
- 前台用户可查看公告列表和详情。
4.1.6 基础数据管理
- 系统使用字典表(dictionary)统一管理图书类型、出版社、书架、性别、借阅状态、公告类型等枚举值。管理员可动态增删改这些选项。
4.1.7 系统管理
- 轮播图管理(config表):管理员可配置前台首页轮播图片。
- 管理员管理(users表):系统内置管理员账号(admin/admin),可增删管理员。
4.2 数据库设计核心表
| 表名 | 说明 |
|---|---|
yonghu |
用户表(账户、密码、姓名、联系方式等) |
tushu |
图书信息表(编号、名称、作者、出版社、数量等) |
tushujieyue |
借阅信息表(图书ID、用户ID、借阅天数、状态) |
forum |
论坛表(帖子标题、内容、父ID、发帖人类型等) |
news |
公告信息表(标题、类型、图片、内容) |
dictionary |
字典表(存储所有下拉选项) |
config |
配置表(轮播图等) |
users |
管理员表 |
token |
登录token记录表 |
5. 部分代码
5.1 借阅信息Controller(核心业务)
文件位置:com.controller.TushujieyueController
/**
* 前端保存(用户借阅图书)
*/
@RequestMapping("/add")
public R add(@RequestBody TushujieyueEntity tushujieyue, HttpServletRequest request){
// 校验是否已存在相同借阅记录
Wrapper<TushujieyueEntity> queryWrapper = new EntityWrapper<TushujieyueEntity>()
.eq("tushu_id", tushujieyue.getTushuId())
.eq("yonghu_id", tushujieyue.getYonghuId())
.eq("tushujieyue_shijian", tushujieyue.getTushujieyueShijian())
.eq("tushujieyue_types", tushujieyue.getTushujieyueTypes());
TushujieyueEntity tushujieyueEntity = tushujieyueService.selectOne(queryWrapper);
if(tushujieyueEntity==null){
tushujieyue.setInsertTime(new Date());
tushujieyue.setCreateTime(new Date());
tushujieyueService.insert(tushujieyue);
// 减少图书库存
TushuEntity tushuEntity = tushuService.selectById(tushujieyue.getTushuId());
tushuEntity.setTushuNumber(tushuEntity.getTushuNumber() - 1);
tushuService.updateById(tushuEntity);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改(管理员还书操作)
*/
@RequestMapping("/update")
public R update(@RequestBody TushujieyueEntity tushujieyue, HttpServletRequest request){
// ... 校验逻辑省略
tushujieyueService.updateById(tushujieyue);
// 归还图书:增加库存
TushuEntity tushuEntity = tushuService.selectById(tushujieyueService.selectById(tushujieyue.getId()).getTushuId());
tushuEntity.setTushuNumber(tushuEntity.getTushuNumber() + 1);
tushuService.updateById(tushuEntity);
return R.ok();
}
5.2 用户登录Controller
文件位置:com.controller.YonghuController
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));
if(yonghu==null || !yonghu.getPassword().equals(password))
return R.error("账号或密码不正确");
else if(yonghu.getYonghuDelete() != 1)
return R.error("账户已被删除");
String token = tokenService.generateToken(yonghu.getId(),username, "yonghu", "用户");
R r = R.ok();
r.put("token", token);
r.put("role","用户");
r.put("username",yonghu.getYonghuName());
r.put("tableName","yonghu");
r.put("userId",yonghu.getId());
return r;
}
5.3 图书信息实体类(片段)
文件位置:com.entity.TushuEntity
@TableName("tushu")
public class TushuEntity<T> implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private String tushuUuidNumber; // 图书编号
private String tushuName; // 图书标题
private Integer tushuTypes; // 图书类型(字典)
private String tushuPhoto; // 图书封面
private String tushuZuozhe; // 图书作者
private Integer chubansheTypes; // 图书出版社
private Integer shujiaTypes; // 所在书架
private Integer tushuNumber; // 图书数量
private String tushuContent; // 图书详情
private Date insertTime; // 发布时间
private Date createTime; // 创建时间
// getter/setter 省略
}
5.4 数据库配置(application.yml)
server:
port: 8080
servlet:
context-path: /tushuguanli
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/tushuguanli?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: 123456
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
typeAliasesPackage: com.entity
configuration:
map-underscore-to-camel-case: true
6. 部分截图























7. 项目总结
本项目实现了一个功能完整的图书管理系统,涵盖图书管理、借阅管理、用户管理、论坛交流及公告发布等核心业务。系统采用前后端分离架构:后端基于Spring Boot + Mybatis-Plus,提供RESTful API;前端后台使用Vue.js + Element UI,前台用户端使用layui/html。通过Token实现用户认证,字典表动态管理枚举值,提高了系统的灵活性和可维护性。
项目的主要亮点包括:
- 借阅与库存联动:用户借书时自动扣减图书数量,还书时自动增加,保证数据一致性。
- 多角色权限:管理员和普通用户具有不同的功能菜单和操作权限。
- 论坛交流功能:支持主题帖和回帖,增强用户互动。
- 基础数据可配置:图书类型、出版社、书架、公告类型等均通过字典表管理,管理员可在后台动态添加修改。
该项目可作为中小型图书馆信息化管理的参考实现,也可以作为毕业设计或课程设计的完整案例。后续可扩展更多功能,如图书预约、逾期罚款、邮件通知、数据统计分析等。
正文到此结束
- 本文标签: Java Spring Boot 毕业设计
- 本文链接: https://blog.xiaobias.com/article/20
- 版权声明: 本文由十五喵原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
