Java 毕设烂尾,很少是因为不会写 Controller。常见情况是:开题写了教务+宿舍+评教+大数据屏,第三周还在配环境。这页不写 60 个题目,只用实验室预约把能做完的骨架写死。酒店订房、报修派单、图书借阅,换表名就能套。还没定题先去 Java 选题页;目录和默认栈看 Spring Boot 页。
做完的定义:学生能提交预约,管理员能通过或驳回,交叉时段会被拒绝,统计页能按状态计数。评论、消息、个人中心都可以没有。
一、题目先收到这么小
| 开题里常写的 | 实际只做 |
|---|---|
| 智慧实验室综合管理平台 | 预约 + 审核 + 冲突检测 + 一张统计图 |
| 微服务电商 | 不要做。换成订房或商城后台里的订单状态机 |
| 带支付的校园外卖 | 订单状态用「待支付/已支付」模拟,不接微信 |
技术栈固定:Spring Boot 3 + MyBatis-Plus + MySQL + Vue3 + Element Plus。课上是 Vue2 就 Vue2。不要上 Cloud、Kafka、Elasticsearch。
二、只建 4 张表
通用抽法(用户 / 资源 / 业务单 / 日志)见 数据库怎么设计。下面是预约题的落地表名。
user id, username, password, role, name
lab id, name, location, capacity, status
reservation id, user_id, lab_id, start_time, end_time, status, remark
reservation_log id, reservation_id, operator_id, action, created_at
status 只用四个值:PENDING / APPROVED / REJECTED / CANCELLED。不要做成 12 种工单状态。
答辩被问「为什么拆日志表」:审核记录要能追溯谁在什么时候点的通过,不能改预约表一行了事。
三、接口先这 5 个
| 接口 | 谁能调 | 做什么 |
|---|---|---|
| POST /login | 所有人 | 返回 token 和角色 |
| GET /labs | 登录用户 | 可预约的实验室 |
| POST /reservations | 学生 | 提交;服务端查冲突 |
| PUT /reservations/{id}/audit | 管理员 | 通过或驳回,写日志 |
| GET /stats/summary | 管理员 | 各状态数量、本周数量 |
列表、详情可以后补。这 5 个不通,不要画大屏。
四、冲突检测怎么写(老师会问)
同一实验室、已通过的预约,时间和新预约交叉则拒绝:
start_time < 新预约.end
AND end_time > 新预约.start
AND lab_id = ?
AND status = 'APPROVED'
待审核要不要占坑:毕设推荐审核通过才占,实现简单。论文里写一句「并发预占未做,适合实验室低频预约」。不要假装用了 Redis 分布式锁却拿不出代码。
边界用例自己测:
- 14:00–16:00 已通过,再约 15:00–17:00 → 失败
- 14:00–16:00 已通过,再约 16:00–18:00 → 成功(首尾相接)
- 待审核的交叉 → 仍允许提交(按上面策略)
五、前端最少 5 个页面
- 登录
- 实验室列表
- 我的预约(新建 + 取消待审核)
- 管理员审核列表
- 统计页:ECharts 柱状图,数据走
/stats/summary,禁止写死
学生账号打开审核页,后端 403,前端提示无权限。这是现成加分项。
六、8 周节奏(第 2 周必须能预约)
| 周 | 必须能看到 |
|---|---|
| 第 1 周 | 表建好,Navicat 能插入一条预约;开题功能清单和这 4 张表一致 |
| 第 2 周 | 登录 + 提交预约成功,数据库看得到 |
| 第 3 周 | 管理员审核,学生端状态变 |
| 第 4 周 | 冲突检测 3 条用例通过 |
| 第 5 周 | 统计图不是假数据 |
| 第 6 周 | 权限、空状态、部署说明 |
| 第 7 周 | 论文截图全部来自这套系统 |
| 第 8 周 | 两个演示账号、录屏、PPT 10 页 |
第 2 周末还在纠结 JWT 还是 Session,已经晚了。先用 Session 或最简单的 token,权限以后再收。
七、时间不够先砍什么
- 先砍:评论、站内信、头像、富文本公告、Excel 导入
- 再砍:移动端、验证码、邮件提醒
- 不能砍:登录、主流程、冲突或等价难点、统计页、测试表
论文里写了消息通知但系统没有,答辩必被问。要么补上,要么论文改成展望。
八、答辩演示就点这一条路径
- 学生登录,约明天 14:00–16:00,状态待审核
- 管理员通过
- 学生再约 15:00–17:00,提示冲突
- 打开统计页,指「已通过 +1」
话术和突发情况见 答辩 8 分钟脚本。表结构和权限怎么讲,那篇里有现成答法。
九、别的题目怎么套这副骨架
| 题目 | 主表换成 | 难点换成 |
|---|---|---|
| 酒店订房 | room + order | 同一房间日期重叠 |
| 报修派单 | ticket | 待派单 → 处理中 → 完成 |
| 图书借阅 | book + borrow | 库存为 0 不能借、逾期 |
| 招聘投递 | job + application | 同一岗位重复投递拦截 |
题目仍拿不准,先看 能做完的 40 题 和 Java 方向页。不要同时开两个主流程。
常见问题
管理系统会不会太普通?
普通的是只有增删改查。冲突检测、状态机、权限、统计图四样有三样,本科完全够。
要不要做小程序?
答辩前不到 4 周就不要。Web 走完更稳。有时间再让小程序调同一套预约接口。
密码能明文吗?
不能。BCrypt 几行代码。明文被问到会很难看。
