基于SpringBoot的教师宿舍管理系统设计与实现(源码+调试)

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教师宿舍管理系统设计与实现。

功能需求

本教师宿舍管理系统通过分析和确定系统的角色和功能划分,按照业务合理区分为不同的菜单功能模块。从宿舍管理业务以及学校管理人员的角度出发,对每个功能的需求实现点进行人性化详细的构思。本系统未做完善的用户体系,只是简单的分为了三个用户分别为:

  1. 系统管理员:登录、教师管理、楼栋管理、宿舍管理、入住管理、宿管管理、管理员管理。
  2. 教师用户:教师管理、宿舍管理。
  3. 宿管用户:教师管理、宿舍管理、入住管理。
    具体功能可以根据角色权限配置菜单按钮。
部分效果图

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

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

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

部分代码
  /**
     * 宿管存储服务
     */
    @Autowired
    private DormitoryManagerRepository dormitoryManagerRepository;

    @RequestMapping(method = RequestMethod.POST, path = "/login", produces = "application/json", consumes = "application/json")
    @ResponseBody
    public ResponseEntity<LoginResponse> login(@RequestBody LoginRequest loginRequest, HttpServletRequest request) {
        try {
            LoginResponse loginResponse = doLogin(loginRequest, request);
            return new ResponseEntity(loginResponse, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    @RequestMapping(method = RequestMethod.POST, path = "/logout", produces = "application/json", consumes = "application/json")
    @ResponseBody
    public ResponseEntity<LogoutResponse> logout(@RequestBody LogoutRequest logoutRequest, HttpServletRequest request) {
        try {
            LogoutResponse logoutResponse = doLogout(logoutRequest, request);
            return new ResponseEntity(logoutResponse, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    public LogoutResponse doLogout(LogoutRequest logoutRequest, HttpServletRequest request) {
        LogoutResponse logoutResponse = new LogoutResponse();
        logoutResponse.setOperator(logoutRequest.getOperator());
        logoutResponse.setRequestId(logoutRequest.getRequestId());
        request.getSession().setAttribute("user", null);
        request.getSession().setAttribute("userType", null);
        logoutResponse.setResponseCode(ResponseCodeEnum.SUCCESS);
        logoutResponse.setTimestamp(System.currentTimeMillis());
        return logoutResponse;
    }

    private LoginResponse doLogin(LoginRequest loginRequest, HttpServletRequest request) {
        //登录返回信息
        LoginResponse loginResponse = new LoginResponse();
        loginResponse.setOperator(loginRequest.getOperator());
        loginResponse.setRequestId(loginRequest.getRequestId());

        //验证码校验
        Object cpacha = request.getSession().getAttribute("cpacha");
        //校验session数据是否失效
        if (null == cpacha || !StringUtils.hasLength(String.valueOf(cpacha))) {
            //验证码已失效
            loginResponse.setResponseCode(ResponseCodeEnum.CPACHA_INVALID);
            loginResponse.setTimestamp(System.currentTimeMillis());
            return loginResponse;
        } else {
            String[] cpachaCode = cpacha.toString().split("_");
            long time = Long.parseLong(cpachaCode[1]);
            long now = System.currentTimeMillis();
            if (now - time > cpachaTimeout) {
                //验证码已过期
                loginResponse.setResponseCode(ResponseCodeEnum.CPACHA_INVALID);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            }
            // 设置不区分大小写
            if (!loginRequest.getCaptcha().toUpperCase().equals(cpachaCode[0].toUpperCase())) {
                //验证码输入错误
                loginResponse.setResponseCode(ResponseCodeEnum.CPACHA_INVALID);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            }
        }


        //登录信息校验
        if ("1".equals(loginRequest.getType())) {


            // 超级管理员用户
            AdminEntity admingEntity = adminRepository.findByName(loginRequest.getAccount());
            if (null == admingEntity) {
                //账户不存在
                loginResponse.setResponseCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            } else {
                if (!loginRequest.getPassword().equals(admingEntity.getPassword())) {
                    //密码错误
                    loginResponse.setResponseCode(ResponseCodeEnum.PASSWORD_ERROR);
                    loginResponse.setTimestamp(System.currentTimeMillis());
                    return loginResponse;
                } else {
                    request.getSession().setAttribute("user", loginRequest.getAccount());
                    request.getSession().setAttribute("userType", loginRequest.getType());
                    loginResponse.setResponseCode(ResponseCodeEnum.SUCCESS);
                    loginResponse.setTimestamp(System.currentTimeMillis());
                    return loginResponse;
                }
            }
        } else if ("3".equals(loginRequest.getType())) {


            // 教师登录
            TeacherEntity studentEntity = studentRepository.findBySn(loginRequest.getAccount());
            if (null == studentEntity) {
                List<TeacherEntity> studentEntityList = studentRepository.findByName(loginRequest.getAccount());
                if (studentEntityList.size() > 1) {
                    loginResponse.setResponseCode(ResponseCodeEnum.SAME_NAME);
                    loginResponse.setTimestamp(System.currentTimeMillis());
                    return loginResponse;
                } else if (studentEntityList.size() == 1) {
                    studentEntity = studentEntityList.get(0);
                } else {
                    loginResponse.setResponseCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST);
                    loginResponse.setTimestamp(System.currentTimeMillis());
                    return loginResponse;
                }
            }
            if (!loginRequest.getPassword().equals(studentEntity.getPassword())) {
                //密码错误
                loginResponse.setResponseCode(ResponseCodeEnum.PASSWORD_ERROR);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            } else {
                request.getSession().setAttribute("user", loginRequest.getAccount());
                request.getSession().setAttribute("userType", loginRequest.getType());
                loginResponse.setResponseCode(ResponseCodeEnum.SUCCESS);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            }
        } else if ("2".equals(loginRequest.getType())) {


            // 宿管登录
            DormitoryManagerEntity dormitoryManagerEntity = dormitoryManagerRepository.findBySn(loginRequest.getAccount());
            if (null == dormitoryManagerEntity) {
                List<DormitoryManagerEntity> dormitoryManagerEntityList = dormitoryManagerRepository.findByName(loginRequest.getAccount());
                if (dormitoryManagerEntityList.size() > 1) {
                    loginResponse.setResponseCode(ResponseCodeEnum.SAME_NAME);
                    loginResponse.setTimestamp(System.currentTimeMillis());
                    return loginResponse;
                } else if (dormitoryManagerEntityList.size() == 1) {
                    dormitoryManagerEntity = dormitoryManagerEntityList.get(0);
                } else {
                    loginResponse.setResponseCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST);
                    loginResponse.setTimestamp(System.currentTimeMillis());
                    return loginResponse;
                }
            }
            if (!loginRequest.getPassword().equals(dormitoryManagerEntity.getPassword())) {
                //密码错误
                loginResponse.setResponseCode(ResponseCodeEnum.PASSWORD_ERROR);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            } else {
                request.getSession().setAttribute("user", loginRequest.getAccount());
                request.getSession().setAttribute("userType", loginRequest.getType());
                loginResponse.setResponseCode(ResponseCodeEnum.SUCCESS);
                loginResponse.setTimestamp(System.currentTimeMillis());
                return loginResponse;
            }
        } else {


            //不支持其他登录方式
            loginResponse.setResponseCode(ResponseCodeEnum.PARAM_ERROR);
            loginResponse.setTimestamp(System.currentTimeMillis());
            return loginResponse;
        } 
安装部署需求

idea运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在idea中运行打包;

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL5.7
4.框架:SpringBoot+bootstrap

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 IDEA
语言 JDK1.8 、SpringBoot、bootstrap
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/402936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CapCut - 剪映国际版11.1.0

​【应用名称】&#xff1a;CapCut - 剪映国际版 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#CapCut #剪映国际版 【应用版本】&#xff1a;11.1.0 【应用大小】&#xff1a;231MB 【软件说明】&#xff1a;软件升级更新。目前大家广泛使用的最令人惊叹、最专…

【鸿蒙 HarmonyOS 4.0】开发工具安装

一、准备开发环境 1.1、安装IDE 鸿蒙应用开发需要使用配套的IDE——HUAWEI DevEco Studio。 DevEco Studio基于IntelliJ IDEA Community&#xff08;IDEA社区版&#xff09;构建&#xff0c;为鸿蒙应用提供了一站式开发环境&#xff0c;集成了开发、运行、调试以及发布应用的…

蓝色证件照怎么改?分享3款实用的证件照工具!

在日常生活和工作中&#xff0c;我们经常需要用到蓝色背景的证件照&#xff0c;无论是求职、办理证件还是其他正式场合&#xff0c;一张高质量的蓝色证件照都是必不可少的。然而&#xff0c;不是每个人都能在照相馆拍出完美的证件照&#xff0c;这时候&#xff0c;一些专业的证…

Socket通信---Python发送数据给C++程序

0. Problems 很多时候实现某种功能&#xff0c;需要在不同进程间发送数据&#xff0c;目前有几种主流的方法&#xff0c;如 让python和C/C程序互相发送数据&#xff0c;其实有几种方法&#xff1a; 共享内存共享文件Socket通信 在这里只提供Socket通信的例程&#xff0c;共享…

不要浪费

解法&#xff1a; 记录一下tle的代码 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n bool check(vector<int>& a, int l,int k) {int sum 0;for (int i 0; i < a.size() && l…

到底什么是CIDR(无类域间路由)?

【摘要】 CIDR&#xff08;无类域间路由&#xff09;是一种用于对互联网IP地址进行聚合和分配的技术。它通过改变IP地址的分配方式&#xff0c;有效地解决了IPv4地址空间不足的问题。本文将详细介绍CIDR的原理、使用方法以及它对互联网的影响&#xff0c;还会针对CIDR出三道例题…

在vue3中使用canvas实现雨滴效果

在vue3中使用canvas实现雨滴效果 这是封装的一个组件DotAndRain&#xff08; &#xff09; <script setup> import { ref, onMounted } from "vue"; import { onUnmounted } from "vue";let animationFrameId null;const el ref(null); let canv…

Day3 javaweb开发——登录认证

登录功能 没什么好写的&#xff0c;就是LoginController层里面要注入empService的对象 登录校验&#xff08;重点&#xff09; 没有校验的情况 没有登录之前&#xff0c;访问数据的网址需要跳转到登录页面。 http是无状态的&#xff0c;处理其他业务时没有判断他是否登录 …

LINUX读取RTC实时时钟时间

linux 读写RTC时间_linux rtc 读写-CSDN博客

[newstarctf2023] --RE wp

AndroGenshin: rc4加密表&#xff0c;base64换表&#xff1a; 脚本梭就行 python username b"genshinimpact" base64_table [125, 239, 101, 151, 77, 163, 163, 110, 58, 230, 186, 206, 84, 84, 189, 193, 30, 63, 104, 178, 130, 211,164, 94, 75, 16, 32, 33…

anomalib1.0学习纪实-续4:做个小结

我们就以padim为例。 一、主入口&#xff1a; 二、Padim类。 这个Padim类就在src\anomalib\models\image\padim文件夹下。 这个Padim类的父类就是 AnomalyModule&#xff0c;这个父类你不能改动了&#xff0c;里面的内容写死了。 这个Padim类&#xff0c;最重要的是&#xf…

基于Spring Boot的学生评奖评优管理系统,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1760641819451928577

vue 非父子通信-event bus 事件总线

1.作用 非父子组件之间&#xff0c;进行简易消息传递。(复杂场景→ Vuex) 2.步骤 创建一个都能访问的事件总线 &#xff08;空Vue实例&#xff09; import Vue from vue const Bus new Vue() export default Bus A组件&#xff08;接受方&#xff09;&#xff0c;监听Bus的…

jvm垃圾收集器-三色标记算法

1.对象已死吗? 在堆里面存放着Java世界中几乎所有的对象实例&#xff0c;垃圾收集器在对堆进行回收前&#xff0c;第一件事情就是要确定这些对象之中哪些还“存活”着&#xff0c;哪些已经“死去”&#xff08;即不可能再被任何途径使用的对象). 引计数法 引用计数算法是一…

MyBatisPlus常用注解

目录 一、TableName 二、TableId 三、TableField 四、TableLogic 一、TableName 在使用MyBatis-Plus实现基本的CRUD时&#xff0c;我们并没有指定要操作的表&#xff0c;只是在Mapper接口继承BaseMapper时&#xff0c;设置了泛型User&#xff0c;而操作的表为user表 由此得出…

飞天使-k8s知识点22-kubernetes实操7-ingress

文章目录 ingress环境准备准备service和pod验证效果 https 代理效果 ingress 在 Kubernetes 中&#xff0c;Ingress 是一种 API 对象&#xff0c;它管理外部访问集群内部服务的规则。你可以将其视为一个入口&#xff0c;它可以将来自集群外部的 HTTP 和 HTTPS 路由到集群内部的…

海思3559 yolov5 wk模型部署笔记

文章目录 安装3559工具链编译opencv编译项目总结 安装3559工具链 将3559工具链copy到虚拟机上&#xff0c;并解压得到安装包 解压&#xff1a; tar -zxvf aarch64-himix100-linux.tgz解压后会得到安装包文件夹&#xff1a; 安装工具链&#xff1a; sudo ./aarch64-himix100…

用 Python 自动化处理无聊的事情

“编程最棒的部分就是看到机器做一些有用的事情而获得的胜利。用 Python 将无聊的事情自动化将所有编程视为这些小小的胜利&#xff1b;它让无聊变得有趣。” Hilary Mason&#xff0c;数据科学家兼 Fast Forward Labs 创始人 “我很享受打破东西然后把它们重新组合起来的乐趣…

SPSSAU【文本分析】|文本聚类

SPSSAU共提供两种文本聚类方式&#xff0c;分别是按词聚类和按行聚类。按词聚类是指将需要分析的关键词进行聚类分析&#xff0c;并且进行可视化展示&#xff0c;即针对关键词进行聚类&#xff0c;此处关键词可以自由选择。按行聚类分析是指针对以‘行’为单位进行聚类分析&…

陈世元:被保送中科院,两次被裁,人生不能老是按部就班的走下去,需要冒险,尝试一下新的东西

《程客有话说》是我们最新推出的一个访谈栏目&#xff0c;邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事&#xff0c;我们尝试建立一个程序员交流与学习的平台&#xff0c;也欢迎大家推荐朋友或自己来参加我们的节目&#xff0c;一起加油。 本期我们邀请的程…