SpringBoot高校毕业生就业信息管理系统 附带详细运行指导视频

news2025/1/21 12:14:28

文章目录

  • 一、项目演示
  • 二、项目介绍
  • 三、运行截图
  • 四、主要代码

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot框架开发的高校毕业生就业信息管理系统项目。首先,这是一个响应式的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个高校毕业生就业信息管理系统该有的所有功能。

项目功能:该项目分为学生辅导员管理员三个角色。学生角色用户的功能:登录、浏览辅导员信息和管理员信息、浏览学院信息、浏览宣讲会信息和企业招聘信息、管理个人的就业考研考公创业信息、浏览公告信息、修改个人信息等等功能。辅导员角色用户有登录、管理学生信息的功能、管理宣讲会信息和企业招聘信息、管理所有学生就业考研考公创业信息、管理公告信息等等功能。管理员角色用户除了有前面所有功能外,还有管理辅导员信息的功能等等。

应用技术:SpringBoot + MyBatis + Thymeleaf + Bootstrap + MySQL

运行环境:Eclipse/IntelliJ IDEA(项目压缩包中自带) + MySQL5.7(项目压缩包中自带) + Maven3.6.3(项目压缩包中自带) + JDK1.8(项目压缩包中自带)

三、运行截图

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

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

四、主要代码

1.登录业务逻辑代码:

   /**
    * 用户登录操作
    * @param userDTO
    * @return
    */
   @Override
   public ResponseDTO<Boolean> login(UserDTO userDTO, HttpServletRequest request) {
       if(userDTO == null) {
           return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
       }
       if(CommonUtil.isEmpty(userDTO.getNo())) {
           return ResponseDTO.errorByMsg(CodeMsg.NO_EMPTY);
       }
       if(CommonUtil.isEmpty(userDTO.getPassword())) {
           return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);
       }
       UserExample userExample = new UserExample();
       userExample.createCriteria()
               .andNoEqualTo(userDTO.getNo())
               .andPasswordEqualTo(userDTO.getPassword())
               .andRoleIdEqualTo(userDTO.getRoleId());
       List<User> userList = userMapper.selectByExample(userExample);
       if(userList.size() == 0) {
           return ResponseDTO.errorByMsg(CodeMsg.USERNAME_PASSWORD_ERROR);
       }
       request.getSession().setAttribute(SessionConstant.SESSION_LOGIN_KEY, userList.get(0));

       return ResponseDTO.successByMsg(true, "登录成功!");
   }

2.用户添加修改业务逻辑代码:

 /**
  * 保存用户信息
  * @param userDTO
  * @return
  */
 @Override
 public ResponseDTO<Boolean> save(UserDTO userDTO) {
     if(userDTO == null) {
         return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
     }
     // 进行统一表单验证
     CodeMsg validate = ValidateEntityUtil.validate(userDTO);
     if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
         return ResponseDTO.errorByMsg(validate);
     }
     College college = new College();
     if(!RoleEnum.ADMIN.getCode().equals(userDTO.getRoleId())) {
         // 判断输入的学院是否存在
         college = collegeMapper.selectByPrimaryKey(userDTO.getCollegeId());
         if(college == null) {
             return ResponseDTO.errorByMsg(CodeMsg.COLLEGE_NOT_EXIST);
         }
     }
     User user = CopyUtil.copy(userDTO, User.class);
     if(CommonUtil.isEmpty(user.getId())){
         // 添加操作
         // 判断学号学工号是否存在
         if(isNoExist(user, "")){
             return ResponseDTO.errorByMsg(CodeMsg.NO_EXIST);
         }
         user.setId(UuidUtil.getShortUuid());
         if(userMapper.insertSelective(user) == 0){
             return ResponseDTO.errorByMsg(CodeMsg.USER_ADD_ERROR);
         }
         if(RoleEnum.STUDENT.getCode().equals(user.getRoleId())) {
             // 更新学院班级人数
             college.setNum(college.getNum() + 1);
             collegeMapper.updateByPrimaryKeySelective(college);
         }
     }else {
         // 修改操作
         // 判断学号学工号是否存在
         if(isNoExist(user, user.getId())){
             return ResponseDTO.errorByMsg(CodeMsg.NO_EXIST);
         }
         User preStudent = userMapper.selectByPrimaryKey(user.getId());
         College preCollege = collegeMapper.selectByPrimaryKey(preStudent.getCollegeId());
         if(userMapper.updateByPrimaryKeySelective(user) == 0){
             return ResponseDTO.errorByMsg(CodeMsg.USER_EDIT_ERROR);
         }
         if(RoleEnum.STUDENT.getCode().equals(user.getRoleId()) && preCollege != null) {
             // 更新学院班级人数
             preCollege.setNum(preCollege.getNum() - 1);
             collegeMapper.updateByPrimaryKeySelective(preCollege);
             college.setNum(college.getNum() + 1);
             collegeMapper.updateByPrimaryKeySelective(college);
         }

     }
     return ResponseDTO.success(true);
 }

