# dormitory_management_system **Repository Path**: ConcreteClouds/dormitory_management_system ## Basic Information - **Project Name**: dormitory_management_system - **Description**: 高校宿舍管理系统(springboot)。项目的文档很详细(包括从零开始教你部署),简单改一点功能等等,做毕业设计是没有问题的。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-05-05 - **Last Updated**: 2024-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dormitory_management_system[高校宿舍管理系统] # 实现功能 - 管理员(拥有系统最高的权限) - 用户管理、年级管理、组织管理、学生管理、权限管理 - 楼宇管理、宿舍管理、预选管理 - 缺勤管理 - 宿管员 - 楼宇管理、宿舍管理、预选管理 - 缺勤管理 - 学生 - 个人详情、在线预选、缺勤查看 功能具体说明 ``` - 用户管理 - 根据用户名和用户类型模糊查询 - 添加用户 保证用户名的唯一性 - 下载上传模板(对`.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 单页版` https://gitee.com/zhongshaofa/layuimini/tree/v2-onepage 后端:`springboot2.4.2` `mybatis-plus3.4.0` `EasyExcel` - `easyexcel` https://www.yuque.com/easyexcel/doc/easyexcel # 线上运行 ==~~注意点:放线上了,方便大家查看,所以数据库不要随便删除qaq!!!==~~ ~~http://119.29.148.217:8310/page~~ 服务器到期了,我在部署文档中详细的写了一下步骤,可以参考一下自己部署。 # 项目本地运行 为了能让大家有一个完美的用户体验,提供了源码的同时,也提供了数据库的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页面,然后就成功啦 ![image-20210302100521451](https://djstudent.oss-cn-shenzhen.aliyuncs.com/images/image-20210302100521451.png) # 项目的部分截图 ![image-20210302101057671](https://djstudent.oss-cn-shenzhen.aliyuncs.com/images/image-20210302101057671.png) ![image-20210302100630910](https://djstudent.oss-cn-shenzhen.aliyuncs.com/images/image-20210302100630910.png) ![image-20210302101131880](https://djstudent.oss-cn-shenzhen.aliyuncs.com/images/image-20210302101131880.png) ![image-20210302101158968](https://djstudent.oss-cn-shenzhen.aliyuncs.com/images/image-20210302101158968.png) # 项目线上部署 放在两个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 - 自己在设计项目和实现的时候,明白==冗余字段==的好处,不然要连接好多个表 - 数据库设计和业务流程真的非常重要 - 跨域问题