基于SpringBoot+Vue+Redis实现的前后端分离学生宿舍管理系统

到山东找蓝翔

发布日期: 2021-09-19 09:30:46 浏览量: 119
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1.项目简介

1.1 背景分析

随着互联网快速发展,电脑的发展,让我们的生活更加的便利,也在学校的办公管理领域得到了很好发挥,以前记录学生宿舍操作需要通过人工记录的方式,来登记,这样的操作极其不方便,尤其是在查阅某个人员进出时的情况,需要查看过多的人员信息,这对工作造成了极不方便,所以开发一套学生宿舍管理系统,就可以很好的解决这一难题。

通过使用学生宿舍管理系统不仅可以降低人工成本,而且在管理上也可以得到很好的提升。以前在宿舍记录管理中,最容易出错的环节,就是登陆人员的进出情况,而该系统软件的出现,可让更多的时间花在如何管理信息化,让信息化得到更快捷的服务。本系统结合业务需求,及线下宿舍管理操作流程,量身定制一款学生宿舍管理软件。主要解决快速查找人员宿舍管理等实用性功能,主要是基于Web网页开发的一个宿舍管理系统。

1.2 课题研究现状

在和现有的学生宿舍管理系统进行比较后,发现了许多问题:

系统功能并不全面。很多学校的学生宿舍管理系统的功能模块并不全面,有些系统只有最基本的宿舍共用电器或者物品的上报维修和用户信息管理功能,但是只是这样是远远不够的,来访人员如果要来看望某位学生,系统没有此功能的话,依然需要人力手工记录以及查询被看望学生的基本信息。有些学校的宿舍管理系统没有宿舍的基本信息,有时候就无法及时了解到该宿舍是否入住满员,还是只是住了一部分。还有的宿舍管理,没有对宿舍环境进行一个打分操作,对宿舍的环境分数进行排序来选出最优宿舍,还可以找出分数最低的几个宿舍进行一个需改良宿舍的选择。

国外只有少数学校可以达到,外国学生进出宿舍刷卡并且同时人脸识别进行人卡相匹配。这是我们暂时无法解决的问题,一个是外国的宿舍设施原本就配有一些电子产品,在后续的更新迭代中就显得容易些,还有一个就是外国的信息发展团体多。宿舍管理系统能够越来越普及的原因还是高校的数量激增,人工记录难以应对大量的学生信息。

我的课题借鉴了上述宿舍共用电器上报维修和用户信息管理之外,还添加了来访人员登记以及对学生宿舍的环境打分和排序。和我们学校宿舍的手写公告不同,我还增加了一栏专门用于公告提示。

1.3 课题主要研究内容

本课题是一个学生宿舍管理系统。具体研究内容如下:

技术上采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJ IDEA 2020.1.1 x64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcat server服务器。

功能上用户信息管理功能、房间信息管理功能、来访信息管理功能、物品报修管理功能、维修进程管理功能、公告信息管理功能等。

学生能够查看自己的个人信息,对宿舍公用电器可以进行一个报修,能查看维修的进程。管理员可以进行公告布置,修改密码,对维修进程的状态进行更改,对系统用户和日志的管理。

1.4 功能模块

随着每年高校大学生不断的扩招,人数的增加导致宿舍管理压力巨大。学校宿舍作为高校管理的组成部分,现如今还有部分高校,通过纸质的方式登记学生进出宿舍的情况,这不仅工作效率低下,而且使得的管理上也极其反映当时的情况,尤其在查询数据时,会相当的繁琐,偶尔可能会存在表单记录丢失的情况,所以,很有必要推出一款便于学生宿舍管理的一套软件。

本系统主要采用spring开发框架制。使用的技术有mysql数据库、mybatis驱动框架以及tomcat服务端部署,用到的集成开发工具主要是IDEA和jdk1.8。

该学生宿舍管理系统主要有以下几大功能:个人中心、学生管理、宿舍信息管理、请假记录管理、维修记录管理、公告信息管理、用户管理、日志管理

