基于SpringBoot+Vue的实习管理系统设计与实现(源码+LW+部署文档等)

news2024/11/24 17:44:01

博主介绍:  

大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。
我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的代码风格规范、优美、易读性强,同时也注重性能优化、代码重构等方面的实践和经验总结。
我有丰富的成品Java毕设项目经验,能够为学生提供各类个性化的开题框架和实际运作方案。同时我也提供相关的学习资料、程序开发、技术解答、代码讲解、文档报告等专业服务。

🍅技术交流和部署相关看文章末尾!🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java项目精品实战案例(300套)

实习管理系统源码下载地址:

https://download.csdn.net/download/weixin_54828627/87783397

一、效果演示

基于springboot+vue的实习管理系统演示视频

二、前言介绍

随着信息化时代的到来,管理系统都趋向于智能化、系统化,实习管理也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而实习管理系统能很好地解决这一问题,轻松应对实习管理平时的工作,既能提高人力物力财力,又能加快工作的效率,取代人工管理是必然趋势。

本实习管理系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括首页,个人中心,班级管理,学生管理,教师管理,实习单位管理,实习作业管理,教师评分管理,单位成绩管理,系统管理等功能,通过这些功能的实现基本能够满足日常实习管理的操作。

三、主要技术

技术名作用
SpringBoot后端框架
Vue前端框架
MySQL数据库

四、系统设计(部分)

4.1、主要功能模块设计         

五、功能截图

5.1  前台功能模块

实习管理系统,用户进入到系统首页,可以查看首页,系统公告,个人中心,后台管理等内容进行操作,如图5-1所示。

图5-1系统首页界面图

学生注册

图5-2学生注册界面图

个人中心

图5-3个人中心界面图

5.2、后台功能模块

后台用户登录

图5-4后台登录界面图

4.2.1、管理员功能

管理员登录进入实习管理系统可以查看首页,个人中心,班级管理,学生管理,教师管理,实习单位管理,实习作业管理,教师评分管理,单位成绩管理,系统管理等功能进行详细操作,如图6-5所示。

图5-5管理员功能界面图

班级管理

图4-6班级管理界面图

学生管理

图5-7学生管理界面图

教师管理

图5-8教师管理界面图

实习单位管理

图5-9实习单位管理界面图

教师评分管理

图5-10教师评分管理界面图

4.2.2、教师功能

教师登录进入实习管理系统可以查看首页,个人中心,实习作业管理,教师评分管理等功能进行详细操作,如图5-11所示。

图5-11教师功能界面图

个人中心

图5-12个人中心界面图

实习作业管理

图5-13实习作业管理界面图

4.2.3、学生功能

学生登录进入实习管理系统可以查看首页,个人中心,实习作业管理,教师评分管理单位成绩管理等功能进行详细操作,如图5-14所示。

图5-14学生功能界面图

实习作业管理

图5-15实习作业管理界面图

单位成绩管理

图5-16单位成绩管理界面图

4.2.4、实习单位功能

实习单位登录进入实习管理系统可以查看首页,个人中心,实习作业管理,单位成绩管理等功能进行详细操作,如图5-17所示。

图5-17实习单位功能界面图

个人中心

图5-18个人中心界面图

实习作业管理

图5-19实习作业管理界面图

六、数据库设计(部分)

数据库的E-R图反映了实体、实体的属性和实体之间的联系。下面是各个实体以及实体的属性。

系统公告实体属性图如下所示:

图6-1系统公告实体属性图

单位成绩实体属性图如下所示:

图6-2单位成绩实体属性图

学生实体属性图如下所示:

图6-3学生实体属性图

七、代码参考

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.DanweichengjiEntity;
import com.entity.view.DanweichengjiView;

import com.service.DanweichengjiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;

/**
 * 单位成绩
 * 后端接口
 * @author 
 * @email 
 * @date 2022-04-19 23:38:10
 */