3.统计近五年就业数和就业率:

 /**
  * 获取近五年就业数和就业率
  * @return
  */
 @Override
 public ResponseDTO<Map<String, Object>> statusByFiveYear() {
     Map<String, Object> responseMap = new HashMap<>();
     Calendar calendar = Calendar.getInstance();
     int year = calendar.get(Calendar.YEAR);
     List<Integer> yearList = new ArrayList<>();
     List<Integer> employmentList = new ArrayList<>();
     List<BigDecimal> rateList = new ArrayList<>();
     for(int i=4; i>=0; i--) {
         yearList.add(year - i);
         UserExample userExample = new UserExample();
         UserExample.Criteria criteria = userExample.createCriteria();
         criteria.andRoleIdEqualTo(RoleEnum.STUDENT.getCode());
         criteria.andGraduateYearEqualTo(year-i);
         Integer userTotal = userMapper.countByExample(userExample);
         criteria.andDirectionEqualTo(DirectionEnum.EMPLOYMENT.getCode());
         Integer employmentTotal = userMapper.countByExample(userExample);
         rateList.add(userTotal != 0 ? BigDecimal.valueOf(((double)employmentTotal/userTotal)*100).setScale(2, RoundingMode.HALF_UP) : new BigDecimal(0));
         employmentList.add(employmentTotal);
     }
     responseMap.put("yearList", yearList);
     responseMap.put("rateList", rateList);
     responseMap.put("employmentList", employmentList);

     return ResponseDTO.success(responseMap);
 }

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

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

相关文章

五:用户空间内存分配

目录 用户空间内存分配 mmap malloc 用户空间内存分配 mmap 将内核空间直接映射到用户空间&#xff0c;省去从内核到用户空间的内存拷贝。 mmap的缺点 mmap 使用时必须实现指定好内存映射的大小&#xff0c;因此 mmap 并不适合变长文件&#xff1b;mmap如果更新文件的操作…

【通过Cpython3.9源码看看python字符串的缓存机制】

基本说明 在CPython中&#xff0c;字符串intern机制是一种字符串对象缓存机制&#xff0c;用于避免创建多个相同内容的字符串对象&#xff0c;以减少内存使用。具体来说&#xff0c;如果两个字符串对象的内容相同&#xff0c;那么这两个字符串对象实际上会共享同一块内存空间。…

【Vue基础】前端工程化Vue项目

一、创建Vue项目步骤 1、新建一个文件夹&#xff0c;起名为vue_project01 2、在该文件夹中打开cmd&#xff0c;输入指令vue ui&#xff0c;打开图形化界面 3、此时跳转到网页&#xff0c;根据以下步骤配置vue项目 1&#xff09;项目名命名为test01&#xff1b;选择包管理器为…

使用R语言进行方差分析(ANOVA、ANCOVA)(一)

方差分析&#xff08;一&#xff09; 1. ANOVA模型拟合1.1 aov()函数1.2 表达式中各项的顺序 2. 单因素方差分析&#xff08;One-Way ANOVA&#xff09;2.1 绘制各组均值及其置信区间的图形2.2 多重比较-TukeyHSD2.2.1 成对比较图2.2.2 多重均值比较-TukeyHSD&#xff08;更易理…

图的存储(邻接矩阵邻接表)

图的存储 文章目录 图的存储1 邻接矩阵1.1 邻接矩阵存储结构定义1.2 完整代码应用 2 邻接表2.1 邻接表存储结构定义2.2 完整代码应用 1 邻接矩阵 A [ i ] [ j ] 1 A[i][j]1 A[i][j]1 表示顶点i与顶点j邻接&#xff0c;即i与j之间存在边或者弧。 A [ i ] [ j ] 0 A[i][j]0 A…

使用jdk17 搭建Hadoop3.3.5和Spark3.3.2 on Yarn集群模式

搭建Hadoop3.3.5和Spark3.3.2 on Yarn集群模式&#xff0c;使用jdk17 搭建Hadoop3.3.5和Spark3.3.2 on Yarn集群模式1. 创建一台虚拟机2. 安装jdk17&#xff08;1&#xff09;下载jdk17&#xff08;2&#xff09;安装jdk17&#xff08;3&#xff09;配置环境变量 3. 虚拟机之间…

【音视频第15天】webRTC协议(2)

目录 协议ICESTUNNATTURNSDPSDP结构 Signaling and ConnectingSignaling: How peers find each other in WebRTCConnecting and NAT Traversal with STUN/TURN Signalingsdp协议WebRTC如何使用sdpWebRTC会话示例 Connecting为什么WebRTC需要一个专用的子系统来连接?现实世界的…

Day949.遗留系统之殇:为什么要对遗留系统进行现代化? -遗留系统现代化实战

遗留系统之殇&#xff1a;为什么要对遗留系统进行现代化&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录是关于遗留系统之殇&#xff1a;为什么要对遗留系统进行现代化&#xff1f;的内容。 不知道你是否跟曾经一样&#xff0c;身处一个遗留系统的漩涡之中&…