2.开发工具

2.1 IntelliJ IDEA

IntelliJ IDEA是用于Java语言开发的集成环境,是公认的最好的Java开发工具之一,IDEA相较于其他Java开发工具,具有智能选取、历史记录功能、编码辅助、排版灵活、与文件系统自动同步、代码检查、完全支持JSP等优势。

2.2 Tomcat

Tomcat服务器是一个免费的、开源的轻量级Web应用服务器,是开发和调试JSP程序的首选,Tomcat运行时占用的系统资源小,建有良好的可扩展性和安全性。

2.3 MySQL

MySQL是一款安全的、跨平台的、高效的、与主流编程语言紧密结合的数据库系统,MySQL由于其体积小、速度快、总体拥有成本低、开源等特点,广泛适用于中小型网站的开发,在Web应用方面,MySQL是最好的RDBMS(关系数据库管理系统)应用软件之一。

2.4 开发技术

2.4.1 Vue

不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。

2.4.2 Redis

Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

2.4.3 Spring Boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

Spring Boot特点

  • 创建独立的Spring应用程序

  • 嵌入的Tomcat,无需部署WAR文件

  • 简化Maven配置

  • 自动配置Spring

  • 提供生产就绪型功能,如指标,健康检查和外部配置

  • 绝对没有代码生成和对XML没有要求配置

3.系统分析

3.1 可行性分析

在系统开发的过程中系统的可行性分析是必不可少的,可行性的研究就是评估问题是否能得到解决并且是要以最少的时间和最少的代价来解决。为实现上面的目标还要必须考虑到解决这些问题的方法的优点和缺点,还要考虑到实现了这些系统规模的开发带来的经济效益。这里可以用技术的可行性,操作的可行性,经济的可行性对我们的系统进行可行性的研究。

3.1.1 技术性可行性

本项目设计的系统主要采用layui前端开发,后端使用java语言以及springboot集成开发性框架,采用mysql数据库,根据自身所学专业,结合网上查阅案列及图书馆资料,开发实现是没有太大问题的。

3.1.2 经济性可行性

开发一套成熟的软件,都需要经过一段漫长的过程,这里设计到软件的需求分析、制定计划,开发人员、测试环节、调试过程,都需要资金及人力的投入。而这套软件的开发,可以通过网上开源源码及相关资料的学习,在硬件及电脑使用上,都是自己所用,所以在开发成本上可以忽略不计。

3.1.3 操作性可行性

本系统设计到的功能主要有个人中心、学生管理、房间信息管理、来访信息管理、物品报修管理、维修进程管理、公告信息管理,这些功能模块的相关知识,都是平常所设计到的常用功能,在操作上都是可以实现的。

3.2 系统需求分析

通过了解用户的需求,可以知道操作简单的系统更易受到用户青睐,同时能够准确、完整的对信息进行管理。学生宿舍管理平台在对需求做相应的分析后,得出结论,系统主要分为两个角色:管理员和学生用户。
管理员模块主要进行数据的更新管理,功能分为个人中心、学生管理、房间信息管理、来访信息管理、物品报修管理、维修进程管理、公告信息管理;学生模块主要功能有个人中心、房间信息管理、来访信息管理、物品报修管理、维修进程管理、公告信息管理及评分信息管理。

3.2.1 功能需求

本系统是利用现代化的计算机网络技术将传统信息宣传方式整合,按照实践过程设计完成的。同时完善服务,初步设计一个学生宿舍管理系统平台以利于相关的事务操作。为了使系统在各项管理中发挥更大的作用,实现计算机信息化高效的管理,现将开发目标功能需求介绍如下:

管理员登录模块

管理员有权进行学生宿舍系统的管理,但所有的注册以及权限的使用,都需经过超级管理员授权,管理员进入主页后可以对相关功能版块进行管理操作:个人中心、学生管理、房间信息管理、来访信息管理、物品报修管理、维修进程管理、公告信息管理。

