基于SpringBoot+MySQL的高校宿舍管理系统设计与实现

源码下载地址:https://download.csdn.net/download/sheziqiong/87799097
源码下载地址:https://download.csdn.net/download/sheziqiong/87799097

实现功能

  • 管理员(拥有系统最高的权限)
    • 用户管理、年级管理、组织管理、学生管理、权限管理
    • 楼宇管理、宿舍管理、预选管理
    • 缺勤管理
  • 宿管员
    • 楼宇管理、宿舍管理、预选管理
    • 缺勤管理
  • 学生
    • 个人详情、在线预选、缺勤查看

功能具体说明

- 用户管理
  - 根据用户名和用户类型模糊查询
  - 添加用户 保证用户名的唯一性
  - 下载上传模板(对`.xls`文件中的用户类型做了下拉框处理)
  - Excel导入用户(使用EasyExcel读数据)
  - 修改用户 保证用户名的唯一性 密码加密了就无法显示,不做修改
  - 删除用户 如果是学生提示到[学生页面]删除
- 年级管理
  - 为了方便起见,id和name相同
  - 根据名称模糊查询
  - 添加年级 输入正整数
  - 批量删除
  - 单条数据删除
- 组织管理
  - 结构的展示==(难点)==学院—系—专业—班级 学院—专业—班级
  - 新增组织 需要选择上级栏目
  - 修改组织 先选择一个数据
  - 删除组织 需要选择叶子节点进行删除 
- 学生管理
  - 数据展示 optable
  - 根据学号/姓名/年级/班级搜索查询,主要是在mapper.xml中运行
  - 删除学生和批量删除学生
  - Excel导出全部学生信息
  - 添加和修改学生信息 对学生表和用户都进行数据的添加
- 权限管理
  - 选择用户类型后再进行编辑
  - 后端处理(删除数据再新增数据)
- 楼宇管理
  - 添加楼宇的时候,做了添加楼层,宿舍,床位
  - 删除楼宇的时候,需要将对应的楼层、宿舍和床位删除
  - 编辑楼宇 修改一些简单的字段
- 宿舍管理
  - 数据的展示(js+css难点)
- 预选设置
  - 数据展示(年级、班级,时间范围) 
  - 添加和修改预选 时间范围的设置 选择班级叶子节点处理
  - 根据名字模糊查询
  - 分配宿舍
  - 注意点:每个班级和年级这两个和起来也算一个主键
- 缺勤管理
  - 测试前先保证有学生入住
  - CRUD
- 修改密码
  - 输入新两次密码
- 基本资料
  - 修改个人信息
- 个人详情
  - 主要是针对学生 展示学生的一些基本信息
- 在线预选宿舍
  - 数据展示(难点) 未选择 已经选择 你的选择
  - 每个学生只能选择一次,而且选择时间是有范围的
  - 展示每个宿舍的剩余容量和总是
- 缺勤记录
  - 只是进行自己的缺勤显示
- 管理员和宿管员首页可视化
  - 使用表格和echart的可视化条形图

开发环境

  • jdk 1.8.0_181
  • mysql8.0.22
  • maven3.5.4

开发工具

  • 数据库软件:Navicat 15
  • 开发IDE:IDEA2019.2 WebStorm2020.1
    • 因为我对vscode不熟悉,所以使用WebStorm
  • 接口测试工具:ApiPost

技术路线

前端:layui2.5.7 axios0.21.0 jwt(json web token) ztree optable echarts

  • layuimini v2 单页版

后端:springboot2.4.2 mybatis-plus3.4.0 EasyExcel

  • easyexcel

线上运行

~~注意点:放线上了,方便大家查看,所以数据库不要随便删除qaq!!!~~

服务器到期了,我在部署文档中详细的写了一下步骤,可以参考一下自己部署。

项目本地运行

为了能让大家有一个完美的用户体验,提供了源码的同时,也提供了数据库的sql文件,并且sql文件中的属性也做了一个具体的说明。

  • git clone https://gitee.com/dz138598/dormitory_management_system.git

  • 本地新建一个数据库dormitory,字符集utf-8,运行SQL文件dormitory.sql

  • 用idea打开项目,并且配置maven下载依赖

  • 修改配置文件application.yml中的数据库密码

  • 运行后端项目 DormitoryApplication启动类

  • 使用webstorm或者vscode运行login.html页面,然后就成功啦
    在这里插入图片描述

项目的部分截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目线上部署

放在两个tomcat上,后端一个tomcat,前端一个tomcat

参考文档:线上部署教学.md

项目难点

  • 菜单权限管理的设置

    • 不同的角色有不同的菜单
      • 涉及两个表
        • 菜单表(主要是id和pid)
        • 使用jdk的stream流进行递归处理,封装成树
        • 菜单和角色表
  • 组织的表设计

    • 没有设置成四个表 学院、专业、系、班级
    • 设计成一个有id和pid的表
  • 在线预选同一个床位并发

    • 使用乐观锁,锁当行
      • 如果使用Mybatis,进行两次的查询version,第二次直接从缓存中直接读取结果,就没有去查数据库,设置version不起作用。
        • 尝试过删除一级缓存方法或在该事务中写一个getVersion方法不行。
        • 最后成功的方法:单独再写一个方法用来查询版本version方法,方法放在事务外
    • 出现异常的时候设置回滚
      • @Transactional(rollbackFor=Exception.class)

      • 参看:https://blog.csdn.net/weixin_41945228/article/details/89920739
        
  • 密码加密处理

    • 如果md5加密,彩虹表暴力破解
    • 两次md5加密,还是存在规律
    • md5盐值加密
      • Md5Crypt.md5Crypy(“123456”.getBytes())
      • 加了随机值,所以每次加密的时候都是不一样的,需要将数据也保存下这个随机盐或者存一个固定值
      • Spring security BCryptPasswordEncoder
        • 加密在数据库生成60位字符串
        • 主要用到encode和matches
  • 自己在设计项目和实现的时候,明白冗余字段的好处,不然要连接好多个表

  • 数据库设计和业务流程真的非常重要

  • 跨域问题

源码下载地址:https://download.csdn.net/download/sheziqiong/87799097
源码下载地址:https://download.csdn.net/download/sheziqiong/87799097

猜你喜欢

转载自blog.csdn.net/sheziqiong/article/details/130763006