@RestController
@RequestMapping("/danweichengji")
public class DanweichengjiController {
    @Autowired
    private DanweichengjiService danweichengjiService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,DanweichengjiEntity danweichengji,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("xuesheng")) {
			danweichengji.setXueshengxuehao((String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("shixidanwei")) {
			danweichengji.setDanweimingcheng((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<DanweichengjiEntity> ew = new EntityWrapper<DanweichengjiEntity>();
		PageUtils page = danweichengjiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, danweichengji), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,DanweichengjiEntity danweichengji, 
		HttpServletRequest request){
        EntityWrapper<DanweichengjiEntity> ew = new EntityWrapper<DanweichengjiEntity>();
		PageUtils page = danweichengjiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, danweichengji), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( DanweichengjiEntity danweichengji){
       	EntityWrapper<DanweichengjiEntity> ew = new EntityWrapper<DanweichengjiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( danweichengji, "danweichengji")); 
        return R.ok().put("data", danweichengjiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(DanweichengjiEntity danweichengji){
        EntityWrapper< DanweichengjiEntity> ew = new EntityWrapper< DanweichengjiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( danweichengji, "danweichengji")); 
		DanweichengjiView danweichengjiView =  danweichengjiService.selectView(ew);
		return R.ok("查询单位成绩成功").put("data", danweichengjiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        DanweichengjiEntity danweichengji = danweichengjiService.selectById(id);
        return R.ok().put("data", danweichengji);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        DanweichengjiEntity danweichengji = danweichengjiService.selectById(id);
        return R.ok().put("data", danweichengji);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody DanweichengjiEntity danweichengji, HttpServletRequest request){
    	danweichengji.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(danweichengji);
        danweichengjiService.insert(danweichengji);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody DanweichengjiEntity danweichengji, HttpServletRequest request){
    	danweichengji.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(danweichengji);
        danweichengjiService.insert(danweichengji);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody DanweichengjiEntity danweichengji, HttpServletRequest request){
        //ValidatorUtils.validateEntity(danweichengji);
        danweichengjiService.updateById(danweichengji);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        danweichengjiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<DanweichengjiEntity> wrapper = new EntityWrapper<DanweichengjiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("xuesheng")) {
			wrapper.eq("xueshengxuehao", (String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("shixidanwei")) {
			wrapper.eq("danweimingcheng", (String)request.getSession().getAttribute("username"));
		}

		int count = danweichengjiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
}

八、技术交流

大家点赞、收藏、关注、评论啦 、查看文章结尾👇🏻获取联系方式👇🏻

精彩专栏推荐订阅下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例(300套)

​​​​

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

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

相关文章

python pip更新

python pip更新 D:\python>python -m pip list Package Version ---------- ------- pip 23.1.2 setuptools 65.5.0[notice] A new release of pip is available: 23.1.2 -> 23.2.1 [notice] To update, run: python.exe -m pip install --upgrade pipD:\pyt…

Qt完成文本转换为语音播报与保存(系统内置语音引擎)

一、前言 在当今数字化社会,人们对于交互式应用程序的需求越来越高。除了传统的图形用户界面,语音交互也成为了一种流行的交互方式。在这种情况下,将文本转换为语音成为了一项重要的技术,它可以为用户提供更加人性化和便捷的交互方式。在此背景下,Qt提供了QTextToSpeech类…

LeetCode·每日一题·2500. 删除每行中的最大值·模拟

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/delete-greatest-value-in-each-row/solutions/2360713/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-rhmz/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获…

Spring AOP 中,切点有多少种定义方式?

在 Spring AOP 中&#xff0c;我们最常用的切点定义方式主要是两种&#xff1a; 使用 execution 进行无侵入拦截。使用注解进行拦截。 这应该是是小伙伴们日常工作中使用最多的两种切点定义方式了。但是除了这两种还有没有其他的呢&#xff1f;今天松哥就来和大家聊一聊这个话…

[linux--->应用层网络通信协议]

文章目录 [TOC](文章目录) 一、应用层通信概念1.协议2.信息接收 二、网络计算器实战应用三、http协议1.基本认识2.宏观理解http3.网站内部跳转4.请求方法5.状态码5.1重定向5.2错误码 6.常见报头7.http会话保持功能8.模拟http协议服务器编程 四、https协议1.加密概念2.加密的作用…

感测型静电消除风扇的特点

感测型静电消除风扇是一种能够有效降低静电累积并减少静电放电的设备。它通常适用于一些对静电敏感的环境&#xff0c;如实验室、电子元器件生产线、医疗设备等。 感测型静电消除风扇主要原理是通过检测周围空气中的静电电位差&#xff0c;当监测到静电电位差超过设定阈值时&a…

视频监控综合管理平台EasyCVR多分屏默认播放协议介绍

国标GB28181视频平台EasyCVR具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理。 视频监控综合管理平台EasyCVR具备视频融合汇聚能力&#xff0c;TSINGSEE青犀视频平台基于云边端一体化架构&…

关于HA集群的搭建

1.回收站功能 为什么要检查 检查数据存活时间是否到达 单位分钟 web端界面删除不走回收站 mapreduce优化 记住 不写磁盘更优化 为什么conbiner可以解决数据倾斜 合并小数据块了 压缩解决不了 数据倾斜 配置多个NN 1.哪个NN出去服务 一个NN Active 其他NN Standby 2.没有…

3ds Max图文教程: 使用动态工具Mass FX 创建风铃动画

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 简单的场景设置 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 我将向您展示风铃背后的动态 通过简单的场景设置进行模拟。一旦你有了这个想法&#xff0c;你就可以应用这个 技术到复杂的风铃结构。 基…

智能也是一切社会关系的总和

马克思把人作为“一切社会关系的总和”的论述中&#xff0c;他并非将自然条件作为固定的被给予的条件&#xff0c;而是作为在历史进程中&#xff0c;由于人的活动而发生的改变的被给予的条件来把握的&#xff0c;既从一开始就已经被一定的“生产关系”所塑形和中介了。智能&…

锐浪报表 Grid++Report 导出文件默认文件名

锐浪报表GridReport 打印数据表时&#xff0c;有时要导出EXCEL或PDF文件。 点击导出EXCEL表&#xff1a; 如何在报表中。进行设置&#xff1a; 1、使用Edit软件打开报表模板文件&#xff0c;如&#xff1a; 在Title’‘ 单引号中录入“标题”即可。 2、GridReport默认目录为&a…

自定义数据类型

一、结构体的定义与使用 1. 定义结构体类型 结构体允许将不同类型的数据元素组合在一起形成一种新的数据类型 结构体类型声明一般放在程序文件开头&#xff0c;此时这个声明是全局的。 结构体类型声明也可以放到函数内部&#xff0c;此时这个声明是局部的。 &#xff08;1&…

spring boot 整合jdbc和事务

访问效果 springboot连接数据库需要整合jdbc与事务&#xff0c;那么改怎么处理&#xff0c;答案是不需要我们处理&#xff0c;springboot已经实现&#xff0c;我们只需在pom文件中引入对应的库然后简单配置即可实现。jdbc驱动的引入&#xff0c;别忘了还有mybatis引入。下面我们…

计数质数,给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

题记&#xff1a; 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 示例 2&#xff1a; 输入&#xff1a;n 0 输出&#x…

活动招募 | 小米黑客马拉松OPEN DAY等你来!

2023年小米黑客马拉松OPEN DAY来啦&#xff01;不知道大家还记得去年黑马的获奖项目“MiGu”头箍吗&#xff1f;用脑电波控制智能家居的想法让大家眼前一亮&#xff01; 2023年黑客马拉松也同样精彩纷呈&#xff01;本届比赛共有76支队伍报名参赛&#xff0c;各个团队不仅在技术…

vue的setup函数

 为了开始使用Composition API&#xff0c;我们需要有一个可以实际使用它&#xff08;编写代码&#xff09;的地方&#xff1b;  在Vue组件中&#xff0c;这个位置就是 setup 函数&#xff1b;◼ setup其实就是组件的另外一个选项&#xff1a; 只不过这个选项强大到我们可…

怎么解决字符乱码的问题

目录 什么是字符乱码 字符乱码是什么原因 怎么解决字符乱码的问题 示例代码 什么是字符乱码 字符乱码是指在文本或字符编码中出现无法正确显示或解析的字符。当使用不同的字符编码格式读取或显示文本时&#xff0c;如果编码格式不匹配或不正确&#xff0c;就会导致字符乱码…

ASP.NET Core - 缓存之内存缓存

1. 缓存 缓存指的是在软件应用运行过程中&#xff0c;将一些数据生成副本直接进行存取&#xff0c;而不是从原始源&#xff08;数据库&#xff0c;业务逻辑计算等&#xff09;读取数据&#xff0c;减少生成内容所需的工作&#xff0c;从而显著提高应用的性能和可伸缩性&#x…

【Spring Cloud】Ribbon 中的几种负载均衡策略

文章目录 前言一、Ribbon 介绍二、负载均衡设置三、7种负载均衡策略3.1.轮询策略3.2.权重策略3.3.随机策略3.4.最小连接数策略3.5.重试策略3.6.可用性敏感策略3.7.区域敏感策略 前言 负载均衡通常有两种实现手段&#xff0c;一种是服务端负载均衡器&#xff0c;另一种是客户端…

Python中怎么处理字符编码问题

什么是字符编码 字符编码是一种将字符或文本表示为数字序列的方式&#xff0c;以便计算机能够理解和处理它们。由于计算机是基于二进制的&#xff0c;只能处理数字&#xff0c;因此需要将字符转换为对应的数字表示。 在字符编码中&#xff0c;每个字符都有一个唯一的编码值与…