学生管理模块

拥有一定管理权限管理员,可进行学生列表的用户名称、用户密码、性别、学号、电话、相片、所在寝室查看,以及对应的学生增加、删除、修改、查询操作。

宿舍管理模块

拥有一定管理权限管理员,可进行宿舍列表的房间号、房间类型、楼层号、宿舍设备、校园图片、床位数量、登记时间查看,以及对应的宿舍增加、删除、修改、查询操作。

物品报修管理模块

拥有一定管理权限管理员,可进行物品报修列表的数据查看,以及对应的物品报修增加、删除、修改、查询操作。

3.2.2 非功能需求

该系统不仅要满足功能性需求,还需要满足看不到的非功能性需求,比如系统的兼容性、用户界面整体性、网页访问的流畅性,主要归纳如下几点:

  • 支持兼容性多浏览器访

  • 界面性网站整体美观、元素搭配协调

  • 安全性访问控制不受到攻击,防止sql注入

4.系统总体设计

4.1 系统功能图

该项目管理系统主要基于B/S设计模式,系统设计的功能有:学生管理、房间信息管理、来访信息管理、物品报修管理、维修进程管理、公告信息管理等。

4.2 系统流程图

学生宿舍管理系统工作流程为:当用户输入账号和密码,可登陆到系统的控制台页面,控制台可以对学生管理、房间信息管理、来访信息管理、物品报修管理、维修进程管理、公告信息管理进行数据库操作,执行完成后,可直接退出系统。以下是总体的流程图设计

4.3 数据库设计

4.3.1 表结构

用户表

权限表

日志表

学生表

宿舍表

宿舍楼表

公告板

班级表

留言评论表

4.3.2 E-R图

