基于Java+SpringBoot+Vue的校企合作项目管理系统【源码+论文+演示视频+包运行成功】

news2024/12/25 1:52:03

博主介绍擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

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

Java项目精品实战案例(300套)
Java微信小程序项目实战(200套)

Python项目精品实战案例(100套)

目录

一、效果演示

二、前言介绍

三、主要技术

四、系统设计

五、功能实现截图

六、数据库设计

七、关键代码

八、源码获取


一、效果演示

基于springboot+vue的校企合作项目管理系统演示视频

二、前言介绍

本次就是通过以校企合作为主要的目的,通过以spring以及vue技术来进行整个系统的功能模块开发,本次的功能模块开发中包含了系统用户关系、企业用户管理、 新闻数据管理、留言管理、项目管理以及项目评价管理等信息内容,通过这些功能模块的开发从而能够实现校企合作项目的完整开发应用,实现对整个系统中全部功能的完整开发应用,从而更好的为学校、为企业、为学生提供很好的服务功能的实现。

三、主要技术

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

四、系统设计

4.1、主要功能模块设计

五、功能实现截图

系统登录界面

图5.1 网站系统登录界面图

系统管理员登录界面

图5.2系统管理员登录界面

项目管理界面

图5.3用户管理界面

校企合作项目前端界面

图5.4校企合作项目前端界面

站内新闻界面

图5.5站内新闻界面

企业用户后台界面

图5.6企业用户界面

这里功能太多,就不一一截图展示了

六、数据库设计

数据库的概念设计上有通常会有很多中开发方式的选择,包含了自上而下、自下而上、混合开发等多种方式,通过多种方式可以确认的是,数据实体中应当包含标题、内容、结构等多项实体信息内容,本次将实体概念通过E-R模型的方式展示如下:

管理员实体

图6.2管理员实体图

 企业用户实体

图6.3学生会员实体图

 新闻实体

图6.4新闻实体图

 项目实体

图6.5项目实体图

 留言实体

图6.6留言实体图

七、关键代码

package com.example.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.LiuyanbanInfo;
import com.example.dao.LiuyanbanInfoDao;
import com.example.service.LiuyanbanInfoService;
import com.example.exception.CustomException;
import com.example.common.ResultCode;
import com.example.vo.EchartsData;
import com.example.vo.LiuyanbanInfoVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.example.service.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Value;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;

@RestController
@RequestMapping(value = "/liuyanbanInfo")
public class LiuyanbanInfoController {

    @Resource
    private LiuyanbanInfoService liuyanbanInfoService;
	@Resource
    private LiuyanbanInfoDao liuyanbanInfoDao;

    @PostMapping
    public Result<LiuyanbanInfo> add(@RequestBody LiuyanbanInfoVo liuyanbanInfo) {
        
		//mixmajixami
		liuyanbanInfoService.add(liuyanbanInfo);
        return Result.success(liuyanbanInfo);
    }
	
	//youtixing1
    //youtixing2

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Long id) {
        liuyanbanInfoService.delete(id);
        return Result.success();
    }

    @PutMapping
    public Result update(@RequestBody LiuyanbanInfoVo liuyanbanInfo) {
        liuyanbanInfoService.update(liuyanbanInfo);
        return Result.success();
    }
    //@PutMapping("/update2")
//    public Result update2(@RequestBody LiuyanbanInfoVo liuyanbanInfo) {
//        liuyanbanInfoService.update2(liuyanbanInfo);
//        return Result.success();
//    }
    @GetMapping("/{id}")
    public Result<LiuyanbanInfo> detail(@PathVariable Long id) {
        LiuyanbanInfo liuyanbanInfo = liuyanbanInfoService.findById(id);
        return Result.success(liuyanbanInfo);
    }
    @GetMapping("/changeStatus/{id}")
    public Result<LiuyanbanInfo> changeStatus(@PathVariable Long id) {
        liuyanbanInfoService.changeStatus(id);
        return Result.success();
    }

    @GetMapping
    public Result<List<LiuyanbanInfoVo>> all() {
        return Result.success(liuyanbanInfoService.findAll());
    }

    @GetMapping("/page/{name}")
    public Result<PageInfo<LiuyanbanInfoVo>> page(@PathVariable String name,
                                                @RequestParam(defaultValue = "1") Integer pageNum,
                                                @RequestParam(defaultValue = "5") Integer pageSize,
                                                HttpServletRequest request) {
        return Result.success(liuyanbanInfoService.findPage(name, pageNum, pageSize, request));
    }
	
	 @GetMapping("/pageqt/{name}")
    public Result<PageInfo<LiuyanbanInfoVo>> pageqt(@PathVariable String name,
                                                @RequestParam(defaultValue = "1") Integer pageNum,
                                                @RequestParam(defaultValue = "8") Integer pageSize,
                                                HttpServletRequest request) {
        return Result.success(liuyanbanInfoService.findPageqt(name, pageNum, pageSize, request));
    }

   // @PostMapping("/register")
