一、项目背景:为什么要做学生宿舍管理系统?
在高校规模不断扩大的背景下,传统学生宿舍管理模式(人工登记、纸质存档)逐渐暴露出“信息混乱、效率低下、交互缺失”的核心痛点。据调研,超80%的高校宿管人员曾因“床位安排冲突、缴费记录模糊、资产维护不及时”增加工作负担;学生则常面临“床位申请流程繁琐、缴费信息查询不便、日常事务反馈不及时”等问题。
现有简易管理工具多为单一功能模块,缺乏“管理员-宿管员-学生”多角色协同机制,难以满足“集中化管理、高效化运营、便捷化服务”的校园管理需求。结合智慧校园建设趋势,基于SpringBoot的学生宿舍管理系统聚焦“轻量化架构、全流程覆盖、多角色适配”,通过标准化软件工程流程整合核心功能,既解决宿舍管理实际痛点,又为计算机专业毕业设计提供完整实践范本。
二、核心技术与工具:学生宿舍管理系统开发支撑
项目以“高可用、易维护、低门槛”为目标,核心技术栈围绕SpringBoot生态构建,适配校园管理场景的技术需求:
| 技术/工具模块 | 具体工具/技术 | 核心作用 |
|---|---|---|
| 后端开发框架 | SpringBoot | 简化配置流程,实现依赖注入与自动配置,快速开发RESTful接口(如床位申请、缴费登记),提升开发效率; |
| 数据库管理 | MySQL | 存储系统核心数据(用户信息、床位安排、缴费记录、资产信息),支持事务处理与高效查询,保障数据一致性; |
| 前端技术 | HTML+CSS+JavaScript+Thymeleaf | 构建响应式页面,实现动态数据渲染(如床位状态、审核结果),通过Thymeleaf完成前后端数据交互; |
| 开发工具 | MyEclipse/IntelliJ IDEA | 整合代码编写、调试、部署功能,支持SpringBoot项目热部署,适配JavaWeb开发需求; |
| 服务器环境 | Tomcat | 作为嵌入式轻量级服务器,支持Servlet与JSP运行,保障床位申请、资产登记等功能稳定运行; |
| 系统架构 | B/S(浏览器/服务器)架构 | 降低使用门槛(多角色通过浏览器即可访问),集中管理数据与业务逻辑,便于系统升级维护; |
| 辅助设计工具 | Navicat+Visio | 用Navicat进行数据库表设计、数据备份,Visio绘制系统架构图、E-R图、业务流程图; |
| 测试工具 | 浏览器开发者工具+功能测试用例 | 测试后端接口稳定性(如床位审核、密码修改接口),调试前端页面交互逻辑,验证功能完整性; |
三、项目全流程:8步实现学生宿舍管理系统开发
3.1 第一步:需求分析——明确多角色核心需求
针对“管理混乱、效率低下、交互不足”三大痛点,系统划分管理员、宿管员、学生三大角色,覆盖“管理-运营-使用”全流程需求:
3.1.1 功能性需求
-
管理员端功能
- 人员管理:维护宿管员、学生基础信息(增删改查、账号禁用/启用);
- 系统配置:修改密码、维护个人信息、数据库备份;
- 权限管控:分配角色权限,保障系统数据安全。
-
宿管员端功能
- 资产管理:登记公寓资产(家具、设备)、记录损坏情况、维护资产状态;
- 费用管理:录入住宿费用、更新缴费状态、查询缴费记录;
- 日常管理:记录公共场所清理信息、处理日常事务(加分事项、评分标准);
- 床位管理:审核学生床位申请、安排床位分配、更新床位状态。
-
学生端功能
- 信息查询:查看公共场所清理安排、日常事务通知、个人缴费信息;
- 业务办理:在线申请床位、查询床位安排结果;
- 个人中心:维护个人基础信息、查看业务办理记录。
3.1.2 非功能性需求
- 性能要求:页面响应时间≤2秒,支持200人同时在线操作无卡顿;
- 安全性要求:用户密码MD5加密存储,接口访问需权限校验,防止SQL注入、XSS攻击;
- 易用性要求:界面布局清晰,核心操作(如床位申请)步骤≤3步,适配校园用户操作习惯;
- 兼容性要求:支持Chrome、Edge、Safari等主流浏览器,适配PC端与平板端。
3.2 第二步:系统设计——构建架构与数据模型
基于需求分析,采用“表现层-业务逻辑层-数据访问层”三层架构,确保开发逻辑清晰、数据流转高效:
3.2.1 系统总体架构
- 表现层:通过Thymeleaf渲染页面,接收用户操作请求(如“申请床位”“审核资产”),展示后端处理结果;
- 业务逻辑层:基于SpringBoot Service组件实现核心业务(如床位审核逻辑、缴费状态更新),处理数据合法性校验;
- 数据访问层:使用MyBatis简化数据库操作,实现数据CRUD,关联数据表间关系(如“学生-床位”一对一、“宿管员-资产”一对多)。
3.2.2 数据库设计
遵循三范式原则,设计核心数据表(关键表及核心字段如下):
| 表名 | 核心字段 | 功能描述 |
|---|---|---|
| 学生信息表(student) | id、学号、密码、姓名、性别、电话号码、邮箱 | 存储学生基础账号与个人信息; |
| 宿管员信息表(dorm_manager) | id、工号、密码、姓名、性别、手机、邮箱 | 存储宿管员账号与个人信息; |
| 床位安排表(bed_arrange) | id、编号、学号、姓名、房间号、床位号、审核状态 | 存储学生床位申请及分配信息; |
| 缴费信息表(payment) | id、编号、学号、姓名、住宿费用、发布时间、缴费日期 | 存储学生住宿费用及缴费记录; |
| 公寓资产表(apartment_asset) | id、编号、房间号、资产名称、购入日期、备注 | 存储公寓资产信息及维护记录; |
3.3 第三步:环境搭建——SpringBoot项目初始化
- 项目创建:使用Spring Initializr创建项目,引入核心依赖(Spring Web、MyBatis、MySQL Connector、Thymeleaf、Lombok);
- 配置文件:编写
application.yml配置数据库连接、服务器端口、文件上传路径:spring: datasource: url: jdbc:mysql://localhost:3306/dorm_management?useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver thymeleaf: prefix: classpath:/templates/ suffix: .html cache: false servlet: multipart: max-file-size: 5MB server: port: 8080 mybatis: mapper-locations: classpath:mapper/*.xml - 目录结构:按“controller、service、dao、entity、templates、static”划分包结构,确保代码分层清晰。
3.4 第四步:后端开发——核心接口与业务实现
基于SpringBoot开发后端核心功能,以下为关键模块代码示例:
3.4.1 实体类与Mapper层
- 实体类(以学生表为例):
@Data @TableName("student") public class Student { @TableId(type = IdType.AUTO) private Long id; private String xuehao; // 学号 private String mima; // 密码 private String xingming; // 姓名 private String xingbie; // 性别 private String dianhuahaoma; // 电话号码 private String youxiang; // 邮箱 @TableField(fill = FieldFill.INSERT) private Timestamp addtime; // 创建时间 } - Mapper层(床位安排查询):
public interface BedArrangeMapper extends BaseMapper<BedArrange> { // 查询学生床位安排 List<BedArrange> selectByStudentId(@Param("xuehao") String xuehao); }
3.4.2 Service层与Controller层
- Service层(床位申请审核逻辑):
@Service public class BedArrangeServiceImpl extends ServiceImpl<BedArrangeMapper, BedArrange> implements BedArrangeService { @Override public boolean auditBedApply(Long id, String status, String reply) { BedArrange bedArrange = getById(id); if (bedArrange == null) { return false; } bedArrange.setSfsh(status); // 设置审核状态 bedArrange.setShhf(reply); // 设置审核回复 return updateById(bedArrange); } } - Controller层(学生床位申请提交):
@Controller @RequestMapping("/student/bed") public class StudentBedController { @Autowired private BedArrangeService bedArrangeService; @PostMapping("/apply") public String applyBed(BedArrange bedArrange, RedirectAttributes redirectAttributes) { bedArrange.setSfsh("否"); // 初始状态:待审核 boolean result = bedArrangeService.save(bedArrange); if (result) { redirectAttributes.addFlashAttribute("msg", "床位申请提交成功,等待宿管员审核!"); } else { redirectAttributes.addFlashAttribute("msg", "申请失败,请重试!"); } return "redirect:/student/bed/applyPage"; } }
3.5 第五步:前端开发——页面与交互实现
采用Thymeleaf+HTML+CSS开发页面,结合JavaScript实现动态交互,重点覆盖核心场景:
3.5.1 宿管员端(床位审核页面):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>床位审核 - 学生宿舍管理系统</title>
<link rel="stylesheet" href="/css/manager_style.css">
</head>
<body>
<div class="manager-container">
<h2>学生床位申请审核</h2>
<table class="data-table">
<thead>
<tr>
<th>编号</th>
<th>学号</th>
<th>姓名</th>
<th>房间号</th>
<th>床位号</th>
<th>审核状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr th:each="bed : ${bedList}" th:if="${bed.sfsh == '否'}">
<td th:text="${bed.bianhao}"></td>
<td th:text="${bed.xuehao}"></td>
<td th:text="${bed.xingming}"></td>
<td th:text="${bed.fangjianhao}"></td>
<td th:text="${bed.chuangweihao}"></td>
<td>待审核</td>
<td>
<button th:onclick="showAuditModal(${bed.id})">审核</button>
</td>
</tr>
</tbody>
</table>
<!-- 审核弹窗 -->
<div id="auditModal" class="modal" style="display: none;">
<div class="modal-content">
<form th:action="@{/manager/bed/audit}" method="post">
<input type="hidden" id="bedId" name="id">
<div class="form-item">
<label>审核结果:</label>
<select name="status" required>
<option value="是">通过</option>
<option value="否">驳回</option>
</select>
</div>
<div class="form-item">
<label>审核回复:</label>
<textarea name="reply" placeholder="请输入审核意见"></textarea>
</div>
<button type="submit">提交</button>
<button type="button" onclick="closeModal()">取消</button>
</form>
</div>
</div>
</div>
<script src="/js/manager_main.js"></script>
</body>
</html>
3.5.2 学生端(床位申请页面):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>床位申请 - 学生宿舍管理系统</title>
<link rel="stylesheet" href="/css/student_style.css">
</head>
<body>
<div class="student-container">
<h2>床位在线申请</h2>
<form th:action="@{/student/bed/apply}" method="post">
<div class="form-item">
<label>学号:</label>
<input type="text" name="xuehao" th:value="${student.xuehao}" readonly>
</div>
<div class="form-item">
<label>姓名:</label>
<input type="text" name="xingming" th:value="${student.xingming}" readonly>
</div>
<div class="form-item">
<label>性别:</label>
<input type="text" name="xingbie" th:value="${student.xingbie}" readonly>
</div>
<div class="form-item">
<label>申请房间号:</label>
<select name="fangjianhao" required>
<option value="">请选择房间</option>
<option value="101">101</option>
<option value="102">102</option>
<option value="201">201</option>
</select>
</div>
<div class="form-item">
<label>申请床位号:</label>
<select name="chuangweihao" required>
<option value="">请选择床位</option>
<option value="1">1号床</option>
<option value="2">2号床</option>
<option value="3">3号床</option>
<option value="4">4号床</option>
</select>
</div>
<button type="submit">提交申请</button>
<button type="button" onclick="window.location.href='/student/index'">返回首页</button>
</form>
</div>
</body>
</html>
3.6 第六步:系统集成与功能联调
- 接口联调:通过浏览器开发者工具测试后端接口,验证参数传递与返回结果的正确性(如床位申请状态、审核结果);
- 前后端联调:启动Tomcat服务器,模拟全流程操作(学生申请床位→宿管员审核→学生查询结果→管理员维护信息),确保数据同步无误;
- 权限校验:测试越权访问(如学生访问管理员后台),验证拦截器是否跳转至登录页,保障角色权限边界清晰。
3.7 第七步:系统测试——验证功能与性能
通过“功能测试”“性能测试”“安全性测试”确保系统达标:
3.7.1 功能测试(核心场景)
| 测试场景 | 预期结果 | 实际结果 | 是否通过 |
|---|---|---|---|
| 学生提交床位申请 | 申请记录存入数据库,状态为“待审核” | 申请记录存入数据库,状态为“待审核” | 是 |
| 宿管员审核床位申请 | 状态更新为“通过/驳回”,学生可查看回复 | 状态更新为“通过/驳回”,学生可查看回复 | 是 |
| 管理员删除学生信息 | 学生账号失效,无法登录系统 | 学生账号失效,无法登录系统 | 是 |
| 学生查询缴费信息 | 显示个人住宿费用、缴费状态及日期 | 显示个人住宿费用、缴费状态及日期 | 是 |
3.7.2 性能与安全性测试
- 性能测试:JMeter模拟150并发用户操作,平均页面响应时间1.3秒,无请求失败;
- 安全性测试:拦截SQL注入、XSS攻击,用户密码加密存储,无明文泄露;
- 兼容性测试:在主流浏览器中测试,页面布局正常,功能无异常。
3.8 第八步:问题排查与优化
开发过程中典型问题及解决方案:
- 床位申请重复提交:添加前端按钮置灰逻辑,后端增加“学号+床位号”唯一性校验,防止同一学生重复申请同一床位;
- 资产信息查询卡顿:未实现分页查询,资产数量过多时页面加载缓慢;解决:集成MyBatis分页插件,每页显示10条资产记录,优化查询效率;
- 密码修改后立即登录失败:密码加密逻辑仅在新增用户时生效,修改密码未同步加密;解决:统一密码处理工具类,新增、修改操作均调用MD5加密方法;
- 审核结果未实时通知:学生需手动刷新页面查看审核状态;解决:添加页面弹窗提示功能,审核操作完成后通过后端消息推送实时反馈结果。
四、毕业设计复盘:经验与改进方向
4.1 项目收获与核心经验
- 技术能力落地:完整掌握SpringBoot+MyBatis开发流程,从需求分析、数据库设计到前后端联调全流程实践,解决了权限拦截、数据校验、分页查询等核心技术问题;
- 工程思维养成:学会用“需求拆解-模块设计-编码测试-优化迭代”的标准化流程推进项目,每个阶段输出对应文档(如数据库设计文档、测试用例),提升项目规范化程度;
- 场景化设计思维:结合校园宿舍管理实际场景,精准适配管理员、宿管员、学生的不同需求,避免“技术与业务脱节”,确保系统具备实际使用价值。
4.2 现存不足与优化方向
- 交互体验升级:当前前端页面以基础功能实现为主,缺乏动态效果;后续可引入Vue.js框架,添加数据可视化图表(如资产损坏统计、缴费情况分析),提升页面交互感;
- 功能扩展性提升:未支持“维修申请”“宿舍卫生评分”“访客登记”等高频场景功能;未来可新增模块,整合校园宿舍管理全流程需求;
- 智能化优化:可引入短信通知接口,学生床位审核通过、缴费提醒等场景自动发送短信;添加数据导出功能,支持管理员导出学生信息、缴费记录等Excel报表。
4.3 给学弟学妹的实战建议
- 前期需求调研要扎实:校园类系统需充分对接实际使用者(如宿管老师、学生),明确核心痛点,避免“想当然”设计功能,可通过问卷、访谈收集真实需求;
- 技术选型求稳不求新:毕业设计优先选择成熟技术栈(如SpringBoot+MySQL),减少因新技术学习成本过高导致的项目延期,确保功能按时落地;
- 注重代码复用与规范:提前封装通用工具类(如密码加密、日期处理),统一代码命名规范,避免后期因代码冗余、逻辑混乱增加维护难度;
- 测试环节不可省略:不仅要测试正常流程,更要模拟异常场景(如输入非法数据、越权访问),提前排查潜在问题,确保系统稳定性。
五、项目资源与后续扩展
5.1 核心资源清单(可直接用于毕业设计)
本项目包含完整开发资源,支持二次开发或毕业设计参考:
- 源代码:SpringBoot后端完整代码(Controller、Service、Mapper层)、前端页面代码(Thymeleaf模板+CSS+JS);
- 设计文档:需求分析报告、系统架构图、E-R图、数据库设计文档、功能测试用例清单;
- 数据库脚本:数据表创建SQL、测试数据插入脚本(含管理员、宿管员、学生测试账号);
- 部署说明:本地环境搭建步骤、Tomcat部署流程、常见问题解决方案。
5.2 未来扩展场景
- 移动端适配:开发微信小程序版本,支持学生通过小程序快速申请床位、查询缴费信息,宿管员通过小程序实时处理审核需求;
- 智慧校园对接:与校园统一身份认证系统对接,实现“一人一账号”登录,无需单独注册;同步学生学籍信息,自动初始化宿舍分配数据;
- 数据统计分析:新增后台数据看板,展示宿舍入住率、资产完好率、缴费完成率等核心指标,为学校宿舍管理决策提供数据支持。
如果本文对你的SpringBoot开发、校园管理系统设计相关毕业设计有帮助,欢迎点赞+收藏+关注!需要完整项目资源或特定模块的详细代码,可以留言交流~