4.4 项目开发

  1. @RestController
  2. @RequestMapping("/system/user")
  3. public class SystemUserController {
  4. @Autowired
  5. private SystemUserService systemUserService;
  6. @Autowired
  7. private RedisUtil redisUtil;
  8. @PostMapping("/list")
  9. @RequirePermission(permissions = {"system:user:list"})
  10. public Result<PageInfo<SystemUser>> list(@RequestBody ListQuery<SystemUser> listQuery) {
  11. //多对多查询,先获取符合条件的id,否则pageInfo中的数据会出错
  12. List<Long> ids = systemUserService.listIdFitCondition(listQuery.getEntity());
  13. PageHelper.startPage(listQuery.getPage(), listQuery.getRows());
  14. List<SystemUser> list = systemUserService.listByIds(ids);
  15. PageInfo<SystemUser> pageInfo = new PageInfo<>(list);
  16. return Result.<PageInfo<SystemUser>>ok().add(pageInfo);
  17. }
  18. @GetMapping("/query")
  19. @RequirePermission(permissions = {"system:user:query"})
  20. public Result<SystemUser> query(@RequestParam("id") Long id) {
  21. SystemUser systemUser = systemUserService.get(id).orElseThrow(() -> new HttpException(HttpCode.FAILED, "没有该用户"));
  22. return Result.<SystemUser>ok().add(systemUser);
  23. }
  24. @GetMapping("/delete")
  25. @RequirePermission(permissions = {"system:user:delete"})
  26. @Log("删除用户")
  27. public Result<?> delete(@RequestParam("id") Long id) {
  28. List<SystemUser> subordinates = systemUserService.listByLeaderId(id);
  29. if (subordinates.size() > 0) {
  30. throw new HttpException(HttpCode.FAILED, "该用户为其他人领导,无法删除");
  31. } else {
  32. systemUserService.delete(id);
  33. return Result.ok("删除成功");
  34. }
  35. }
  36. @PostMapping("/saveOrUpdate")
  37. @RequirePermission(permissions = {"system:user:save", "system:user:update"})
  38. @Log("添加修改用户")
  39. public Result<?> saveOrUpdate(@RequestBody @Validated SystemUser user) {
  40. Boolean validate = systemUserService.validateLoginName(user.getLoginName(),user.getId());
  41. if (!validate) {
  42. throw new HttpException(HttpCode.FAILED, "登录名称已存在");
  43. }
  44. systemUserService.saveOrUpdate(user);
  45. return Result.ok("操作成功");
  46. }
  47. @GetMapping("/resetPassword")
  48. @RequirePermission(permissions = {"system:user:update"})
  49. @Log("重置用户密码")
  50. public Result<?> resetPassword(@RequestParam("id") Long id) {
  51. systemUserService.changePassword(Constant.DEFAULT_PASSWORD, id);
  52. return Result.ok("密码重置成功");
  53. }
  54. @GetMapping("/listAll")
  55. @RequirePermission(permissions = {"system:user:list"})
  56. public Result<List<SystemUser>> list() {
  57. List<SystemUser> systemUserList = systemUserService.listAll();
  58. return Result.<List<SystemUser>>ok().add(systemUserList);
  59. }
  60. /**
  61. * 修改密码
  62. *
  63. * @param token token
  64. * @param password 包括原密码,修改后的密码,再次输入的密码
  65. * @return 密码是否修改成功
  66. */
  67. @PostMapping("/change")
  68. public Result<?> validate(@RequestHeader(HEADER_TOKEN) String token, @RequestBody Password password) {
  69. if (!password.getCurrent1().equals(password.getCurrent2())) {
  70. throw new HttpException(HttpCode.FAILED, "两次密码输入不一致");
  71. }
  72. Long id = redisUtil.get(token);
  73. Boolean bool = systemUserService.validatePassword(password.getOldPassword(), id);
  74. if (bool) {
  75. systemUserService.changePassword(password.getCurrent1(), id);
  76. //移除token
  77. redisUtil.deleteToken(token);
  78. return Result.ok("密码修改成功,请重新登录");
  79. } else {
  80. throw new HttpException(HttpCode.FAILED, "原密码不正确");
  81. }
  82. }
  83. /**
  84. * 修改登录用户信息
  85. *
  86. * @param systemUser 修改的用户
  87. * @return 修改成功后将修改后的用户返回
  88. */
  89. @PostMapping("/update")
  90. public Result<SystemUser> update(@RequestBody SystemUser systemUser, @RequestHeader(HEADER_TOKEN) String token) {
  91. systemUser.setId(redisUtil.get(token));
  92. systemUserService.saveOrUpdate(systemUser);
  93. return Result.<SystemUser>ok("修改成功").add(systemUser);
  94. }
  95. @GetMapping("/changeIcon/{icon}")
  96. public Result<?> changeIcon(@PathVariable String icon , @RequestHeader(HEADER_TOKEN) String token) {
  97. systemUserService.changeIcon(icon, redisUtil.get(token));
  98. return Result.ok("修改成功");
  99. }
  100. }

5.项目展示

登录

宿舍管理

权限菜单管理

修改菜单

角色管理

修改角色

班级管理

6.总结

遇到的问题

  • 分用户登录之后的权限问题

  • 一对多查询问题

解决方案

  • 分用户登录之后的权限问题

    • 对于这个问题本来是想通过SpringSecurity来写的,但是水平不够,没写出来,后来就用了笨方法,通过单选框实现分用户登录,之后的所有功能无论是相同的还是不同的都分用户身份写
  • mybatis一对多查询问题

    • 在项目实现过程中,多处用到了一对多查询,而这个问题也是我写这篇博客的主要原因,因此叙述的会稍微详细一些
    • 持久层我使用的是mybatis,数据库使用的是mysql,查询用的是左外连接
上传的附件 cloud_download 设计文档.docx ( 1.11mb, 2次下载 ) cloud_download dms-master (1).zip ( 2.65mb, 2次下载 ) cloud_download dms_back-master.zip ( 992.77kb, 2次下载 )
error_outline 下载需要11点积分

发送私信

会冒泡的可乐

111
文章数
12
评论数
最近文章
eject