数据结构-基数排序

基数排序是和其他的各类排序方式都不同的方式&#xff0c;之前的各类排序&#xff0c;如快速排序&#xff0c;堆排序&#xff0c;冒泡排序等等&#xff0c;都是通过关键字之间的比较和移动记录这两种操作来实现的&#xff0c;而基数排序不需要记录关键字之间的比较。所谓基数排…

ubuntu 安装vmware tool

1在虚拟机种站到安装vmware-tools 然后重启虚拟机 2在磁盘中可以看到如下文件&#xff0c;将zip文件移动到桌面解压备用 3关闭虚拟机 找到编辑虚拟机设置 4点击左侧 CD/dvd(SATA) 如果是使用镜像文件&#xff0c;改成使用物理驱动器. 5 打开命令行 cd 桌面 &#xff08;如…

CSS基础——盒子模型的一些属性概念

目录 display visibility overflow 文档流 元素在文档流中的特点 块元素 内联元素 浮动 float 浮动元素特点 清除浮动 clear 小练习 效果图 具体实现 高度塌陷问题 BFC 特点 如何开启BFC 解决方案 本篇的最终练习 效果图如下&#xff1a; 具体实现 disp…

ChatGPT原理解释

写了一本介绍ChatGPT原理的课程 结构如下 01、介绍ChatGPT及其原理 1.1 ChatGPT的概述 1.2 什么是自然语言处理&#xff08;NLP&#xff09; 1.3 深度学习与NLP的关系 1.4 GPT模型的介绍 02、GPT原理探讨 2.1 GPT模型的输入与输出 2.2 GPT模型的结构 2.3 GPT模型的预训练方法…

flv怎么无损转换成mp4格式,3大超级方法分享

flv格式是目前在视频分享媒体播放网站上广泛使用的一种视频文件格式&#xff0c;可以在网站窗口中直接播放&#xff0c;这类视频文件还能够有效保护版权。但是有些时候我们可能需要将flv格式的视频转换为其他格式&#xff0c;比如mp4。但是该怎么操作呢&#xff1f; 其实有很多…

数据挖掘:汽车车交易价格预测(测评指标;EDA)

目录 一、前期工作 1.赛题介绍 赛题分析&#xff1a; 分类和回归问题的评价指标有如下一些形式&#xff1a; &#xff08;下文2.1和2.2会用到&#xff09; 2.数据简介 3.探索性分析-EDA介绍 二、实战演练 2.1分类指标评价计算示例 2.2回归指标评价计算示例 2.3数据探索…

抠图,扣掉背景图片

Remove Image Backgrounds, Free HD, No Signup - Pixian.AI https://pixian.ai/ 从电脑本地选取图片&#xff0c;然后会自动扣掉背景&#xff0c;点击DOWNLOAD就可以了 第一个&#xff1a;Pixian.AI 这是一款国外的在线抠图网站&#xff0c;把需要扣除背景的图片拖拽进来&am…

简单的了解下 Fetch API 的工作原理

简介 Fetch API是一种现代的Web API&#xff0c;提供了一种异步获取网络资源的方法。由于其简单性、灵活性和一致性&#xff0c;它已经成为Web应用程序中获取数据和资源的流行选择。在本文中&#xff0c;我们将深入探讨Fetch API的核心特性&#xff0c;并了解其工作原理。 Fetc…

Windows逆向安全(一)之基础知识(七)

汇编C语言类型转换 类型转换 类型转换的使用场景 类型转换一般为由数据宽度小的转换成数据宽度大的&#xff0c;不然可能会有高位数据被截断的现象&#xff0c;引起数据丢失 需要一个变量来存储一个数据&#xff0c;刚开始这个数据的数据宽度较小&#xff0c;后来发现存不下…

什么是UML?

文章目录 00 | 基础知识01 | 静态建模类图对象图用例图 02 | 动态建模时序图通信图状态图活动图 03 | 物理建模构件图部署图 UML&#xff08;Unified Model Language&#xff09;&#xff0c;统一建模语言&#xff0c;是一种可以用来表现设计模式的直观的&#xff0c;有效的框图…

【图像分割】Grounded Segment Anything根据文字自动画框或分割环境配置和基本使用教程

1 环境配置 要求&#xff1a;python>3.8, pytorch>1.7, torchvision>0.8 官方地址&#xff1a;https://github.com/IDEA-Research/Grounded-Segment-AnythingMarrying Grounding DINO with Segment Anything & Stable Diffusion & BLIP & Whisper &am…

命运坎坷的保定县

保定的词语分解 保护而安定之。诗小雅天保&#xff1a;“天保定尔&#xff0c;亦孔之固。”谓稳固地保有。 晋 陆云 大将军宴会被命作诗&#xff1a;“皇皇帝祜&#xff0c;诞隆骏命。四祖正家&#xff0c;天禄保定。” 保定府&#xff1f;保定县&#xff1f; 今天提起“保定…