摘要
自习室预约管理系统是计算机、软件工程专业热门毕业设计选题,业务场景贴近真实校园需求,模块划分清晰,数据库设计难度适中,便于开展系统设计、编码实现与功能测试。传统自习室管理大多依靠线下登记、人工看管,存在座位资源利用率低、预约冲突、占座无法监管、统计数据难以汇总等问题。普通的预约系统只完成座位增删改查、预约下单、取消预约基础功能,功能同质化严重,答辩阶段容易被质疑缺少创新点。
本文基于 SpringBoot+Vue 前后端分离架构,设计并实现自习室预约管理系统。系统划分管理员、普通用户两类角色,覆盖自习室管理、座位管理、预约申请、签到校验、违规占座记录、预约提醒、数据看板等基础模块。项目创新点在于引入基于用户历史预约行为的协同过滤算法,实现智能座位推荐功能,根据用户常去楼层、偏好座位类型、自习时间段自动推送合适座位,提升座位资源利用率。文章会介绍系统整体架构、数据库设计、核心业务代码,同时说明测试方案与项目答辩要点,适合软件工程、计算机科学与技术专业作为本科毕业设计。
具体教程资源模型请看这一篇文章:https://blog.csdn.net/2603_96706799/article/details/167275556?spm=1001.2014.3001.5501
一、项目概述
1.1 项目背景
随着备考人群持续增长,自习室座位资源紧张问题日益突出。很多自习室缺少数字化预约平台,用户只能提前到现场占座,带来资源浪费、占座纠纷等现象。人工登记方式下,管理员很难实时掌握每个自习室座位占用情况,无法对长时间空座、违规占座行为进行管控。
为解决上述痛点,本系统采用前后端分离方案开发自习室预约管理平台。用户账号登录后,可查看所有自习室实时座位状态,在线预约、签到、取消预约;管理员负责维护自习室、座位信息,查看预约记录,处理违规记录,并且通过可视化数据看板查看每日预约量、座位使用率。增加智能座位推荐模块作为项目创新,使用协同过滤算法分析用户历史自习习惯,为用户推荐匹配度更高的自习座位。
1.2 开发环境
表格
| 项目 | 技术 / 软件 |
| 后端框架 | SpringBoot 2.7.x |
| 前端框架 | Vue2 + Element UI |
| 数据库 | MySQL 8.0 |
| 构建工具 | Maven |
| 接口文档 | Swagger |
| 服务器 | Tomcat |
| 开发工具 | IDEA、VS Code、Navicat |
1.3 系统角色
- 普通用户:注册登录、自习室列表查看、座位预约、签到、取消预约、查看个人预约记录、接收预约提醒、获取智能座位推荐。
- 管理员用户:登录后台,自习室信息管理、座位信息维护、预约记录查询、违规占座管理、统计数据查看、用户信息管理。
二、系统总体架构设计
系统采用经典前后端分离架构,分为表现层、业务逻辑层、数据访问层三层架构。
- 表现层:Vue 前端页面,负责页面渲染、表单提交、展示自习室座位可视化布局,调用后端 RESTful 接口获取数据。
- 业务逻辑层:SpringBoot 服务,处理预约校验、签到判断、违规判定、协同过滤推荐算法逻辑,实现核心业务规则。
- 数据访问层:MyBatis 操作 MySQL 数据库,完成用户、自习室、座位、预约记录等数据持久化。
业务流程:用户前端发起座位预约请求 → 后端接口接收参数 → 业务层校验座位状态、预约时间冲突 → 校验通过写入预约数据表 → 生成预约提醒;智能推荐模块定时读取用户历史预约数据集,计算用户相似度,生成推荐座位列表返回前端。
预览
查看代码
flowchart LR A[用户登录系统] --> B[浏览自习室座位] B --> C{使用智能推荐?} C --是--> D[协同过滤算法计算推荐座位] C --否--> E[手动选择座位] D --> F[提交预约申请] E --> F F --> G[后端校验预约规则] G -->|校验成功| H[生成预约记录] G -->|校验失败| I[返回预约失败提示] H --> J[到店签到] J --> K[自习结束,释放座位]
豆包
你的 AI 助手,助力每日工作学习
三、数据库设计
核心数据表设计(中英文对照)
3.1 user 用户表
表格
| 字段名 | 字段英文 | 类型 | 说明 |
| 主键 id | id | bigint | 主键自增 |
| 用户账号 | username | varchar | 登录账号 |
| 密码 | password | varchar | 加密存储 |
| 姓名 | real_name | varchar | 用户姓名 |
| 手机号 | phone | varchar | 联系电话 |
| 创建时间 | create_time | datetime | 账号创建时间 |
3.2 study_room 自习室表
表格
| 字段名 | 字段英文 | 类型 | 说明 |
| 主键 id | id | bigint | 主键 |
| 自习室名称 | room_name | varchar | 自习室名称 |
| 所在楼层 | floor | int | 楼层编号 |
| 总座位数 | total_seat | int | 该房间总座位 |
| 开放开始时间 | open_start | time | 每日开放起始 |
| 开放结束时间 | open_end | time | 每日关闭时间 |
| 状态 | status | tinyint | 0 停用,1 启用 |
3.3 seat 座位表
表格
| 字段名 | 字段英文 | 类型 | 说明 |
| 主键 id | id | bigint | 主键 |
| 自习室 id | room_id | bigint | 关联自习室 |
| 座位编号 | seat_no | varchar | A01、B02 |
| 座位类型 | seat_type | varchar | 靠窗 / 普通 |
| 座位状态 | seat_status | tinyint | 0 空闲,1 已预约,2 占用 |
3.4 reservation 预约记录表
表格
| 字段名 | 字段英文 | 类型 | 说明 |
| 主键 id | id | bigint | 主键 |
| 用户 id | user_id | bigint | 关联用户 |
| 座位 id | seat_id | bigint | 关联座位 |
| 预约开始时间 | reserve_start | datetime | 预约起始 |
| 预约结束时间 | reserve_end | datetime | 预约结束 |
| 签到状态 | sign_status | tinyint | 0 未签到,1 已签到 |
| 预约状态 | reserve_status | tinyint | 正常 / 取消 / 违规 |
四、核心代码实现
4.1 预约座位业务接口(Controller)
@RestController @RequestMapping("/reservation") public class ReservationController { @Autowired private ReservationService reservationService; /** * 提交座位预约 */ @PostMapping("/add") public Result<?> addReservation(@RequestBody ReservationDTO reservationDTO){ // 参数校验:预约起止时间 if(reservationDTO.getReserveStart().after(reservationDTO.getReserveEnd())){ return Result.error("预约起始时间不能晚于结束时间"); } boolean check = reservationService.checkSeatConflict(reservationDTO); if(!check){ return Result.error("该座位此时间段已被预约,存在冲突"); } reservationService.saveReservation(reservationDTO); return Result.success("预约成功"); } /** * 获取智能推荐座位列表 */ @GetMapping("/recommend/{userId}") public Result<List<SeatVO>> getRecommendSeat(@PathVariable Long userId){ List<SeatVO> recommendList = reservationService.getRecommendSeatByCF(userId); return Result.success(recommendList); } }
4.2 协同过滤推荐核心业务方法(Service)
@Service public class ReservationServiceImpl implements ReservationService { @Autowired private ReservationMapper reservationMapper; @Override public List<SeatVO> getRecommendSeatByCF(Long userId) { // 1.查询当前用户历史预约记录 List<Reservation> historyList = reservationMapper.selectByUserId(userId); if(historyList == null || historyList.size() == 0){ // 无历史记录,返回热门座位 return reservationMapper.selectHotSeat(); } // 2.计算用户相似度,找到兴趣相似用户集合 List<Long> similarUserIds = calculateUserSimilar(userId); // 3.获取相似用户预约过的座位,过滤当前已占用座位 List<SeatVO> candidateSeat = reservationMapper.selectSeatBySimilarUser(similarUserIds); // 4.过滤掉已经被预约的座位,返回推荐结果 return filterAvailableSeat(candidateSeat); } // 计算用户相似度简化实现 private List<Long> calculateUserSimilar(Long userId){ // 基于用户预约的自习室、时间段、座位类型,计算相似度 // 毕设阶段可简化实现,重点体现算法思想 return reservationMapper.getSimilarUserId(userId); } }
4.3 Vue 前端座位预约页面片段
<template> <div class="seat-container"> <el-card title="自习室座位列表"> <el-row :gutter="10"> <el-col :span="4" v-for="item in seatList" :key="item.id"> <el-button :type="item.seat_status===0?'success':'danger'" @click="selectSeat(item)" :disabled="item.seat_status!==0"> {{item.seat_no}} </el-button> </el-col> </el-row> </el-card> <el-card title="智能推荐座位"> <el-table :data="recommendList"> <el-table-column label="自习室名称" prop="roomName"/> <el-table-column label="座位编号" prop="seatNo"/> <el-table-column label="座位类型" prop="seatType"/> <el-table-column label="操作"> <template #default="scope"> <el-button type="primary" @click="selectSeat(scope.row)">预约</el-button> </template> </el-table-column> </el-table> </el-card> </div> </template> <script> export default { data(){ return { seatList:[], recommendList:[], } }, mounted(){ this.getSeatList(); this.getRecommend(); }, methods:{ async getRecommend(){ const res = await this.$api.get(`/reservation/recommend/${this.$store.state.userId}`); this.recommendList = res.data; }, selectSeat(row){ // 弹出预约时间选择弹窗 } } } </script>
五、系统测试
5.1 功能测试用例
表格
| 测试用例 | 操作步骤 | 预期结果 |
| 座位预约冲突测试 | 选择已被预约的座位,提交同一时间段预约 | 系统拦截,提示预约冲突 |
| 智能推荐测试 | 新用户无历史预约记录,进入推荐页面 | 返回平台热门空闲座位 |
| 签到校验 | 预约成功后,非预约时间段点击签到 | 签到失败,提示不在签到时间 |
5.2 性能测试
在本地环境并发 10 用户同时发起预约请求,系统接口响应时间小于 500ms,数据库无死锁,预约记录正常保存。
六、项目创新点与答辩说明
- 业务创新:区别于普通自习室 CRUD 系统,增加协同过滤智能座位推荐模块,不再单纯依靠用户手动挑选座位,提升资源利用率,是答辩核心亮点。
- 功能完善:增加签到机制、违规占座记录,贴近真实管理场景,业务完整性更强。
- 可扩展:项目预留消息提醒接口,后续可以扩展消息预约提醒功能。
答辩时可以重点介绍协同过滤算法思路,解释如何基于用户自习行为完成座位推荐,对比传统自习室系统的不足,说明本系统解决了哪些实际问题。
七、总结
本文完成基于 SpringBoot+Vue 的自习室预约管理系统设计与实现,完成前后端代码开发、数据库建模与功能测试。系统实现自习室与座位管理、在线预约签到、违规记录、数据统计功能,并且集成协同过滤算法实现智能座位推荐,解决自习室座位管理难、资源分配不合理的痛点。项目代码结构规范,业务逻辑完整,满足软件工程本科毕业设计要求,可在此基础上继续迭代优化推荐算法精度,增加消息通知模块。