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.rhkb.cn/news/316924.html

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

相关文章

FSD自动驾驶泛谈

特斯拉的FSD&#xff08;Full-Self Driving&#xff0c;全自动驾驶&#xff09;系统是特斯拉公司研发的一套完全自动驾驶系统。旨在最终实现车辆在多种驾驶环境下无需人类干预的自动驾驶能力。以下是对FSD系统的详细探讨&#xff1a; 系统概述 FSD是特斯拉的自动驾驶技术&…

MCGS:脚本程序

MCGS仿真控制要求 控制要求如下 用PLC控制灯字闪灭 1、广告字1亮&#xff0c;1秒后熄灭&#xff1b; 2、广告字2亮&#xff0c;1秒后熄灭&#xff1b; 3、广告字3亮&#xff0c;1秒后熄灭&#xff1b; 4、广告字4亮&#xff0c;1秒后熄灭&#xff1b; 5、广告字5亮&#xff0c;…

C语言【动态内存】

1.为什么要有动态内存 我们现在掌握的内存开辟方法有&#xff1a; int val 20;//在栈空间开辟4个字节 char str[10]{0};//在栈空间开辟10个字节的连续的空间但是上述的方式有两个点要注意&#xff1a; 1.空间开辟的大小是固定的 2.数组在申明的时候&#xff0c;一定要指定数…

shell脚本,删除30天以前的日志,并将日志推送到nas,但运行出现/bin/bash^M。

删除30天以前的日志 将日志推送到nas中&#xff0c;然后删除pod中的日志 pod挂载到本地 运行出现/bin/bash^M 1、删除30天以前的日志&#xff1a; #! /bin/bash# 定义源日志目录 LOG_DIR/home/log/ # 删除日志 find $LOG_DIR -type f -name "*.log" -mtime 30 -exec…

线上线下收银一体化,新零售POS系统引领连锁门店数字化转型-亿发

在市场竞争日益激烈的背景下&#xff0c;没有哪个商家能够永远屹立不倒。随着互联网技术的快速发展&#xff0c;传统的线下门店面临着来自电商和新零售的新型挑战。实体零售和传统电商都需要进行变革&#xff0c;都需要实现线上线下的融合。 传统零售在客户消费之后就与商家失…

从MySQL+MyCAT架构升级为分布式数据库,百丽应用OceanBase 4.2的感受分享

本文来自OceanBase的客户&#xff0c;百丽时尚的使用和测试分享 业务背景 百丽时尚集团&#xff0c;作为国内大型时尚鞋服集团&#xff0c;在中国超过300个城市设有直营门店&#xff0c;数量超过9,000家。集团构建了以消费者需求为核心的垂直一体化业务模式&#xff0c;涵盖了…

FORM调用标准AP\AR\GL\FA界面

EBS FORM客户化界面有时候数据需要追溯打开AP\AR\GL\FA等界面&#xff1a; 一种打开日记账的方式&#xff1a; PROCEDURE SHOW_JOURNAL ISparent_form_id FormModule;child_form_id FormModule; BEGINclose_jrn;parent_form_id : FIND_FORM(:SYSTEM.CURRENT_FORM);COPY(TO…

安卓数据库SQLite

目录 一、SQLite数据库二、SQLiteOpenHelper和SQLiteDatabase2.1 SQLiteOpenHelper2.2 SQLiteDatabase 三、常见数据库使用介绍3.1 创建数据库3.2 插入数据3.3 修改数据&#xff08;升级数据库&#xff09;3.4 删除数据3.5 查询数据3.6 关闭数据库3.7 删除数据库 一、SQLite数据…

Apache中如何配置 ws 接口

Apache中如何配置 wss 接口 在Apache中配置WebSockets的支持&#xff0c;你需要使用mod_proxy_wstunnel模块&#xff0c;该模块是Apache的一个代理模块&#xff0c;它允许你代理WebSocket请求。 以下是配置步骤的简要说明和示例&#xff1a; 确保你的Apache服务器安装了mod_…

【linux-1-Ubuntu常用命令-vim编辑器-Vscode链接ubuntu远程开发】

目录 1. 安装虚拟机Vmare和在虚拟机上安装Ubuntu系统&#xff1a;2. 常用的Ubuntu常识和常用命令2.1 文件系统结构2.2 常用命令2.3 vim编辑器 3. Ubuntu能联网但是ping不通电脑&#xff1a;4. Windows上安装VScode链接ubuntu系统&#xff0c;进行远程开发&#xff1a; 1. 安装虚…

