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

news2024/9/24 9:27:42

项目描述

临近学期结束,还是毕业设计,你还在做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;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

考研高数(高阶导数的计算)

1.归纳法 常见高阶导数 2.泰勒展开式 3.莱布尼兹公式 4.用导数定义证明导函数在某一点连续的例题

并发编程(2)基础篇-管程

4 共享模型之管程 本章内容 共享问题synchronized线程安全分析Monitorwait/notify线程状态转换活跃性Lock 4.1 共享带来的问题 4.1.1 小故事 老王&#xff08;操作系统&#xff09;有一个功能强大的算盘&#xff08;CPU&#xff09;&#xff0c;现在想把它租出去&#xff…

unity学习(22)——客户端与服务器合力完成注册功能(4)数据库化

单纯的账号密码这种非频繁读写&#xff0c;实现起来很简单的&#xff0c;游戏的属性信息到时候也许会比较麻烦。 思路&#xff1a;每次加入有新键值TryAdd&#xff0c;如果加入成功&#xff0c;直接重写账号密码文件即可。 C#JsonConvert.DeserializeObject反序列化与JsonCon…

Another Redis Desktop Manager工具连接集群

背景&#xff1a;使用Another Redis Desktop Manager连接redsi集群 win10安装 使用 下载 某盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1dg9kPm9Av8-bbpDfDg9DsA 提取码&#xff1a;t1sm 使用

PLC远程控制网关如何助力企业提升生产效率与运维能力

PLC远程控制网关如何助力企业提升生产效率与运维能力 PLC远程控制网关是一种用于连接PLC设备与物联网系统的设备。它通过以太网、Wi-Fi、蜂窝网络等通信方式&#xff0c;将PLC设备连接到EMCP物联网云平台。PLC远程控制网关可以实现数据采集、协议转换、边缘计算等功能&#xf…

IO进程线程day6

思维导图&#xff1a; 1.将互斥机制的代码实现重新敲一遍。 #include<myhead.h> int num520;//临界资源//创建一个互斥锁变量 pthread_mutex_t mutex;//定义任务&#xff11;函数 void *task1(void *arg) {printf("我是任务&#xff11;&#xff1a;\n");//3.…

程序员可以做哪些副业?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

SpringCloud全家桶---常用微服务组件(1)

注册中心: *作用: 服务管理 Eureka(不推荐)[读音: 优瑞卡] Nacos(推荐) Zookeeper [读音: 如k波] Consul [读音:康寿] **注册中心的核心功能原理(nacos)** 服务注册: 当服务启动时,会通过rest接口请求的方式向Nacos注册自己的服务 服务心跳: NacosClient 会维护一个定时心跳持…

【Java 面试题】MySQL与Redis 如何保证双写一致性

目录 方案一:延时双删方案二: 删除缓存重试机制方案三:读取biglog异步删除缓存系列文章版本记录方案一:延时双删 延时双删流程 先删除缓存再更新数据库休眠一会(比如1秒),再次删除缓存。这个休眠一会,一般多久呢?都是1秒? 这个休眠时间 = 读业务逻辑数据

七、计算机视觉-图像的ROI区域

文章目录 1、什么是ROI2、ROI如何实现的3、一个案例总结 1、什么是ROI 在计算机视觉中&#xff0c;ROI代表感兴趣区域&#xff08;Region of Interest&#xff09;&#xff0c;它是指图像或视频中被指定为需要特别关注或处理的区域。ROI可以帮助减少计算量&#xff0c;并且在处…

口吃矫正:1.缓解口吃预感与紧张感的心态引导

一、我的经验 首先可以看看电影《心灵捕手》的一个片段&#xff1a; 这个片段大致讲的是威尔遇到了一个自己心仪的女生&#xff0c;第一次约会后不敢再约&#xff0c;因为他想保持第一次约会时给女生的完美状态&#xff1b;心理医生查克则给威尔讲述了他的妻子“睡觉时放屁把自…

学习JAVA的第三天(基础)

目录 流程控制语句 顺序结构 分支结构 循环结构 分类&#xff1a; 练习 跳转控制语句 练习 数组 数组介绍 数组的定义和静态初始化 数组定义 数组的静态初始化 数组元素访问 数组遍历 数组动态初始化 JAVA内存分配 流程控制语句 顺序结构 是Java程序默认的执行流程…

Nginx跳转模块之location

目录 一、location模块基本介绍 1、location模块是什么&#xff1f; 2、三种匹配类别 3、常用的匹配规则 4、匹配优先级 优先级总结 二、location模块使用实例 1、精确匹配优先级小于一般匹配的特殊情况 2、解决方法 3、实际网站中使用的三个匹配规则 ①第一个必选规…

MyBatis--02-1- MybatisPlus----条件构造器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言AbstractWrapper 条件构造器官网文档https://baomidou.com/pages/10c804/#abstractwrapper](https://baomidou.com/pages/10c804/#abstractwrapper)![在这里插入…

MyBatisPlus:PG数组类型自动映射问题

引言: PostGreSQL数据库提供了丰富的数据类型,通过查看官网文档,我们也可以发现,PG也提供了对数组类型的支持。 但是在实际开发中,我们通常是使用MyBatis/MyBatisPlus这种半自动ORM映射框架来实现数据库/表数据基本的增删改查,以及其它操作。那么,问题来了,如何…

Web安全之浅见

备注&#xff1a;这是我在2017年在自己的网站上写的文章&#xff0c;今天迁移过来。 昨天去参加了公司组织的一个关于网络安全的培训&#xff0c;了解了很多关于网络安全方面的知识&#xff0c;也才意识到网络安全是一项极其重要的领域。 本篇文章主要聊聊Web安全。不过我对于网…

大模型相关论文笔记

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 用于知识密集型NLP任务的检索增强生成 Facebook 2020 PDF CODE &#xff08;论文代码链接已失效&#xff0c;以上是最新链接&#xff09; 引言 大模型有幻觉问题&#xff08;hallucinations&#xff09;&…

串的相关题目

于是他错误的点名开始了 我发现有关hash得题目有些是可以通过map数组来完成的&#xff1a;何为map数组&#xff0c;我们先思考一下最简单的桶的排序&#xff0c;桶排序是将我们需要数字最为下标输进数组中&#xff0c;而数组是存放的数字是这个数字出现的次数&#xff0c;但是由…

【Python Scrapy】分布式爬虫利器

在当今信息爆炸的时代&#xff0c;获取大规模数据对于许多应用至关重要。而分布式爬虫作为一种强大的工具&#xff0c;在处理大量数据采集和高效爬取方面展现了卓越的能力。 本文将深入探讨分布式爬虫的实际应用场景&#xff0c;通过代码示例演示其在提升爬取效率、保障系统稳定…

Day32 进程Process

文章目录 1.什么是进程1.1 概念1.2 特点1.3 进程段1.4 进程分类1.5 进程状态1.6 进程状态切换图1.7 调度进程 2.进程函数接口2.1 创建进程 fork()2.2 回收资源函数2.3 结束进程2.4 获取进程号 3.exec函数族&#xff08;了解&#xff09;4.守护进程 Daemon4.1 守护进程的特点4.2…