//    public Result<LiuyanbanInfo> register(@RequestBody LiuyanbanInfo liuyanbanInfo) {
//        if (StrUtil.isBlank(liuyanbanInfo.getName()) || StrUtil.isBlank(liuyanbanInfo.getPassword())) {
//            throw new CustomException(ResultCode.PARAM_ERROR);
//        }
//        return Result.success(liuyanbanInfoService.add(liuyanbanInfo));
//    }

    /**
    * 批量通过excel添加信息
    * @param file excel文件
    * @throws IOException
    */
    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {

        List<LiuyanbanInfo> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(LiuyanbanInfo.class);
        if (!CollectionUtil.isEmpty(infoList)) {
            // 处理一下空数据
            List<LiuyanbanInfo> resultList = infoList.stream().filter(x -> ObjectUtil.isNotEmpty(x.getBiaoti())).collect(Collectors.toList());
            for (LiuyanbanInfo info : resultList) {
                liuyanbanInfoService.add(info);
            }
        }
        return Result.success();
    }
	//yoxutonxgjitu
    @GetMapping("/getExcelModel")
    public void getExcelModel(HttpServletResponse response) throws IOException {
        // 1. 生成excel
        Map<String, Object> row = new LinkedHashMap<>();
		row.put("yonghuming", "A用户名");
row.put("cheng", "A昵称");
row.put("touxiang", "A头像");
row.put("biaoti", "A标题");
row.put("neirong", "A内容");
row.put("huifu", "A回复");

		row.put("status", "是");
		row.put("level", "liuyanban");

        List<Map<String, Object>> list = CollUtil.newArrayList(row);

        // 2. 写excel
        ExcelWriter writer = ExcelUtil.getWriter(true);
        writer.write(list, true);

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition","attachment;filename=liuyanbanInfoModel.xlsx");

        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);
        writer.close();
        IoUtil.close(System.out);
    }
	private void getPieData(String name, List<EchartsData> pieList, Map<String, Double> dataMap) {
        EchartsData pieData = new EchartsData();
        EchartsData.Series series = new EchartsData.Series();

        Map<String, String> titleMap = new HashMap<>(2);
        titleMap.put("text", name);
        pieData.setTitle(titleMap);

        series.setName(name + "比例");
        series.setType("pie");
        series.setRadius("55%");

        List<Object> objects = new ArrayList<>();
        List<Object> legendList = new ArrayList<>();
        for (String key : dataMap.keySet()) {
            Double value = dataMap.get(key);
            objects.add(new JSONObject().putOpt("name", key).putOpt("value", value));
            legendList.add(key);
        }
        series.setData(objects);

        pieData.setSeries(Collections.singletonList(series));
        Map<String, Boolean> map = new HashMap<>();
        map.put("show", true);
        pieData.setTooltip(map);

        Map<String, Object> legendMap = new HashMap<>(4);
        legendMap.put("orient", "vertical");
        legendMap.put("x", "left");
        legendMap.put("y", "center");
        legendMap.put("data", legendList);
        pieData.setLegend(legendMap);

        pieList.add(pieData);
    }

    private void getBarData(String name, List<EchartsData> barList, Map<String, Double> dataMap) {
        EchartsData barData = new EchartsData();
        EchartsData.Series series = new EchartsData.Series();

        List<Object> seriesObjs = new ArrayList<>();
        List<Object> xAxisObjs = new ArrayList<>();
        for (String key : dataMap.keySet()) {
            Double value = dataMap.get(key);
            xAxisObjs.add(key);
            seriesObjs.add(value);
        }

        series.setType("bar");
        series.setName(name);
        series.setData(seriesObjs);
        barData.setSeries(Collections.singletonList(series));

        Map<String, Object> xAxisMap = new HashMap<>(1);
        xAxisMap.put("data", xAxisObjs);
        barData.setxAxis(xAxisMap);

        barData.setyAxis(new HashMap<>());

        Map<String, Object> legendMap = new HashMap<>(1);
        legendMap.put("data", Collections.singletonList(name));
        barData.setLegend(legendMap);

        Map<String, Boolean> map = new HashMap<>(1);
        map.put("show", true);
        barData.setTooltip(map);

        Map<String, String> titleMap = new HashMap<>(1);
        titleMap.put("text", name);
        barData.setTitle(titleMap);

        barList.add(barData);
    }
}

