毕业设计实战:基于SpringBoot的学生宿舍管理系统设计与实现

90 阅读13分钟

一、项目背景:为什么要做学生宿舍管理系统?

在高校规模不断扩大的背景下,传统学生宿舍管理模式(人工登记、纸质存档)逐渐暴露出“信息混乱、效率低下、交互缺失”的核心痛点。据调研,超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 功能性需求

  1. 管理员端功能

    • 人员管理:维护宿管员、学生基础信息(增删改查、账号禁用/启用);
    • 系统配置:修改密码、维护个人信息、数据库备份;
    • 权限管控:分配角色权限,保障系统数据安全。
  2. 宿管员端功能

    • 资产管理:登记公寓资产(家具、设备)、记录损坏情况、维护资产状态;
    • 费用管理:录入住宿费用、更新缴费状态、查询缴费记录;
    • 日常管理:记录公共场所清理信息、处理日常事务(加分事项、评分标准);
    • 床位管理:审核学生床位申请、安排床位分配、更新床位状态。
  3. 学生端功能

    • 信息查询:查看公共场所清理安排、日常事务通知、个人缴费信息;
    • 业务办理:在线申请床位、查询床位安排结果;
    • 个人中心:维护个人基础信息、查看业务办理记录。

3.1.2 非功能性需求

  • 性能要求:页面响应时间≤2秒,支持200人同时在线操作无卡顿;
  • 安全性要求:用户密码MD5加密存储,接口访问需权限校验,防止SQL注入、XSS攻击;
  • 易用性要求:界面布局清晰,核心操作(如床位申请)步骤≤3步,适配校园用户操作习惯;
  • 兼容性要求:支持Chrome、Edge、Safari等主流浏览器,适配PC端与平板端。

3.2 第二步:系统设计——构建架构与数据模型

基于需求分析,采用“表现层-业务逻辑层-数据访问层”三层架构,确保开发逻辑清晰、数据流转高效:

3.2.1 系统总体架构

  1. 表现层:通过Thymeleaf渲染页面,接收用户操作请求(如“申请床位”“审核资产”),展示后端处理结果;
  2. 业务逻辑层:基于SpringBoot Service组件实现核心业务(如床位审核逻辑、缴费状态更新),处理数据合法性校验;
  3. 数据访问层:使用MyBatis简化数据库操作,实现数据CRUD,关联数据表间关系(如“学生-床位”一对一、“宿管员-资产”一对多)。

3.2.2 数据库设计

遵循三范式原则,设计核心数据表(关键表及核心字段如下):

表名核心字段功能描述
学生信息表(student)id、学号、密码、姓名、性别、电话号码、邮箱存储学生基础账号与个人信息;
宿管员信息表(dorm_manager)id、工号、密码、姓名、性别、手机、邮箱存储宿管员账号与个人信息;
床位安排表(bed_arrange)id、编号、学号、姓名、房间号、床位号、审核状态存储学生床位申请及分配信息;
缴费信息表(payment)id、编号、学号、姓名、住宿费用、发布时间、缴费日期存储学生住宿费用及缴费记录;
公寓资产表(apartment_asset)id、编号、房间号、资产名称、购入日期、备注存储公寓资产信息及维护记录;

3.3 第三步:环境搭建——SpringBoot项目初始化

  1. 项目创建:使用Spring Initializr创建项目,引入核心依赖(Spring Web、MyBatis、MySQL Connector、Thymeleaf、Lombok);
  2. 配置文件:编写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
    
  3. 目录结构:按“controller、service、dao、entity、templates、static”划分包结构,确保代码分层清晰。

3.4 第四步:后端开发——核心接口与业务实现

基于SpringBoot开发后端核心功能,以下为关键模块代码示例:

3.4.1 实体类与Mapper层

  1. 实体类(以学生表为例):
    @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; // 创建时间
    }
    
  2. Mapper层(床位安排查询):
    public interface BedArrangeMapper extends BaseMapper<BedArrange> {
        // 查询学生床位安排
        List<BedArrange> selectByStudentId(@Param("xuehao") String xuehao);
    }
    

3.4.2 Service层与Controller层

  1. 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);
        }
    }
    
  2. 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 第六步:系统集成与功能联调

  1. 接口联调:通过浏览器开发者工具测试后端接口,验证参数传递与返回结果的正确性(如床位申请状态、审核结果);
  2. 前后端联调:启动Tomcat服务器,模拟全流程操作(学生申请床位→宿管员审核→学生查询结果→管理员维护信息),确保数据同步无误;
  3. 权限校验:测试越权访问(如学生访问管理员后台),验证拦截器是否跳转至登录页,保障角色权限边界清晰。

3.7 第七步:系统测试——验证功能与性能

通过“功能测试”“性能测试”“安全性测试”确保系统达标:

3.7.1 功能测试(核心场景)

