# SpringBoot-图书管理系统 **Repository Path**: howstrong/book-management-system ## Basic Information - **Project Name**: SpringBoot-图书管理系统 - **Description**: SpringBoot-图书管理系统 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 66 - **Forks**: 9 - **Created**: 2024-10-17 - **Last Updated**: 2025-09-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, Java, 管理系统 ## README # 图书管理系统 ## 项目介绍 本项目是一个全面、高效、用户友好的图书管理系统,旨在为图书馆提供现代化的管理解决方案。系统通过前后端分离的架构,实现了用户、图书管理员和系统管理员三类角色的多样化功能,并通过一系列技术亮点提升了用户体验和管理效率。其主要有三大使用者:用户(借阅人)、图书管理员、系统管理员。 ## 功能和特性 ### 用户功能 1)图书查询功能:分页构造器缓解数据过大压力,后端可设置请求数防止爬虫请求数过大,服务器负载过大。模糊查询进行字段搜索。表格均**可导出 PDF 和 EXCEL**。 2)读者规则功能:查询现有的借阅规则,借阅规则包括:借阅编号,可借阅图书数量,可借阅天数,可借阅图书馆,过期扣费/天。 3)查看公告: 可以查询图书管理员发布的公告列表,**文字滑动效果**。 4)个人信息: 可以查看个人的借阅证编号,借阅证姓名,规则编号,状态,可以修改个人账户的密码。 5)借阅信息: 可以查看自身借阅过的图书记录和归还情况。 6)违章信息: 可以查询自身归还的图书是否有违章信息。 7)读者留言: 实现留言功能并以**弹幕形式**显示。 ### 图书管理员功能 1)借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间,点击借阅。 2)归还图书: 输入图书编号查看图书是否逾期,并且可以设置违规信息,然后选择是否归还图书。 3)借书报表: 用于查询已经借阅并归还的书籍列表,同样使用分页构造器和模糊查询字段,显示借阅证编号,图书编号,借阅日期,截止日期,归还日期,违章信息,处理人。 4)还书报表: 用于查询已经借阅但是还未归还的书籍列表,显示借阅证编号,图书编号,借阅日期,截止日期。 5)发布公告: 可以查询当前发布的公告列表,并进行删除,修改,增加功能,分页构造器用于缓解数据量大的情况。 ### 系统管理员功能 1)书籍管理: 可以查询当前的所有图书,显示图书编号,图书昵称,作者,图书馆,分类,位置,状态,描述。可以进行添加,修改,删除图书。利用分页构造器实现批量查询。利用模糊查询实现图书搜索功能。**利用插件实现 PDF 和 EXCEL 导出**。 2)书籍类型: 显示查询当前的所有图书类型,可以进行添加,修改,删除图书类型,利用分页构造器实现批量查询,缓解数据压力。 3)借阅证管理: 可以查询当前的所有借阅证列表,也就是用户数量,可以进行添加,修改,删除操作。同样实现分页。 4)借阅信息查询: 可以查询当前已经完成借阅和归还的记录,显示借阅证号,书籍编号,借阅日期,截止日期,归还日期,违章信息,处理人。分页功能,PDF 和 EXCEL 导出。 5)借阅规则管理: 可以查询当前所有的借阅规则,显示限制借阅天数,限制本数,限制图书馆,逾期费用,可以进行添加、删除、修改操作。 6)图书管理员管理: 显示当前的图书管理员列表,显示账号,姓名,邮箱,可以进行添加、删除、修改操作。 7)系统管理: 可以查询一个月内的借阅量,以一周为时间间隔,计算借阅量,**用 Echarts 实现各种图表的展示**。 8)系统分析:可以上传某个时间段的借阅量和日期,并且输入分析目标和想要生成的图表类型,等待一段时间后,**AI 将会给出分析结论和可视化图表**。 ## 运行方式 ### 2 分钟快速上手使用项目 1)找到 SpringBoot 启动类,点击运行 ![](assets/202403041925113.png) 2)打开 Knife4J 注册用户,或者可以直接找我拿数据库模拟数据(简易)。 ![](assets/202403041925196.png) ![](assets/202403041925244.png) 3)前端输入表单内容后点击登录即可成功,开始愉快使用功能~ ![](assets/202403041925792.png) ![](assets/202403041925648.png) ## 部署方式 + 主要使用Vue2和SpringBoot2实现 + 项目权限控制分别为:用户借阅,图书管理员,系统管理员 + 开发工具:IDEA + 用户账号密码: 相思断红肠 123456 + 图书管理员账号密码: admin 123456 + 系统管理员账号密码: root 123456 ### 前置条件 **前端** 软件:Vscode 环境:Node 版本 16 或者 18(推荐) **注:千万别选 18 以上的版本!** **后端** 软件: IDEA(推荐) 环境:MySQL 8.0(推荐)Redis(可选) ### 前端部署 1)点击克隆/下载项目,会使用 Git 进行版本控制的,推荐 Git Clone,不会的小伙伴可以选择下载一个 Zip 压缩包,然后解压到自己电脑的 D 盘,推荐直接 Star,后续直接向我拿数据库模拟文件和 API 接口文档。 ![](assets/202403041926975.png) 2)利用 Vscode 或者 Webstorm 打开前端页面,配置 Configuration。配置 Node 环境和包管理工具即可,我这边选择的包管理工具是 Npm,其他包管理工具如:Yarn、Cnpm、Pnpm 皆可。 **注:注意更改 Npm 的镜像地址为淘宝的新镜像地址,否则会出现 Npm Install 一直卡进度条的情况。** 3)直接点击 dev 的运行,或者打开控制台,输入 npm run serve 即可成功启动前端项目。 ```shell npm config set registry https://registry.npmmirror.com/ ``` ![](assets/202403041926892.png) ![](assets/202403041926931.png) ![](assets/202403041926639.png) 4)将图片链接进行自定义切换,可以切换为你自己的图床的图片链接,比如七牛云、GitHub 等,也可以寻找在线图片,复制百度文库图片链接(多试几次,有些图片有防盗链)。**更换背景后,可以看到右下角的权限切换小图标。** ![](assets/202403041926849.png) ![](assets/202403041926100.png) ### 后端部署 用 IDEA 打开后端项目,找到 application-dev.yml 文件,修改其中的 MySQL 配置,保证用户名和密码正确,注:密码不能以数字 0 开头。 ![](assets/202403041926672.png) 4)导入 Maven 依赖,注意看自己的 Maven 版本是否正确,建议选择跟我一样的,3.8以上的版本,发现依赖导入很慢,是因为没有配置国内镜像,默认连接的是国外服务器,因此阿里云镜像配置可以看这篇博客。[CSDN Maven 配置教程](https://blog.csdn.net/lianghecai52171314/article/details/102625184?ops_request_misc=&request_id=&biz_id=102&utm_term=Maven) ![](assets/202403041926747.png) 5)找到 SpringBoot 启动类,我建议用 Debug 模式启动项目,更好排查错误。 ![](assets/202403041926037.png) 6)如果遇到错误,大概率可能是 JDK 版本问题,我项目用的是 JDK 8,建议选择与我相同版本。 ![](assets/202403041926752.png) ![](assets/202403041926887.png) 7)成功启动项目效果展示如下 ![](assets/202403041926993.png) ### 前后端联调 1)如果需要修改端口和前缀(比如/api),需要同时修改前端和后端。 ![](assets/202403041926975.png) ![](assets/202403041926787.png) ## 技术选型 ### 前端 | **技术** | **作用** | **版本** | | ---------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- | | Vue | 提供前端交互 | 2.6.14 | | Vue-Router | 路由式编程导航 | 3.5.1 | | Element-UI | 模块组件库,绘制界面 | 2.4.5 | | Axios | 发送ajax请求给后端请求数据 | 1.2.1 | | core-js | 兼容性更强,浏览器适配 | 3.8.3 | | swiper | 轮播图插件(快速实现) | 3.4.2 | | vue-baberrage | vue弹幕插件(实现留言功能) | 3.2.4 | | vue-json-excel | 表格导出Excel | 0.3.0 | | html2canvas+jspdf | 表格导出PDF | 1.4.1 2.5.1 | | node-polyfill-webpack-plugin | webpack5中移除了nodejs核心模块的polyfill自动引入 | 2.0.1 | | default-passive-events | **Chrome** 增加了新的事件捕获机制 **Passive Event Listeners**(被动事件侦听器) | 让页面滑动更加流畅,主要用于提升移动端滑动行为的性能 | | nprogress | 发送请求显示进度条(人机交互友好) | 0.2.0 | | echarts | 数据转图标的好工具(功能强大) | 5.4.1 | | less lessloader | 方便样式开发 | 4.1.3 11.1.0 | ### 后端 | **技术及版本** | **作用** | **版本** | | ------------------------------------ | ------------------------------------------------------------ | --------------------------------- | | SpringBoot | 应用开发框架 | 2.7.8 | | JDK | Java 开发包 | 1.8 | | MySQL | 提供后端数据库 | 8.0.23 | | MyBatisPlus | 提供连接数据库和快捷的增删改查 | 3.5.1 | | SpringBoot-Configuration-processor | 配置处理器 定义的类和配置文件绑定一般没有提示,因此可以添加配置处理器,产生相对应的提示. | | | SpringBoot-Starter-Web | 后端集成Tomcat MVC | 用于和前端连接 | | SpringBoot-starter-test | Junit4单元测试前端在调用接口前,后端先调用单元测试进行增删改查,注意Junit4和5的问题,注解@RunWith是否添加 | | | Lombok | 实体类方法的快速生成 简化代码 | | | mybatis-plus-generator | 代码生成器 | 3.5.1 | | MyBatisX | MyBatisPlus插件直接生成mapper,实体类,service | | | jjwt | token工具包 | 0.9.0 | | fastjson | 阿里巴巴的 JSON 工具类 | 1.2.83 | | hutool | hutool工具包(简化开发工具类) | [文档](https://hutool.cn/docs/#/) | | knife4j-openapi2-spring-boot-starter | Knife4j 在线接口文档测试工具 | 4.0.0 | | gson | 谷歌的 JSON 工具类 | 2.8.5 | | Java-WebSocket | 讯飞星火 AI 配置 | 1.3.8 | | okhttp | 讯飞星火 AI 配置 | 4.10.0 | | okio | 讯飞星火 AI 配置 | 2.10.0 | | jsoup | 简易爬虫工具 | 1.15.3 | | guava | 谷歌工具类 | 30.1-jre | | spring-boot-starter-data-redis | Redis 的 Starter | | | broadscope-bailian-sdk-java | 阿里云 AI 模型 | 1.1.7 | | spring-boot-starter-websocket | WebSocket 的 Starter | | ## 架构 ![](assets/202403061541028.png) ## 项目详细介绍 ### a. 用户模块功能介绍 ![](assets/202403021406815.png) + 图书查询功能:分页构造器缓解数据过大压力,后端可设置请求数防止爬虫请求数过大,服务器负载过大。模糊查询进行字段搜索。表格均可导出PDF和EXCEL。 + 读者规则功能:查询现有的借阅规则,借阅规则包括:借阅编号,可借阅图书数量,可借阅天数,可借阅图书馆,过期扣费/天。 + 查看公告: 可以查询图书管理员发布的公告列表,文字滑动效果。 + 个人信息: 可以查看个人的借阅证编号,借阅证姓名,规则编号,状态,可以修改个人账户的密码。 + 借阅信息: 可以查看自身借阅过的图书记录和归还情况。 + 违章信息: 可以查询自身归还的图书是否有违章信息。 + 读者留言: 实现留言功能并以弹幕形式显示。 ### b. 图书管理员模块功能介绍 ![](assets/202403021406227.png) + 借阅图书: 图书管理员输入借阅证号(用户)和要借的图书编号和当前的时间,点击借阅。 + 归还图书: 输入图书编号查看图书是否逾期,并且可以设置违规信息,然后选择是否归还图书 + 借书报表: 用于查询已经借阅并归还的书籍列表,同样使用分页构造器和模糊查询字段,显示借阅证编号,图书编号,借阅日期,截止日期,归还日期,违章信息,处理人。 + 还书报表: 用于查询已经借阅但是还未归还的书籍列表,显示借阅证编号,图书编号,借阅日期,截止日期。 + 发布公告: 可以查询当前发布的公告列表,并进行删除,修改,增加功能,分页构造器用于缓解数据量大的情况。 ### c. 系统管理员模块功能介绍 ![](assets/202403021406443.png) + 书籍管理: 可以查询当前的所有图书,显示图书编号,图书昵称,作者,图书馆,分类,位置,状态,描述。可以进行添加,修改,删除图书。利用分页构造器实现批量查询。利用模糊查询实现图书搜索功能。利用插件实现PDF和EXCEL导出。 + 书籍类型: 显示查询当前的所有图书类型,可以进行添加,修改,删除图书类型,利用分页构造器实现批量查询,缓解数据压力。 + 借阅证管理: 可以查询当前的所有借阅证列表,也就是用户数量,可以进行添加,修改,删除操作。同样实现分页。 + 借阅信息查询: 可以查询当前已经完成借阅和归还的记录,显示借阅证号,书籍编号,借阅日期,截止日期,归还日期,违章信息,处理人。分页功能,PDF和EXCEL导出。 + 借阅规则管理: 可以查询当前所有的借阅规则,显示限制借阅天数,限制本数,限制图书馆,逾期费用,可以进行添加、删除、修改操作。 + 图书管理员管理: 显示当前的图书管理员列表,显示账号,姓名,邮箱,可以进行添加、删除、修改操作。 + 系统管理: 可以查询一个月内的借阅量,以一周为时间间隔,计算借阅量,用Echarts实现折线图的展示。 ## 数据库表设计 ### t_users表 | 列名 | 数据类型以及长度 | 备注 | | ----------- | ---------------- | ------------------------------------------------- | | user_id | int(11) | 主键 非空 自增 用户表的唯一标识 | | username | varchar(32) | 用户名 非空 | | password | varchar(32) | 密码(MD5加密) 非空 | | card_name | varchar(10) | 真实姓名 非空 | | card_number | Bigint(11) | 借阅证编号 固定 11位随机生成 非空(后文都改BigInt) | | rule_number | int(11) | 规则编号 可以自定义 也就是权限功能 | | status | int(1) | 1表示可用 0表示禁用 | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_admins表 | 列名 | 数据类型以及长度 | 备注 | | ----------- | ---------------- | --------------------------------- | | admin_id | int(11) | 主键 非空 自增 管理员表的唯一标识 | | username | varchar(32) | 用户名 非空 | | password | varchar(32) | 密码(MD5加密) 非空 | | admin_name | varchar(10) | 管理员真实姓名 非空 | | status | int(1) | 1表示可用 0表示禁用 | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_book_admins表 | 列名 | 数据类型以及长度 | 备注 | | --------------- | ---------------- | ------------------------------- | | book_admin_id | int(11) | 主键 非空 自增 管理表的唯一标识 | | username | varchar(32) | 用户名 非空 | | password | varchar(32) | 密码(MD5加密)非空 | | book_admin_name | varchar(10) | 图书管理员真实姓名 非空 | | status | int(1) | 1表示可用 0表示禁用 | | email | varchar(255) | 电子邮箱 | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_books表 | 列名 | 数据类型以及长度 | 备注 | | ---------------- | ---------------- | ------------------------------- | | book_id | int(11) | 主键 自增 非空 图书表的唯一标识 | | book_number | int(11) | 图书编号 非空 图书的唯一标识 | | book_name | varchar(32) | 图书名称 非空 | | book_author | varchar(32) | 图书作者 非空 | | book_library | varchar(32) | 图书所在图书馆的名称 非空 | | book_type | varchar(32) | 图书类别 非空 | | book_location | varchar(32) | 图书位置 非空 | | book_status | varchar(32) | 图书状态(未借出/已借出) | | book_description | varchar(100) | 图书描述 | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_books_borrow表 | 列名 | 数据类型以及长度 | 备注 | | ----------- | ---------------- | ------------------------------------------------------------ | | borrow_id | int(11) | 主键 自增 非空 借阅表的唯一标识 | | card_number | int(11) | 借阅证编号 固定 11位随机生成 非空 用户与图书关联的的唯一标识 | | book_number | int(11) | 图书编号 非空 图书的唯一标识 | | borrow_date | datetime | 借阅日期 Java注解 JsonFormatter | | close_date | datetime | 截止日期 Java注解 JsonFormatter | | return_date | datetime | 归还日期 Java注解 JsonFormatter | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_notice表 | 列名 | 数据类型以及长度 | 备注 | | --------------- | ---------------- | ----------------------------------- | | notice_id | int(11) | 主键 非空 自增 公告表记录的唯一标识 | | notice_title | varchar(32) | 公告的题目 非空 | | notice_content | varchar(255) | 公告的内容 非空 | | notice_admin_id | int(11) | 发布公告的管理员的id | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_violation表 | 列名 | 数据类型以及长度 | 备注 | | ------------------ | ---------------- | ----------------------------------- | | violation_id | int(11) | 主键 非空 自增 违章表记录的唯一标识 | | card_number | int(11) | 借阅证编号 固定 11位随机生成 非空 | | book_number | int(11) | 图书编号 非空 图书的唯一标识 | | borrow_date | datetime | 借阅日期 Java注解 JsonFormatter | | close_date | datetime | 截止日期 Java注解 JsonFormatter | | return_date | datetime | 归还日期 Java注解 JsonFormatter | | violation_message | varchar(100) | 违章信息 非空 | | violation_admin_id | int(11) | 违章信息管理员的id | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_comment表 | 列名 | 数据类型以及长度 | 备注 | | --------------------- | ---------------- | ----------------------------------- | | comment_id | int(11) | 主键 非空 自增 留言表记录的唯一标识 | | comment_avatar | varchar(255) | 留言的头像 | | comment_barrage_style | varchar(32) | 弹幕的高度 | | comment_message | varchar(255) | 留言的内容 | | comment_time | int(11) | 留言的时间(控制速度) | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_book_rule表 | 列名 | 数据类型以及长度 | 备注 | | ------------------ | ---------------- | ------------------------------------- | | rule_id | int(11) | 主键 非空 自增 借阅规则记录的唯一标识 | | book_rule_id | int(11) | 借阅规则编号 非空 | | book_days | int(11) | 借阅天数 非空 | | book_limit_number | int(11) | 限制借阅的本数 非空 | | book_limit_library | varchar(255) | 限制的图书馆 非空 | | book_overdue_fee | double | 图书借阅逾期后每天费用 非空 | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ### t_book_type表 | 列名 | 数据类型以及长度 | 备注 | | ------------ | ---------------- | ------------------------------------- | | type_id | int(11) | 主键 非空 自增 图书类别记录的唯一标识 | | type_name | varchar(32) | 借阅类别的昵称 非空 | | type_content | varchar(255) | 借阅类别的描述 非空 | | create_time | datetime | 创建时间 Java注解 JsonFormatter | | update_time | datetime | 更新时间 Java注解 JsonFormatter | ## 功能演示图 ### 用户模块功能图 **首页轮播图演示** ![image-20241029174703041](assets/image-20241029174703041.png) **图书查询演示** ![image-20241029174717676](assets/image-20241029174717676.png) **读者规则演示** ![image-20241029174732131](assets/image-20241029174732131.png) **查看公告演示** ![image-20241029174744026](assets/image-20241029174744026.png) **借阅信息演示** ![image-20241029174813337](assets/image-20241029174813337.png) **读者留言演示** ![image-20241029174842700](assets/image-20241029174842700.png) ### 图书管理员功能图 **借阅图书演示** ![image-20241029174932525](assets/image-20241029174932525.png) **归还图书演示** ![image-20241029174945136](assets/image-20241029174945136.png)