八、源码获取

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

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

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

Java微信小程序项目实战(200套)

Python项目精品实战案例(100套) 

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

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

相关文章

代码随想录(八):贪心算法

文章目录 455.分发饼干376. 摆动序列53. 最大子数组和122. 买卖股票的最佳时机 II55. 跳跃游戏1005. K 次取反后最大化的数组和134. 加油站860. 柠檬水找零135. 分发糖果406. 根据身高重建队列 455.分发饼干 题目链接 C代码&#xff1a; class Solution { public:int findCo…

在Windows下安装PhantomJS和CasperJS及入门介绍(上)

近在使用Python爬取网页内容时&#xff0c;总是遇到JS临时加载、动态获取网页信息的困难。例如爬取CSDN下载资源评论、搜狐图片中的“原图”等&#xff0c;此时尝试学习Phantomjs和CasperJS来解决这个问题。这第一篇文章当然就是安装过程及入门介绍。 一. 安装Phantomjs 下载地…

SWUST派森练习题:P118. 数组接雨

描述 给定一个整形数组​​arr​​**&#xff0c;已知其中所有的值都是非负的&#xff0c;将这个数组看作一个柱子高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。​​(​​数组以外的区域高度视为​0)** 数据范围&#xff1a;数组长度​​** 0≤n≤…

wustojc2010两小时学完C语言

#include <stdio.h> int main() {int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d",a-b*c);return 0;}

AUTOSAR规范与ECU软件开发(实践篇)4.5在Simulink中导入软件组件描述文件——“自上而下”的工作流程

“自上而下”的工作流程有别于“自下而上”的工作流程,其需要先在AAT(AUTOSAR Authoring Tool)工具(如ISOLAR-A)中完成软件组 件框架设计,并将软件组件arxml描述文件导入Matlab/Simulink完成内部 算法的实现,然后再通过Matlab/Simulink生成符合AUTOSAR规范的代 码及arxm…

js 获取页面的滚动高度

想要获取页面的滚动位置可以通过给window绑定滚动事件来实现。 window.addEventListener(scroll,()>{const n document.documentElement.scrollTopconsole.log(n);}) 通过该方法可以获取页面的当前位置&#xff0c;或者实现其他的效果&#xff0c;例如电梯导航

v-model原理

v-model本质上是一个语法糖&#xff0c;应用在输入框上&#xff0c;就是value属性 和input事件的合写 作用:提供数据的双向绑定—实现子组件 和父组件数据的双向绑定 数据变 视图跟着变 :value视图变 数据跟着变 input <input type"text" v-model"msg"…

漏洞指北-VulFocus靶场专栏-中级01

漏洞指北-VulFocus靶场专栏-中级01 中级001 &#x1f338;dcrcms 文件上传 &#xff08;CNVD-2020-27175)&#x1f338;step1&#xff1a;输入账号 密码burp suite 拦截 修改类型为 jpeg 中级002 &#x1f338;thinkphp3.2.x 代码执行&#x1f338;step1&#xff1a;burpsuite …

[保研/考研机试] KY11 二叉树遍历 清华大学复试上机题 C++实现

题目链接&#xff1a; 二叉树遍历_牛客题霸_牛客网编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169254700747…

【Android】Mobile-Security-Framework-MobSF Manifest 静态扫描规则

