Springboot+Vue项目-基于Java+MySQL的教学资料管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计
🌎微信小程序毕业设计

开发环境

开发语言:Java
框架:Springboot+Vue
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7
数据库工具:Navicat12
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

演示视频

springboot290教学资料管理系统录像

原版高清演示视频-编号:290
https://pan.quark.cn/s/5cda95b17ee0

源码下载地址:

https://download.csdn.net/download/2301_76953549/89099781

LW目录

【如需全文请按文末获取联系】
在这里插入图片描述
在这里插入图片描述

目录

  • 开发环境
  • 演示视频
  • 源码下载地址:
  • LW目录
  • 一、项目简介
  • 二、系统设计
    • 2.1软件功能模块设计
    • 2.2数据库设计
  • 三、系统项目部分截图
    • 3.1管理员功能介绍
  • 四、部分核心代码
    • 4.1 用户部分
  • 获取源码或论文

一、项目简介

这次开发的教学资料管理系统对班级管理、字典管理、教学资料管理、课程管理、老师管理、学生管理、管理员管理等进行集中化处理。选择B/S模式这种高效率的模式完成系统功能开发,

二、系统设计

2.1软件功能模块设计

教学资料管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理课程信息,管理教学资料信息等内容。
教学资料管理系统针对用户设置的功能有:查看并修改个人信息,查看课程信息,查看教学资料信息等内容。

2.2数据库设计

(1)下图是学生实体和其具备的属性。
在这里插入图片描述
(2)下图是班级实体和其具备的属性。
在这里插入图片描述
(3)下图是教学资料实体和其具备的属性。
在这里插入图片描述

(4)下图是老师实体和其具备的属性。
在这里插入图片描述(5)下图是课程实体和其具备的属性。
在这里插入图片描述

三、系统项目部分截图

3.1管理员功能介绍

管理员登录
系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。
在这里插入图片描述
教学资料信息管理
教学资料信息管理页面提供的功能操作有:新增教学资料,修改教学资料,删除教学资料操作。下图就是教学资料信息管理页面。
在这里插入图片描述
教学资料类型管理
教学资料类型管理页面显示所有教学资料类型,在此页面既可以让管理员添加新的教学资料信息类型,也能对已有的教学资料类型信息执行编辑更新,失效的教学资料类型信息也能让管理员快速删除。下图就是教学资料类型管理页面。
在这里插入图片描述

四、部分核心代码

4.1 用户部分


