当前位置: 首页 > news >正文

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.lryc.cn/news/341762.html

相关文章:

  • 从NoSQL到NewSQL——10年代大数据浪潮下的技术革新
  • 巴菲特股东大会5万字完整版来了!
  • LY/T 1860-2022 非甲醛类热塑性树脂胶合板检测
  • 信息管理与信息系统就业方向及前景分析
  • TCP的三次握手过程
  • Microsoft 推出 Phi-3 系列紧凑型语言模型
  • Retrofit库中,Call​;Retrofit使用举例;@GET,@PUT区别;
  • # 怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法
  • 强化学习玩flappy_bird
  • JavaWeb请求响应概述
  • 【IDEA】IDEA常用快捷键
  • Redission分布式锁 watch dog 看门狗机制
  • 人脸识别系统架构
  • 数塔问题(蛮力算法和动态规划)
  • 启动 Redis 服务和连接到 Redis 服务器
  • 我独自升级崛起在哪下载 我独自升级电脑PC端下载教程分享
  • STM32F4xx开发学习—GPIO
  • 引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展
  • 扩展学习|一文读懂知识图谱
  • ubuntu中的docker记录(3)——如何安装nvidia-docker以更好地支持GPU加速计算应用程序的运行
  • MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)
  • ChatGPT-税收支持新质生产力
  • Linux下深度学习虚拟环境的搭建与模型训练
  • Map-Reduce是个什么东东?
  • 上位机工作感想-从C#到Qt的转变-2
  • 【C++】C++ 中 的 lambda 表达式(匿名函数)
  • OpenSSL实现AES-CBC加解密,可一次性加解密任意长度的明文字符串或字节流(QT C++环境)
  • cURL:命令行下的网络工具
  • Baumer工业相机堡盟工业相机如何通过NEOAPISDK查询和轮询相机设备事件函数(C#)
  • Day45代码随想录动态规划part07:70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数、139.单词拆分