前言 移动安全框架&#xff08;MobSF&#xff09;是一个自动化的一体化移动应用程序&#xff08;Android/iOS/Windows&#xff09;测试、恶意软件分析和安全评估框架&#xff0c;能够执行静态和动态分析。MobSF支持移动应用程序二进制文件&#xff08;APK、XAPK、IPA和APPX&am…

JavaScript:DOM (5) 节点的CRUD - 修改、删除

修改(替换)节点 替换子项 replaceChild()可以将指定元素的某个子节点换成新的节点&#xff0c;语法为指定元素.replaceChild(新节点, 旧节点)。 范例&#xff1a; 原始结构&#xff1a; <ul><li>第一项</li><li>第二项</li><li>第三项&l…

Python编程从入门到实践_8-8 用户的专辑_答案

Python编程从入门到实践_8-8 用户的专辑_答案 我也看了一些其他人的答案&#xff0c;很多的答案存在问题&#xff0c;每次调用函数 make_album() 后生成一个专辑字典会覆盖上次调用函数 make_album() 生成的字典&#xff0c;不符合题意。 我采取的解决方案是添加一个空列表 …

全局异常捕获

一、创建普获异常的类 二、定义异常处理器 定义全局异常处理器非常简单&#xff0c;就是定义一个类&#xff0c;在类上加上一个注解RestControllerAdvice&#xff0c;加上这个注解就代表我们定义了一个全局异常处理器。 在全局异常处理器当中&#xff0c;需要定义一个方法来捕…

第二章、应用层

文章目录 2.1 应用层原理2.1.1 网络应用程序体系结构2.1.2 进程通信2.1.3 可供应用程序使用的运输服务2.1.4 因特网提供的运输服务2.1.5 应用层协议 2.2.2 Web 和 HTTP2.2.1 HTTP概况2.2.2 非持续连接和持续连接2.2.3 HTTP报文格式2.2.4 用户与服务器的交互&#xff1a;cookie2…

华为ENSP网络设备配置实战6(简单的链路聚合)

题目要求 1、创建聚合组&#xff0c;添加端口成员 2、PC1网段为vlan10&#xff0c;PC2网段为vlan20 3、LSW1为核心网关设备&#xff0c;正确配置PC网关 4、PC1与PC2互通 解题过程 1.1、 按照拓扑图&#xff0c;各个设备起名 sys &#xff08;进入系统视图&#xff09; sy…

OpenCV4环境配置

0.安装mingw64 官网链接&#xff1a;mingw 安装红框标记下载免安装版本&#xff0c;解压可用。 将解压后的mingw64\bin添加到path环境变量cmd中输入gcc -v&#xff0c;出现下图所示即配置成功 1.下载OpenCV源码 源码下载 官网&#xff1a;Releases - OpenCV 运行下载好的ex…

负载均衡下的 WebShell 连接

目录 负载均衡简介负载均衡的分类网络通信分类 负载均衡下的 WebShell 连接场景描述难点介绍解决方法**Plan A** **关掉其中一台机器**&#xff08;作死&#xff09;**Plan B** **执行前先判断要不要执行****Plan C** 在Web 层做一次 HTTP 流量转发 &#xff08;重点&#xff0…

经典组合优化问题

本文根据学习进度不定时更新。 团问题 此处要理解"each pair of which is connected by an edge"的含义&#xff0c;这里的which指的是谁呢&#xff1f;肯定是vertices&#xff0c;即每一对定点都有一条边连接起来。 团问题是NPC问题。 团问题和定点覆盖问题、边覆盖…

LLM提示词工程和提示词工程师Prompting and prompt engineering

你输入模型的文本被称为提示&#xff0c;生成文本的行为被称为推断&#xff0c;输出文本被称为完成。用于提示的文本或可用的内存的全部量被称为上下文窗口。尽管这里的示例显示模型表现良好&#xff0c;但你经常会遇到模型在第一次尝试时无法产生你想要的结果的情况。你可能需…

22.0.6 LEADTOOLS 增加了 Python 支持 -Crack

LEADTOOLS 增加了 Python 支持 Python 开发人员现在可以利用 LEADTOOLS 技术&#xff0c;包括识别、多媒体和成像。 2023 年 7 月 18 日 - 16:40新版本 特征 添加了完整的 Python 支持 LEADTOOLS Python 支持包括高级图像处理功能、OCR、PDF、条形码识别和表单处理&#xff0c;…