【开源】基于Vue+SpringBoot的高校宿舍调配管理系统

在这里插入图片描述
项目编号: S 051 ,文末获取源码。 \color{red}{项目编号:S051,文末获取源码。} 项目编号:S051,文末获取源码。


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能需求
    • 2.1 学生端
    • 2.2 宿管
    • 2.3 老师端
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询单条个人习惯
    • 4.2 查询我的室友
    • 4.3 查询宿舍
    • 4.4 查询指定性别全部宿舍
    • 4.5 初次分配宿舍
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的高校宿舍调配管理系统,包含了宿舍管理模块、宿舍分配模块、个人配置模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,高校宿舍调配管理系统基于角色的访问控制,给高校管理员、教师和学生角色使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏

源码下载


二、功能需求

第二章为功能需求,并非实际功能模块,请同学们知晓。

使用技术:前端vue 后端springboot 数据库mysql。

名称:基于多维匹配度分析的宿舍调配管理系统开发。

登录界面分角色登录,在登录之前展示如下界面。

在这里插入图片描述
点击右上方登录进入登录界面,如下。

在这里插入图片描述
一共有三个用户:学生 宿管 老师

2.1 学生端

有个人信息的添加修改,退出登录,分配信息(填写宿舍分配所需个人信息),调宿信息(填写申请调宿申请和查看反馈结果),我的舍友(展示宿舍分配之后的舍友信息)。

在这里插入图片描述

申请调宿的信息:

在这里插入图片描述
分配宿舍的信息:

在这里插入图片描述
在分配宿舍这块使用 kmeans 算法或者 贪心 算法。

2.2 宿管

个人信息的填写修改,学生管理(该楼学生的信息查询)。

在这里插入图片描述

2.3 老师端

个人信息,学生查询(精准查询(按照学号),模糊查询(学院专业班级)),宿舍调配(处理学生的申请调宿问题),再有一个对按照算法分配好的学生宿舍结果的一个确认。

在这里插入图片描述


三、系统展示

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


四、核心代码

4.1 查询单条个人习惯

@RequestMapping(value = "/getMySettings", method = RequestMethod.GET)
@ApiOperation(value = "查询单条个人习惯")
public Result<MySettings> getMySettings(){
    User currUser = securityUtil.getCurrUser();
    MySettings mySettings = iMySettingsService.getById(currUser.getId());
    if(mySettings == null) {
        mySettings = MySettingsUtils.getMySettings(currUser);
        iMySettingsService.saveOrUpdate(mySettings);
    }
    return new ResultUtil<MySettings>().setData(mySettings);
}

4.2 查询我的室友

@RequestMapping(value = "/getMyFriend", method = RequestMethod.GET)
@ApiOperation(value = "查询我的室友")
public Result<List<MySettings>> getMyFriend(){
    User currUser = securityUtil.getCurrUser();
    MySettings mySettings = iMySettingsService.getById(currUser.getId());
    if(mySettings == null) {
        return ResultUtil.error("没有你的配置");
    }
    QueryWrapper<MySettings> qw = new QueryWrapper<>();
    qw.eq("dorm_id",mySettings.getDormId());
    return new ResultUtil<List<MySettings>>().setData(iMySettingsService.list(qw));
}

4.3 查询宿舍

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询宿舍")
public Result<IPage<Dorm>> getByPage(@ModelAttribute Dorm dorm ,@ModelAttribute PageVo page){
    QueryWrapper<Dorm> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dorm.getHouse())) {
        qw.like("house",dorm.getHouse());
    }
    if(!ZwzNullUtils.isNull(dorm.getRoom())) {
        qw.like("room",dorm.getRoom());
    }
    if(!ZwzNullUtils.isNull(dorm.getType())) {
        qw.like("type",dorm.getType());
    }
    IPage<Dorm> data = iDormService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Dorm>>().setData(data);
}

4.4 查询指定性别全部宿舍

@RequestMapping(value = "/getMyAll", method = RequestMethod.GET)
@ApiOperation(value = "查询指定性别全部宿舍")
public Result<List<Dorm>> getMyAll(){
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<Dorm> qw = new QueryWrapper<>();
    if(Objects.equals("女",currUser.getSex())) {
        qw.eq("type","女生宿舍");
    } else {
        qw.eq("type","男生宿舍");
    }
    return new ResultUtil<List<Dorm>>().setData(iDormService.list(qw));
}

4.5 初次分配宿舍

