返回作品

校园宿舍管理系统

创建于 2025 年 6 月 1 日

标签
  • Spring Boot
  • MyBatis-Plus
  • MySQL
  • Vue 3
  • Element Plus
  • Vue Router
  • Vuex
  • ECharts
  • Axios
  • wangeditor

项目介绍

校园宿舍管理系统是一个前后端分离的宿舍管理后台,后端为 Spring Boot 工程(springboot,端口 9090),前端为 Vue 3 单页应用(vue,基于 vue-cli 4.5 构建)。项目围绕宿舍日常管理中最核心的”人—房—床”关系设计:登录页提供学生 / 宿舍管理员 / 系统管理员三种身份单选,登录成功后身份与用户对象写入 HttpSession,前端配合路由守卫与 sessionStorage 实现不同角色的菜单隔离。

系统数据模型与业务一一对应:dorm_build 维护宿舍楼栋(如”一号楼""二号楼”,备注区分男/女宿舍),dorm_room 记录房间号、所属楼栋、楼层与最大入住人数,studentdorm_manageradmin 三类账户分别支撑三个角色,noticerepairelectricadjust_roomvisitor 则分别承载公告、报修、充电申请、调宿申请与访客登记。种子数据自带 4 栋楼、40 余间四人间宿舍与 20 余名学生,开箱即可体验完整流程。

项目架构

后端采用经典的 Controller-Service-Mapper 三层结构,持久层使用 MyBatis-Plus 3.5.1(mybatis-plus-boot-starter),通过 ServiceImpl 基类与 QueryWrapper / UpdateWrapper 完成条件查询与更新,并在 MyBatisPlusConfig 中注册分页插件——所有列表接口统一为 find(pageNum, pageSize, search) 的分页模糊查询。工具类层提供了两个与床位模型强相关的组件:JudgeBedName 负责把床位序号(14)映射为 first_bedfourth_bed 列名,CalPeopleNum 负责按床位列非空情况计算房间实际入住人数。

房间表的设计是本项目最有辨识度的地方:dorm_room 直接用四个可空列 first_bed / second_bed / third_bed / fourth_bed 存学生学号表示床位占用,同时用冗余字段 current_capacity 记录当前入住人数。围绕这一模型,DormRoomServiceImpl 提供了一组业务校验:checkRoomExist 校验房间存在、checkRoomState 校验房间未满(current_capacity < 4)、checkBedState 校验目标床位为空、judgeHadBed 遍历四列查询学生是否已有床位;删除床位与调宿搬床时(deleteBedInfoadjustRoomUpdate)会在同一事务内同时更新床位列与 current_capacity,保证数据一致。

前端以 Vue 3 + Element Plus 构建,路由采用 vue-router 4 的懒加载子路由配置,axios 实例统一加 /api 前缀,由 vue.config.js 的 devServer 代理转发到后端并 pathRewrite 去掉前缀。首页看板通过 ECharts(macarons 主题)绘制各楼栋住宿人数柱状图,公告编辑使用 wangeditor 富文本,天气与日历组件则增强了后台首页的实用性。

核心功能

  • 三角色登录与权限隔离Login.vue 以单选框切换学生 / 宿舍管理员 / 系统管理员,分别调用 /stu/login/dormManager/login/admin/login;后端将 IdentityUser 写入 session,MainController 提供 loadIdentity / loadUserInfo / signOut 接口,前端路由守卫据此拦截未登录访问。
  • 房间与床位管理:管理员可增删改查宿舍房间(按房间号模糊搜索),在房间详情中为四个床位分配或移除学生(RoomInfo.vue),后端实时维护入住人数;分配前会依次校验”学生是否已有床位、房间是否满员、床位是否被占”,从源头避免一人多床。
  • 报修与充电申请闭环:学生通过 ApplyRepairInfo.vue / ApplyElectric.vue 提交报修单与”申请充电”工单(标题、内容、楼栋、房间),管理员在 RepairInfo.vue 中按标题搜索、查看详情、标记完成并记录完成时间;学生端还通过 individualFind 按申请人过滤,只查看自己的工单记录。
  • 调宿申请与自动搬床:学生提交调宿申请(当前房间/床位 → 目标房间/床位),管理员在 AdjustRoomInfo.vue 中审批(通过 / 驳回);审批通过后 DormRoomImpl.adjustRoomUpdate 将学生从原床位列清空(容量减一),写入目标床位列(容量加一),完成一次”搬床”操作。
  • 首页数据看板:顶部五大实时统计卡片(学生统计、住宿人数、报修统计、用电统计、空宿舍统计),其中住宿人数通过对四个床位列分别 isNotNull 计数求和得出,空宿舍数为 current_capacity < 4 的房间数;中部为各楼栋住宿人数柱状图,左侧宿舍通告时间线展示最新公告。
  • 公告、访客与个人中心:公告支持 wangeditor 富文本编辑与分页管理(NoticeInfo.vue);访客登记记录姓名、性别、电话、来源城市、来访时间与事由(VisitorInfo.vue);个人中心支持查看”我的宿舍”、修改资料、上传头像——头像由 FileController 写入本地 files 目录并以 UID 重命名,读取时 Base64 编码回显到前端。

功能截图

暂无运行截图。

快速上手

后端为 Maven 工程(Spring Boot 2.6.3、Java 8),导入后修改 application.yml 中的 MySQL 连接(数据库名 dormitory),执行 数据库文件/dormitory.sql 初始化表结构与种子数据,运行 SpringbootApplication 即启动 9090 端口服务。前端进入 源码/前端/vue 目录执行 npm installnpm run serve,devServer 会将 /api 请求代理至后端。种子账号:系统管理员 admin/123456、宿舍管理员 dorm1/123456(管理一号楼)、学生 stu1/123456,可分别登录体验管理端、楼管端与学生端的差异化功能。

总结

项目把宿舍管理中”分房分床—报修维护—调宿流转—公告传达—访客登记”的主线业务完整落地,三类角色的登录与权限隔离贴合真实使用场景。最值得学习的是围绕 dorm_room 四床位列展开的一致性设计:通过 JudgeBedName 把业务层的”床位号”翻译为列名,配合满员校验、床位占用校验与容量增减的联动更新,让简单的表结构也能承载复杂的床位业务规则;首页看板、富文本公告、头像上传等细节则让系统具备了一定的完成度。整体代码分层清晰、注释齐全,适合作为 Java Web 课程设计与前后端分离项目的参考范本。