测试场景预期结果实际结果是否通过
学生提交床位申请申请记录存入数据库,状态为“待审核”申请记录存入数据库,状态为“待审核”
宿管员审核床位申请状态更新为“通过/驳回”,学生可查看回复状态更新为“通过/驳回”,学生可查看回复
管理员删除学生信息学生账号失效,无法登录系统学生账号失效,无法登录系统
学生查询缴费信息显示个人住宿费用、缴费状态及日期显示个人住宿费用、缴费状态及日期

3.7.2 性能与安全性测试

  • 性能测试:JMeter模拟150并发用户操作,平均页面响应时间1.3秒,无请求失败;
  • 安全性测试:拦截SQL注入、XSS攻击,用户密码加密存储,无明文泄露;
  • 兼容性测试:在主流浏览器中测试,页面布局正常,功能无异常。

3.8 第八步:问题排查与优化

开发过程中典型问题及解决方案:

  1. 床位申请重复提交:添加前端按钮置灰逻辑,后端增加“学号+床位号”唯一性校验,防止同一学生重复申请同一床位;
  2. 资产信息查询卡顿:未实现分页查询,资产数量过多时页面加载缓慢;解决:集成MyBatis分页插件,每页显示10条资产记录,优化查询效率;
  3. 密码修改后立即登录失败:密码加密逻辑仅在新增用户时生效,修改密码未同步加密;解决:统一密码处理工具类,新增、修改操作均调用MD5加密方法;
  4. 审核结果未实时通知:学生需手动刷新页面查看审核状态;解决:添加页面弹窗提示功能,审核操作完成后通过后端消息推送实时反馈结果。

四、毕业设计复盘:经验与改进方向

4.1 项目收获与核心经验

  1. 技术能力落地:完整掌握SpringBoot+MyBatis开发流程,从需求分析、数据库设计到前后端联调全流程实践,解决了权限拦截、数据校验、分页查询等核心技术问题;
  2. 工程思维养成:学会用“需求拆解-模块设计-编码测试-优化迭代”的标准化流程推进项目,每个阶段输出对应文档(如数据库设计文档、测试用例),提升项目规范化程度;
  3. 场景化设计思维:结合校园宿舍管理实际场景,精准适配管理员、宿管员、学生的不同需求,避免“技术与业务脱节”,确保系统具备实际使用价值。

4.2 现存不足与优化方向

  1. 交互体验升级:当前前端页面以基础功能实现为主,缺乏动态效果;后续可引入Vue.js框架,添加数据可视化图表(如资产损坏统计、缴费情况分析),提升页面交互感;
  2. 功能扩展性提升:未支持“维修申请”“宿舍卫生评分”“访客登记”等高频场景功能;未来可新增模块,整合校园宿舍管理全流程需求;
  3. 智能化优化:可引入短信通知接口,学生床位审核通过、缴费提醒等场景自动发送短信;添加数据导出功能,支持管理员导出学生信息、缴费记录等Excel报表。

4.3 给学弟学妹的实战建议

  1. 前期需求调研要扎实:校园类系统需充分对接实际使用者(如宿管老师、学生),明确核心痛点,避免“想当然”设计功能,可通过问卷、访谈收集真实需求;
  2. 技术选型求稳不求新:毕业设计优先选择成熟技术栈(如SpringBoot+MySQL),减少因新技术学习成本过高导致的项目延期,确保功能按时落地;
  3. 注重代码复用与规范:提前封装通用工具类(如密码加密、日期处理),统一代码命名规范,避免后期因代码冗余、逻辑混乱增加维护难度;
  4. 测试环节不可省略:不仅要测试正常流程,更要模拟异常场景(如输入非法数据、越权访问),提前排查潜在问题,确保系统稳定性。

五、项目资源与后续扩展

5.1 核心资源清单(可直接用于毕业设计)

本项目包含完整开发资源,支持二次开发或毕业设计参考:

  • 源代码:SpringBoot后端完整代码(Controller、Service、Mapper层)、前端页面代码(Thymeleaf模板+CSS+JS);
  • 设计文档:需求分析报告、系统架构图、E-R图、数据库设计文档、功能测试用例清单;
  • 数据库脚本:数据表创建SQL、测试数据插入脚本(含管理员、宿管员、学生测试账号);
  • 部署说明:本地环境搭建步骤、Tomcat部署流程、常见问题解决方案。

5.2 未来扩展场景

  1. 移动端适配:开发微信小程序版本,支持学生通过小程序快速申请床位、查询缴费信息,宿管员通过小程序实时处理审核需求;
  2. 智慧校园对接:与校园统一身份认证系统对接,实现“一人一账号”登录,无需单独注册;同步学生学籍信息,自动初始化宿舍分配数据;
  3. 数据统计分析:新增后台数据看板,展示宿舍入住率、资产完好率、缴费完成率等核心指标,为学校宿舍管理决策提供数据支持。

如果本文对你的SpringBoot开发、校园管理系统设计相关毕业设计有帮助,欢迎点赞+收藏+关注!需要完整项目资源或特定模块的详细代码,可以留言交流~