一、项目背景:图书馆的“老问题”该用新技术解决了
谁没在图书馆遇到过这些麻烦?找一本书翻遍书架找不到,借完书忘了还超期罚款,想续借还要跑一趟图书馆…之前跟学校图书馆管理员聊过,传统图书管理全靠人工登记,借还记录写满厚厚几大本,查一本旧记录要翻半天;读者丢了借阅证补证还要等审批,库存不准导致读者白跑一趟的情况也常有。
传统模式效率低、易出错,还跟不上现在读者“线上化”的需求。所以我选了智慧图书管理系统作为毕业设计,想用Spring Boot+Vue这些技术,把图书管理从“纸质化”搬到“线上化”,实现图书管理、读者管理、借还记录跟踪全流程数字化,让管理员少跑腿、读者少等待。
二、技术选型:稳定好用比“花里胡哨”更重要
做毕业设计不是炫技,技术栈要选成熟、好上手、资料多的,遇到问题能快速找到解决方案。我最终确定的技术组合,都是计算机专业常学的工具,开发过程中踩的坑也少:
| 技术模块 | 具体工具/技术 | 核心作用 |
|---|---|---|
| 后端框架 | Spring Boot | 处理核心业务逻辑,比如图书借还、读者信息管理的接口开发 |
| 前端框架 | Vue.js | 做用户界面,像图书列表、借还记录查询页面,交互流畅还能适配电脑和手机 |
| 数据库 | MySQL 8.0 | 存图书、读者、借还记录这些数据,支持多表关联查询,安全性也够 |
| 开发工具 | IDEA | 写代码的主力,代码提示、Debug功能超实用,比Eclipse更顺手 |
| 服务器 | Tomcat | 部署系统用的轻量级服务器,本地测试和学校服务器都能跑,配置简单 |
三、项目开发全流程:从“需求”到“能用”的6个关键步骤
3.1 第一步:需求分析——先搞懂“谁用、用什么”
做系统前先问自己两个问题:谁用这个系统?他们需要什么功能?我调研了学校图书馆的3位管理员和20多个常去借书的同学,梳理出核心需求:
3.1.1 双角色权限:管理员和读者各司其职
- 管理员:管图书(新增、下架、调整库存)、管读者(注册、重置密码、补录信息)、管借还记录(查看超期未还、处理续借申请)、管论坛(审核帖子、删除违规内容),还要能统计数据(比如哪类书借的人最多);
- 读者:查图书(搜书名、作者快速找书)、借还书(线上预约借阅、查看自己的借还记录)、互动(给图书留言、在论坛交流读书心得)、个人中心(改密码、补全个人信息)。
3.1.2 非功能需求:系统要“好用、稳定”
- 操作简单:管理员年纪大也能快速上手,读者不用学就能查书、借书;
- 响应快:查图书、提交借还申请别卡顿,图书馆网不好也能正常用;
- 数据安全:读者身份证号、手机号这些隐私信息要加密,借还记录不能丢;
- 容错性强:比如读者输错书名不会报错,会提示“未找到相关图书”。
3.2 第二步:系统设计——把需求“画成图、拆成模块”
3.2.1 功能结构设计:清晰划分模块,不混乱
我把系统拆成“管理员后台”和“读者前台”两大块,每个模块下再分具体功能,用结构图一画,逻辑立马清晰:
- 管理员后台:图书管理、读者管理、借还记录管理、论坛管理、留言管理;
- 读者前台:图书查询、图书借阅、个人借还记录、在线论坛、图书留言。
3.2.2 数据库设计:核心表要“覆盖全、关联对”
数据库是系统的“地基”,表设计错了后期改起来超麻烦。我根据需求设计了7张核心表,每张表的字段都反复核对,确保能存全数据还不冗余:
| 表名 | 核心字段 | 作用 |
|---|---|---|
| 图书表(tushu) | id、图书编号、书名、作者、出版社、库存、是否上架 | 存所有图书的基础信息 |
| 读者表(duzhe) | id、读者编号、姓名、手机号、身份证号、头像、读者类型 | 存读者的注册和身份信息 |
| 借还记录表(tushu_jieyue) | id、图书id、读者id、借阅时间、还书时间、状态(已借/已还/超期) | 跟踪每本书的借还情况 |
| 图书留言表(tushu_liuyan) | id、图书id、读者id、留言内容、回复内容、留言时间 | 存读者对图书的留言和管理员回复 |
| 论坛表(forum) | id、帖子标题、读者id、内容、帖子类型、发布时间 | 存读者发布的论坛帖子 |
| 图书收藏表(tushu_collection) | id、图书id、读者id、收藏时间 | 存读者收藏的图书,方便下次查找 |
| 管理员表(admin) | id、用户名、密码、角色、新增时间 | 存管理员账号信息,控制后台访问权限 |
3.3 第三步:后端开发——写接口,处理“数据逻辑”
后端重点是写接口,比如“读者借阅图书”“管理员新增图书”这些操作,都要通过接口把数据存到数据库,再返回结果给前端。这里放两段核心代码示例,都是实际跑通的:
// 图书借阅接口
@RestController
@RequestMapping("/api/borrow")
public class BorrowController {
@Autowired
private BorrowService borrowService;
// 读者借阅图书
@PostMapping("/add")
public Result borrowBook(@RequestBody BorrowDTO borrowDTO, HttpSession session) {
// 获取当前登录读者ID
Reader reader = (Reader) session.getAttribute("loginReader");
if (reader == null) {
return Result.error("请先登录");
}
// 检查图书库存是否充足
Book book = borrowService.getBookById(borrowDTO.getBookId());
if (book.getStock() <= 0) {
return Result.error("该图书库存不足,无法借阅");
}
// 调用服务层处理借阅逻辑(新增借还记录、减少库存)
boolean flag = borrowService.addBorrowRecord(borrowDTO, reader.getId());
if (flag) {
return Result.success("借阅成功,请到图书馆取书");
} else {
return Result.error("借阅失败,请重试");
}
}
// 查看读者个人借还记录
@GetMapping("/myRecord")
public Result getMyBorrowRecord(HttpSession session) {
Reader reader = (Reader) session.getAttribute("loginReader");
if (reader == null) {
return Result.error("请先登录");
}
List<BorrowRecord> recordList = borrowService.getRecordByReaderId(reader.getId());
return Result.success("查询成功", recordList);
}
}
3.4 第四步:前端开发——做界面,让“用户能用”
前端不用搞复杂特效,重点是“清晰、好操作”。我用Vue组件化开发,比如“图书卡片”“分页组件”可以重复用,省了不少代码:
3.4.1 核心界面展示
- 管理员图书管理页:能搜书名、按类型筛选图书,点击“增加库存”“下架”就能操作,还能看每本书的借还次数;
- 读者图书查询页:顶部有搜索框,输“Python”就能找出所有相关图书,点击图书卡片能看详情、预约借阅;
- 借还记录页:读者能看自己的借阅记录,超期未还的会标红提醒,还能直接提交续借申请。
3.4.2 设计小技巧
- 用蓝色系配色,贴合图书馆“安静、专业”的氛围;
- 按钮位置放显眼处,比如“借阅”“续借”按钮用橙色,一眼就能看到;
- 适配手机端,读者在图书馆用手机也能查书、看借还记录。
3.5 第五步:系统测试——把“bug”提前找出来
系统做完不能直接交,得测试功能好不好使。我用“黑盒测试”(不管代码逻辑,只看操作结果),测了10多个关键场景,比如:
| 测试场景 | 测试操作 | 预期结果 | 实际结果 |
|---|---|---|---|
| 管理员登录 | 输正确账号密码 | 登录成功,进入后台 | 功能正常 ✅ |
| 读者借阅图书 | 选库存充足的书提交借阅 | 借阅成功,库存减少1 | 功能正常 ✅ |
| 超期提醒 | 借阅时间超过30天 | 记录标红,提示“超期未还” | 功能正常 ✅ |
| 密码修改 | 输错旧密码 | 提示“旧密码错误” | 功能正常 ✅ |
测试时也遇到过bug,比如“读者借完书库存没减少”,后来发现是没加事务管理,借还记录新增成功但库存更新失败,加了@Transactional注解就解决了;还有“手机端看图书列表排版乱”,用了Vue的响应式布局就好了。
3.6 第六步:部署上线——让“系统能用起来”
最后把系统部署到学校实验室的服务器上,图书馆管理员和同学都能通过校园网访问。还做了这些优化:
- 数据备份:每天自动备份MySQL数据库,防止借还记录丢失;
- 权限控制:管理员账号只能在图书馆IP段登录,防止外人篡改数据;
- 操作手册:写了简单的使用说明,贴在图书馆公告栏,方便管理员参考。
四、毕业设计复盘:踩过的坑和收获
4.1 那些“踩过的坑”
- 数据库表关联错了:一开始图书表和借还记录表没加外键,导致查某本书的借还记录时查不出来,后来加了外键关联才解决;
- 前端后端对接跨域:Vue前端调Spring Boot接口时提示“跨域错误”,在后端加了CORS配置,允许前端域名访问就好了;
- 超期逻辑没考虑全:一开始只判断“是否超期”,没算超期罚款金额,后来加了“超期天数×0.5元”的计算逻辑,才符合图书馆要求。
4.2 最大的收获
从一开始对着需求文档发呆,到后来能独立解决bug,甚至给管理员演示系统,感觉自己的编程能力和解决问题的能力都提升了不少。答辩时老师说“这个系统很实用,能真正解决图书馆的问题”,听到这话真的很开心!
五、项目资源:给学弟学妹的参考
做毕业设计时特别希望有前人的资料参考,所以我整理了这些资源,有需要的可以拿走:
- 完整源代码(后端Spring Boot+前端Vue);
- 数据库脚本(直接导入MySQL就能用,含测试数据);
- 答辩PPT(包含系统演示视频,还有我踩过的坑和解决方法);
- 操作手册(给管理员和读者的使用说明,图文并茂)。
做这个系统的过程,让我明白“好的项目不是功能越多越好,而是能解决实际问题”。如果你的毕业设计也想做管理系统,建议从身边的需求入手,比如校园、图书馆、社区,不用做太复杂,把核心功能做好、做稳定,就是一个好项目。
如果这篇分享对你有帮助,欢迎点赞收藏,有问题也可以评论区问我,看到会回复!祝大家毕业设计顺利通过!🎓