变电站综合自动化系统:Modbus-PLC-645转IEC104网关方案

前言 电力行业作为关系国计民生的重要基础产业&#xff0c;是关系千家万户的公用事业。但是要做好电力行业安全保障工作的前提&#xff0c;是需要对应的技术人员详细了解电力工业使用的系统、设备以及各类协议的安全特性&#xff0c;本文将主要介绍IEC 104协议的定义和钡铼技术…

【百度Apollo】探索自动驾驶:Apollo 新版本 Beta 全新的Dreamview+,便捷灵活更丰富

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、Dreamview介绍二、Dreamview 新特性2.1、基于模式的多场景——流程更简洁地图视角调节&#xff1a;调试流…

使用 scikit-learn 进行机器学习的基本原理-2

介绍 scikit-learn 估计器对象 每个算法都通过“Estimator”对象在 scikit-learn 中公开。 例如&#xff0c;线性回归是&#xff1a;sklearn.linear_model.LinearRegression 估计器参数&#xff1a;估计器的所有参数都可以在实例化时设置&#xff1a; 拟合数据 让我们用 nump…

智能体可靠性的革命性提升,揭秘知识工程领域的参考架构新篇章

引言&#xff1a;知识工程的演变与重要性 知识工程&#xff08;Knowledge Engineering&#xff0c;KE&#xff09;是一个涉及激发、捕获、概念化和形式化知识以用于信息系统的过程。自计算机科学和人工智能&#xff08;AI&#xff09;历史以来&#xff0c;知识工程的工作流程因…

【酱浦菌-爬虫技术细节】解决学术堂爬虫翻页(下一页)问题

首先我们通过css选择器获取页码信息&#xff0c;这里的css选择器&#xff0c;选择的是含有a标签的所有li标签&#xff0c;代码如下&#xff1a; li html_web.css(div.pd_c_xslb_left_fenye ul li>a) for li in li:li_url li.css(a::attr(href)).get()li_num li.css(a::t…

vue2迁移到vue3,v-model的调整

项目从vue2迁移到vue3&#xff0c;v-model不能再使用了&#xff0c;需要如何调整&#xff1f; 下面只提示变化最小的迁移&#xff0c;不赘述vue2和vue3中的常规写法。 vue2迁移到vue3&#xff0c;往往不想去调整之前的代码&#xff0c;以下就使用改动较小的方案进行调整。 I…

口袋实验室--使用AD2学习频谱参数测试

目录 1. 简介 2. 频谱相关参数 2.1 频谱相关基本概念 2.1.1 采样时间间隔 2.1.2 采样频率 2.1.3 采样点数 2.1.4 采样时间长度 2.1.5 谱线数 2.1.6 奈奎斯特频率 2.1.7 频谱分辨率 2.1.8 最高分析频率 2.1.9 频谱泄露 2.2 窗函数 2.2.1 AD2的窗函数 2.2.2 测试矩…

Python来计算 1,2,3,4 能组成多少个不相同且不重复的三位数?

我们今天的例子是 有 1&#xff0c;2&#xff0c;3&#xff0c;4 四个数字&#xff0c;它们能组成多省个互不相同且无重复的三位数&#xff1f;都分别是多少&#xff1f; 话不多说&#xff0c;我们先上代码 num 0 # 我们写了三个for循环&#xff0c;表示生成的三位数 for i…

【韩国】UE5的MetaHuman确实可以导入Blender进行编辑。

UE5的MetaHuman确实可以导入Blender进行编辑。根据网络上的信息&#xff0c;你可以将MetaHuman模型导出为FBX文件&#xff0c;然后在Blender中进行修改。修改完成后&#xff0c;你可以将其重新导入到Unreal Engine 5中4。请注意&#xff0c;当你在Blender中编辑模型时&#xff…

六天以太坊去中心化租房平台,前端+合约源码

六天以太坊去中心化租房平台 概述项目结构合约部署运行项目功能介绍一、首页二、房东后台我的房屋我的订单上架新房屋 三、租户后台我的房屋我的订单 四、仲裁后台 下载地址 概述 六天区块链房屋租赁系统&#xff0c;采用去中心化的方式实现了房屋的租赁功能。房东可在平台上托…