package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 教学资料* 后端接口* @author* @email
*/
@RestController
@Controller
@RequestMapping("/jiaoxueziliao")
public class JiaoxueziliaoController {private static final Logger logger = LoggerFactory.getLogger(JiaoxueziliaoController.class);@Autowiredprivate JiaoxueziliaoService jiaoxueziliaoService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//级联表service@Autowiredprivate KechengService kechengService;@Autowiredprivate LaoshiService laoshiService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("老师".equals(role))params.put("laoshiId",request.getSession().getAttribute("userId"));if(params.get("orderBy")==null || params.get("orderBy")==""){params.put("orderBy","id");}PageUtils page = jiaoxueziliaoService.queryPage(params);//字典表数据转换List<JiaoxueziliaoView> list =(List<JiaoxueziliaoView>)page.getList();for(JiaoxueziliaoView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);JiaoxueziliaoEntity jiaoxueziliao = jiaoxueziliaoService.selectById(id);if(jiaoxueziliao !=null){//entity转viewJiaoxueziliaoView view = new JiaoxueziliaoView();BeanUtils.copyProperties( jiaoxueziliao , view );//把实体数据重构到view中//级联表KechengEntity kecheng = kechengService.selectById(jiaoxueziliao.getKechengId());if(kecheng != null){BeanUtils.copyProperties( kecheng , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "laoshiId"});//把级联的数据添加到view中,并排除id和创建时间字段view.setKechengId(kecheng.getId());view.setKechengLaoshiId(kecheng.getLaoshiId());}//级联表LaoshiEntity laoshi = laoshiService.selectById(jiaoxueziliao.getLaoshiId());if(laoshi != null){BeanUtils.copyProperties( laoshi , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段view.setLaoshiId(laoshi.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody JiaoxueziliaoEntity jiaoxueziliao, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,jiaoxueziliao:{}",this.getClass().getName(),jiaoxueziliao.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");else if("老师".equals(role))jiaoxueziliao.setLaoshiId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<JiaoxueziliaoEntity> queryWrapper = new EntityWrapper<JiaoxueziliaoEntity>().eq("laoshi_id", jiaoxueziliao.getLaoshiId()).eq("kecheng_id", jiaoxueziliao.getKechengId()).eq("jiaoxueziliao_name", jiaoxueziliao.getJiaoxueziliaoName()).eq("jiaoxueziliao_types", jiaoxueziliao.getJiaoxueziliaoTypes()).eq("banben", jiaoxueziliao.getBanben()).eq("fenxiang_types", jiaoxueziliao.getFenxiangTypes());logger.info("sql语句:"+queryWrapper.getSqlSegment());JiaoxueziliaoEntity jiaoxueziliaoEntity = jiaoxueziliaoService.selectOne(queryWrapper);if(jiaoxueziliaoEntity==null){jiaoxueziliao.setInsertTime(new Date());jiaoxueziliao.setCreateTime(new Date());jiaoxueziliaoService.insert(jiaoxueziliao);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody JiaoxueziliaoEntity jiaoxueziliao, HttpServletRequest request){logger.debug("update方法:,,Controller:{},,jiaoxueziliao:{}",this.getClass().getName(),jiaoxueziliao.toString());String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("老师".equals(role))
//            jiaoxueziliao.setLaoshiId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));//根据字段查询是否有相同数据Wrapper<JiaoxueziliaoEntity> queryWrapper = new EntityWrapper<JiaoxueziliaoEntity>().notIn("id",jiaoxueziliao.getId()).andNew().eq("laoshi_id", jiaoxueziliao.getLaoshiId()).eq("kecheng_id", jiaoxueziliao.getKechengId()).eq("jiaoxueziliao_name", jiaoxueziliao.getJiaoxueziliaoName()).eq("jiaoxueziliao_types", jiaoxueziliao.getJiaoxueziliaoTypes()).eq("banben", jiaoxueziliao.getBanben()).eq("fenxiang_types", jiaoxueziliao.getFenxiangTypes());logger.info("sql语句:"+queryWrapper.getSqlSegment());JiaoxueziliaoEntity jiaoxueziliaoEntity = jiaoxueziliaoService.selectOne(queryWrapper);if("".equals(jiaoxueziliao.getJiaoxueziliaoFile()) || "null".equals(jiaoxueziliao.getJiaoxueziliaoFile())){jiaoxueziliao.setJiaoxueziliaoFile(null);}if(jiaoxueziliaoEntity==null){jiaoxueziliaoService.updateById(jiaoxueziliao);//根据id更新return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());jiaoxueziliaoService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);try {List<JiaoxueziliaoEntity> jiaoxueziliaoList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if(lastIndexOf == -1){return R.error(511,"该文件没有后缀");}else{String suffix = fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){return R.error(511,"只支持后缀为xls的excel文件");}else{URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if(!file.exists()){return R.error(511,"找不到上传文件,请联系管理员");}else{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环JiaoxueziliaoEntity jiaoxueziliaoEntity = new JiaoxueziliaoEntity();
//                            jiaoxueziliaoEntity.setLaoshiId(Integer.valueOf(data.get(0)));   //老师 要改的
//                            jiaoxueziliaoEntity.setKechengId(Integer.valueOf(data.get(0)));   //课程 要改的
//                            jiaoxueziliaoEntity.setJiaoxueziliaoName(data.get(0));                    //教学资料名称 要改的
//                            jiaoxueziliaoEntity.setJiaoxueziliaoTypes(Integer.valueOf(data.get(0)));   //资料类型 要改的
//                            jiaoxueziliaoEntity.setJiaoxueziliaoFile(data.get(0));                    //资料文件 要改的
//                            jiaoxueziliaoEntity.setJiaoxueziliaoContent("");//照片
//                            jiaoxueziliaoEntity.setBanben(data.get(0));                    //版本 要改的
//                            jiaoxueziliaoEntity.setFenxiangTypes(Integer.valueOf(data.get(0)));   //是否分享 要改的
//                            jiaoxueziliaoEntity.setInsertTime(date);//时间
//                            jiaoxueziliaoEntity.setCreateTime(date);//时间jiaoxueziliaoList.add(jiaoxueziliaoEntity);//把要查询是否重复的字段放入map中}//查询是否重复jiaoxueziliaoService.insertBatch(jiaoxueziliaoList);return R.ok();}}}}catch (Exception e){return R.error(511,"批量插入数据异常,请联系管理员");}}}

获取源码或论文

如需对应的LW或源码,以及其他定制需求,也可以点我头像查看个人简介联系。

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

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

相关文章

Linux基础——Linux开发工具(下)_make/makefile

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

IoTDB入门教程——导读

Apache IoTDB&#xff08;物联网数据库&#xff09;是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB 采用轻量式架构&#xff0c;具有高性能和丰富的功能&#xff0c;并与Apache Hadoop、Spark和Flink等进行了深度集成&#xff0c;可以满足工业物联网领…

安卓adb 命令查看程序日志

gcat日志导出到文件 在Android设备上&#xff0c;你可以使用logcat命令将日志导出到文件中。打开终端或者命令行工具&#xff0c;然后输入以下命令&#xff1a; adb logcat -d > logcat.txt这条命令会将当前设备的logcat日志输出到名为logcat.txt的文件中。-d参数是用来确…

数据挖掘之基于K近邻算法的原油和纳斯达克股票数据预测分析

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在当今日益复杂的金融市场中&#xff0c;准确地预测原油价格和纳斯达克股票市场的走势对于投资者、政…

【JAVA】part5-Java集合

Java 集合 Java集合概述 Java数组的局限性 数组初始化后大小不可变&#xff1b;数组只能按索引顺序存取。 Java的java.util包主要提供了以下三种类型的集合&#xff1a; List&#xff1a;一种有序列表的集合&#xff0c;例如&#xff0c;按索引排列的Student的List&#xff1b…

代码随想录算法训练营DAY43|C++动态规划Part5|1049.最后一块石头的重量II、494.目标和、474.一和零

文章目录 1049.最后一块石头的重量II思路CPP代码 494.目标和回溯算法抽象成01背包问题CPP代码本题总结 474.一和零思路CPP代码 1049.最后一块石头的重量II 力扣题目链接 文章链接&#xff1a;1049.最后一块石头的重量II 视频链接&#xff1a;这个背包最多能装多少&#xff1f;L…

Vue3 + TS + Element-Plus 封装的 Dialog 弹窗组件

弹窗组件中自定义了表头增加了全屏&#xff0c;svg-icon 没有的话可能会报错&#xff0c;换成自己的图标就可以 <template><el-dialog:dialogHeight"dialogHeight":title"dialogTitle"class"dialog min-w-70"v-model"dialogVisib…

8 聚类算法

目录 0 背景 1 Kmeans 1.1 聚类数量k的确定 2 DBSCAN 2.1 三个点 2.2 算法流程 3 层次聚类 3.1 过程 4 基于分布的聚类:高斯混合模型 0 背景 聚类算法是一种无监督学习技术&#xff0c;用于将数据集中的数据点划分为不同的组或簇&#xff0c;使得同一组内的数据点彼此相…

nginx缓存清理

背景 昨天打开我的gpt镜像网站&#xff0c;意外发现静态图片资源全都无法获取了 CoCo-AI 一番排查下来&#xff0c;发现是引用的cdn链接失效了 且cdn源是属于七牛云的&#xff0c;且不再维护&#xff0c;于是果断切换到cloudflare export function getEmojiUrl(unified: str…

Qt简单离线音乐播放器

有上传本地音乐文件&#xff0c;播放&#xff0c;暂停&#xff0c;拖拉进度条等功能的播放器。 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMediaPlayer> #include <QFileDialog> #include <QTime&g…

【Leetcode每日一题】 分治 - 排序数组(难度⭐⭐)(69)

1. 题目解析 题目链接&#xff1a;912. 排序数组 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 归并排序&#xff08;Merge Sort&#xff09;是一种采用“分而治之”&#xff08;Divide and Conquer&#xff09;策略…

Python 语音识别系列-实战学习-DFCNN_Transformer的实现

DFCNN_Transformer的实现 前言1.定义声学模型和获取数据的函数2.训练声学模型3.定义语言模型4.训练语言模型5.模型测试5.总结 前言 此博客是基于华为云中的DFCNN_Transformer的教程进行的学习和实践。本文将介绍一个结合了深度全卷积网络&#xff08;DFCNN&#xff09;和Trans…

stm32mp135d u-boot 引导流程

stm32mp135d u-boot 引导流程 一、U-Boot启动流程1. bootcmd_stm32mp 确定当前设备2. distro_bootcmd 进入当前设备启动3. bootcmd_mmc1 设置当前设备号4. mmc_boot 设置当前设备类型5. scan_dev_for_boot_part 扫描设备分区6. scan_dev_for_boot 扫描指定分区7. scan_dev_for_…

Elasticsearch索引定义

1. 前言 索引是具有相同结构的文档的集合&#xff0c;每个索引都拥有一个唯一的索引名称&#xff0c;它是ES里面非常重要的概念。一个ES集群中可以有多个索引&#xff0c;不同的索引代表不同的业务类型数据。 什么时候需要创建新的索引呢&#xff1f;一般来说有两类场景&…

数字电路-5路呼叫显示和8路抢答器

本内容涉及两个电路&#xff0c;分别为5路呼叫显示电路和8路抢答器电路&#xff0c;包含Multisim仿真原文件&#xff0c;为掌握FPGA做个铺垫。紫色文字是超链接&#xff0c;点击自动跳转至相关博文。持续更新&#xff0c;原创不易&#xff01; 目录&#xff1a; 一、5路呼叫显…

【百度Apollo】探索自动驾驶:百度Apollo视觉感知模块的实践与创新

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、百度Apollo视觉感知模块概述二、启动感知模块步骤一&#xff1a;进入 Docker 环境并启动 Dreamview步骤二…

HOOPS Exchange导入数据时如何使用CATIA缓存选项?

1、什么是CATIA缓存选项和CGR文件&#xff1f; CATIA V5默认的工作方式是加载几何图形。加载大型程序集时&#xff0c;这可能会导致性能下降&#xff0c;因为所需的内存很重要。 在这种情况下&#xff0c;我们可能需要使用缓存选项。这将生成仅包含曲面细分数据而不包含几何图…

Docker容器---docker-Consul部署

一、Docker-consul简介 1、概述 consul是google开源的一个使用go语言开发的服务管理软件。支持多数据中心、分布式高可用的、服务发现和配置共享。采用Raft算法&#xff0c;用来保证服务的高可用。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多…

【Hadoop】-Hive客户端:HiveServer2 Beeline 与DataGrip DBeaver[14]

HiveServer2 & Beeline 一、HiveServer2服务 在启动Hive的时候&#xff0c;除了必备的Metastore服务外&#xff0c;我们前面提过有2种方式使用Hive&#xff1a; 方式1&#xff1a; bin/hive 即Hive的Shell客户端&#xff0c;可以直接写SQL方式2&#xff1a; bin/hive --…

绕过Windows 11的安装门槛

&#x1f9d0; Win11安装门槛 自从Win11发布以来&#xff0c;微软提高了对电脑配置的要求&#xff0c;如TPM支持、特定CPU型号限制等&#xff0c;让不少小伙伴的升级之路变得坎坷。不过&#xff0c;俗话说得好&#xff0c;道高一尺魔高一丈&#xff0c;今天就让我们一起来看看…