@RequestMapping(value = "/createDorm", method = RequestMethod.GET)
@ApiOperation(value = "初次分配宿舍")
public Result<Object> createDorm(){
    User currUser = securityUtil.getCurrUser();
    MySettings mySettings = iMySettingsService.getById(currUser.getId());
    if(mySettings == null) {
        return ResultUtil.error("未初始化");
    }
    if(!ZwzNullUtils.isNull(mySettings.getDormId())) {
        return ResultUtil.error("您的宿舍已分配!");
    }
    QueryWrapper<DormChange> qw2 = new QueryWrapper<>();
    qw2.eq("user_id",currUser.getId());
    qw2.eq("status","未审核");
    if(iDormChangeService.count(qw2) > 0L) {
        return ResultUtil.error("您已申请,请等待审核!");
    }
    // 确认学生的性别
    String sex = mySettings.getSex();
    if(!Objects.equals("女",sex)) {
        sex = "男";
    }
    // 查询所有宿舍
    List<Dorm> dormList = iDormService.list();
    // 次优解,空宿舍
    Dorm ans2 = null;
    // 最优解,有人且符合条件的宿舍
    Dorm ans1 = null;
    // 最优解符合的条件数
    Integer ansCount = -1;
    for (Dorm d : dormList) {
        if(Objects.equals("男",sex) && Objects.equals("女生宿舍",d.getType()) || Objects.equals("女",sex) && Objects.equals("男生宿舍",d.getType())) {
            // 宿舍性别过滤
            continue;
        }
        // 查询宿舍内的学生
        QueryWrapper<MySettings> sQw = new QueryWrapper<>();
        sQw.eq("dorm_id",d.getId());
        List<MySettings> settingsList = iMySettingsService.list(sQw);
        if(settingsList.size() > 1) {
            // 设定两人满员,过滤该宿舍
        } else if(settingsList.size() < 1) {
            // 找到次优解
            if(ans2 == null) {
                ans2 = d;
            }
        } else {
            // 宿舍内满足条件的数量
            Integer maxCount = 0;
            MySettings se = settingsList.get(0);
            if(se == null) {
                continue;
            }
            // 计算和室友关系的匹配指标
            if(Objects.equals(se.getSetting1(),mySettings.getSetting1())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting2(),mySettings.getSetting2())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting3(),mySettings.getSetting3())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting4(),mySettings.getSetting4())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting5(),mySettings.getSetting5())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting6(),mySettings.getSetting6())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting7(),mySettings.getSetting7())) {
                maxCount ++;
            }
            if(Objects.equals(se.getSetting8(),mySettings.getSetting8())) {
                maxCount ++;
            }
            if(maxCount > ansCount) {
                // 如果满足最优条件
                ansCount = maxCount;
                ans1 = d;
            }
        }
    }
    if(ans1 != null) {
        DormChange dc = MySettingsUtils.createDormChange(mySettings, ans1);
        iDormChangeService.saveOrUpdate(dc);
    } else if(ans2 != null) {
        DormChange dc = MySettingsUtils.createDormChange(mySettings, ans2);
        iDormChangeService.saveOrUpdate(dc);
    } else {
        return ResultUtil.error("没有合适的宿舍");
    }
    return ResultUtil.success();
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

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

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

相关文章

Visual Studio 2022分析C#程序内存泄漏

背景 最近我们的项目出现了内存激增的情况&#xff0c;初次探讨&#xff0c;我们发现和机器人发生通信之后&#xff0c;内存会缓慢上升&#xff0c;直到系统崩溃。 例子 由于只是介绍一个简单的方案&#xff0c;所以就写一个比较简单的例子来演示了&#xff0c;代码如下&…

Electron+Ts+Vue+Vite桌面应用系列:TypeScript常用时间处理工具

文章目录 1️⃣ 时间处理工具1.1 格式化时间1.2 把时间戳改成日期格式1.3 Day.js 工具类使用1.4 date-fns 工具类使用 优质资源分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134712978 ElectronTsVueVite桌面应用…

C# 用代码设置受保护的Excel

写在前面 在导出Excel文件的时候&#xff0c;为了防止文件内容被篡改&#xff0c;这时候就需要对Excel设置工作簿保护和工作表保护&#xff0c;本文使用的是Spire.XLS的免费版本来实现&#xff0c;免费版本是受限的&#xff0c;但是一般情况下已经够用了。 通过NuGet引入Free…

怎么使用Matplotlib画图(折线图、散点图、柱状图、直方图、饼图)

文章目录 前言一、Matplotlib介绍1.1 什么是Matplotlib1.2 为什么要学习Matplotlib1.3 实现一个简单的Matplotlib画图&#xff08;Hello World&#xff09;1.4 认识Matplotlib图像结构1.5 拓展知识点&#xff1a;matplotlib三层结构1.5.1 容器层1.5.2 辅助显示层1.5.3 图像层 二…

对某登录站点的JS前端逆向思路

前言 js逆向一直没有相关了解&#xff0c;虽然目前渗透遇见的不是很多&#xff0c;大多数遇见的要么不加密&#xff0c;要么无法实现其加密流程&#xff0c;不过最近看到了一个较为简单的站点正好能够逆向出来&#xff0c;就做了简单记录。本文旨在介绍js逆向的一些基础思路&a…

Golang数据类型(数字型)

Go数据类型&#xff08;数字型&#xff09; Go中数字型数据类型大致分为整数&#xff08;integer&#xff09;、浮点数&#xff08;floating point &#xff09;和复数&#xff08;Complex&#xff09;三种 整数重要概念 整数在Go和Python中有较大区别&#xff0c;主要体现在…

Spring Security 6.x 系列(7)—— 源码分析之Builder设计模式

一、Builder设计模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者&#xff0c;把他们放到一起看看他们的共同特点&#xff1a; 查看AuthenticationManagerBuilder的继承结构图&#xff1a; 查看HttpSecurity的继承结构图&#xff1a; 查看W…

Java实现飞翔的鸟小游戏

Java实现飞翔的鸟小游戏 1.准备工作 创建一个新的Java项目命名为“飞翔的鸟”&#xff0c;并在src中创建一个包命名为“com.qiku.bird"&#xff0c;在这个包内分别创建4个类命名为**“Bird”、“BirdGame”、“Column”、“Ground”&#xff0c;并向需要的图片**素材导入…

Redis7--基础篇4(Redis事务)

Redis事务是什么 可以一次执行多个命令&#xff0c;本质是一组命令的集合&#xff0c;一个事务中的所有命令都会序列化&#xff0c;按顺序串行&#xff0c;而不会被其他命令插入。 其作用就是在一个队列中&#xff0c;一次性、顺序、排他的执行一系列命令。 Redis事务 VS 数据…

【Java】文件I/O-文件内容操作-输入输出流-Reader/Writer/InputStream/OutputStream四种流

导读 在文件I/O这一节的知识里&#xff0c;对文件的操作主要分为两大类&#xff1a; ☑️针对文件系统进行的操作 ☑️针对文件内容进行的操作 上文已经讲了针对文件系统即File类的操作&#xff0c;这篇文章里博主就来带了解针对文件内容的操作&#xff0c;即输入输出流&am…

润申信息企业标准化管理系统 SQL注入漏洞复现

0x01 产品简介 润申信息科技企业标准化管理系统通过给客户提供各种灵活的标准法规信息化管理解决方案&#xff0c;帮助他们实现了高效的标准法规管理&#xff0c;完成个性化标准法规库的信息化建设。 0x02 漏洞概述 润申信息科技企业标准化管理系统 CommentStandardHandler.as…

视频分割方法:批量剪辑高效分割视频,提取m3u8视频技巧

随着互联网的快速发展&#xff0c;视频已成为获取信息、娱乐、学习等多种需求的重要载体。然而&#xff0c;很多时候&#xff0c;需要的只是视频的一部分&#xff0c;这就要对视频进行分割。而m3u8视频是一种常见的流媒体文件格式&#xff0c;通常用于在线视频播放。本文将分享…

linux提权_永久提权_临时提权

2.3 提权 2.3.1 su&#xff1a;永久提权 su命令用于切换当前用户身份到指定用户或者以指定用户的身份执行命令或程序。 ​ 普通用户切换到root用户&#xff0c;可以使用su - 或su root,但是必须输入root密码才能完成切换。root用户切换到普通用户&#xff0c;可以使用su user…

什么是HTML语义化,有什么好处?

HTML 语义化就是让页面的内容结构化&#xff0c;便于对浏览器 、搜索引擎解析。 用正确的标签做正确的事情&#xff0c;语义类标签是对内容的补充&#xff0c;表达标题摘要、文章结构、强调重点、丰富含义、避免歧义。 HTML 语义化的好处&#xff1a;HTML 语义化不是一定要执…

【OpenGL】Clion配置

OpenGL简介 OpenGL&#xff08;Open Graphics Library&#xff09;是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像&#xff08;二维的亦可&#xff09;&#xff0c;是一个功能强大&#xff0c;调用方便的底层图形库。OpenGL是行业领域中…

SSD-Single Shot Detector

文章目录 SSD模型主要改进点模型说明 训练Choosing scales and aspect ratios for default boxesMatching strategyTraining objectiveHard negative miningData augmentation 实验结果基本网络参数PASCAL VOC2007模型消融实验PASCAL VOC2012COCO推理速度比较 前面提到了两种经…

Netfilter中的NAT

目录 前瞻 SNAT和DNAT SNAT DNAT 实验 前瞻 NAT: &#xff08;network address translation&#xff09;&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 NAT分为SNAT和DNAT SNAT&#xff1a;支持POSTROUTING, INPUT&…

Element UI 实战:跨页保存表格选中状态与判断状态可选性的高效方案

引言 在前文中&#xff0c;我们曾深入探讨了在修改数据后跨页时提醒用户可能丢失数据的问题。虽然这种方式对于一些场景是足够的&#xff0c;但当涉及选择框时&#xff0c;我们需要更为智能和高效的解决方案。在本文中&#xff0c;我们将分享一种基于 Element UI 的实际案例&am…

Java封装讯飞星火大模型历险记

问题描述与分析 现状描述与目标 在使用讯飞星火大模型API的过程中&#xff0c;API的返回结果在可以在其他线程中进行分次打印&#xff0c;但是在main方法中直接打印返回结果&#xff0c;显示为空。这种情况下不利于二次封装&#xff0c;希望在main方法中获取完整的API返回结果…

【开源视频联动物联网平台】帧率、码率和分辨率

帧率、码率和分辨率是视频和图像处理中的重要概念&#xff0c;它们直接影响到视频的带宽占用和显示效果。在进行视频项目时&#xff0c;根据应用需求对视频参数进行调整是必要的&#xff0c;因此了解这些参数的具体含义和指标是非常重要的。 在进行视频项目时&#xff0c;需要…