基于springboot自动排课系统

news2024/11/24 2:50:41

末尾获取源码
开发语言:Java
Java开发工具:JDK1.8
后端框架:SpringBoot
前端:Vue
数据库:MySQL5.7和Navicat管理工具结合
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是


前言

基于springboot自动排课系统有三大用户:

学生:首页、教师信息、课程信息、公告信息、个人中心、后台管理。

管理员:首页、个人中心、学生管理、教师管理、班级信息管理、专业信息管理、教师信息管理、课程信息管理、排课信息管理、系统管理。

教师:首页、个人中心、课程信息管理、排课信息管理。

前台首页

 进入首页首先可以看到有首页、教师信息、课程信息、公告信息、个人中心、后台管理。

 在教室信息中我们可以看到有教室信息

 查看教室详情信息

 学生登录注册页面。

 在个人中心,学生可以查看自己的信息并且选择修改

管理员功能

 管理员和教师登录页面功能

 管理员登录到系统可以看到有首页、个人中心、学生管理、教师管理、班级信息管理、专业信息管理、教师信息管理、课程信息管理、排课信息管理、系统管理。

 

 管理员可以在学生管理中对学生信息进行修改或者删除又或者进行排课处理。

 在教师管理中,管理员可以对教师信息进行删除或者修改又或者进行添加课程处理。

 班级信息管理。

 专业信息管理页面。

 教室信息管理页面。

 课程信息管理页面

教师功能

 教师登录后可以看到有首页、个人中心、课程信息管理、排课信息管理。


 

登录模块核心代码


package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

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

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

文件上传核心代码

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
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 org.springframework.web.multipart.MultipartFile;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		FileUtils.copyFile(dest, new File("C:\\Users\\Desktop\\jiadian\\springbootl7own\\src\\main\\resources\\static\\upload"+"/"+fileName));
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

 封装代码

package com.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

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

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

相关文章

云计算安全

前言 什么是云计算&#xff1f; 云计算就是一种新兴的计算资源利用方式&#xff0c;云计算的服务商通过对硬件资源的虚拟化&#xff0c;将基础IT资源变成了可以自由调度的资源池&#xff0c;从而实现IT资源的按需分配&#xff0c;向客户提供按使用付费的云计算服务。用户可以…

帽子设计作品——蒸汽朋克的乌托邦,机械配件的幻想世界!

蒸汽朋克是由蒸汽steam和朋克punk两个词组成&#xff0c; 蒸汽代表着以蒸汽机作为动力的大型机械&#xff0c;而朋克则代表一种反抗、叛逆的精神。 蒸汽朋克的作品通常以蒸汽时代为背景&#xff0c;通过如新能源、新机械、新材料、新交通工具等新技术&#xff0c;使画面充满想…

基于OpenCV和PyQt5的跳远成果展示程序

基于OpenCV和PyQt5的跳远成果展示程序 近年来&#xff0c;体育运动越来越受到人们的关注&#xff0c;其中跳远是一项备受瞩目的运动项目。为了更好地展示运动员的跳远成果&#xff0c;本文将介绍一种基于OpenCV和PyQt5的跳远成果展示程序实现方法。 本文的跳远成果展示程序主…

基于SSM的校园办公管理系统的设计与实现(源码完整)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题&#xff0c;今天给…

【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台

板卡概述 TES641是一款基于Virtex UltraScale系列FPGA的高性能4路FMC接口基带信号处理平台&#xff0c;该平台采用1片Xilinx的Virtex UltraScale系列FPGA XCVU13P作为信号实时处理单元&#xff0c;该板卡具有4个FMC子卡接口&#xff08;其中有2个为FMC接口&#xff09;&#xf…

Sui如何进行独立审计

Sui及其生态项目的第三方审计对于网络的安全至关重要。 类似于Sui这样的L1区块链必须使用多重有效的措施&#xff0c;来确保项目保持尽可能高的安全级别。Sui流程中的一个关键环节就是使用第三方安全审计。了解Sui的安全状态及其维护方式对整个社区来说很重要&#xff0c;因此…

【JavaSE】Java基础语法(二)

文章目录 1. ⛄类型转换1.1 &#x1fa82;&#x1fa82;隐式转换1.2 &#x1fa82;&#x1fa82;强制转换 2. ⛄运算符2.1 &#x1fa82;&#x1fa82;算术运算符2.1.1 算术运算符2.1.2 字符的“”操作2.1.3 字符串的“”操作2.1.4 数值拆分 2.2 &#x1fa82;&#x1fa82;自增…

SQL注入 - Part 2

SQL注入 - Part 2 1.sql注入自动化工具--sqlmap配置环境变量/快捷方式一些sqlmap的常用语句前置SQL知识batch批量注入 2.sql注入靶场——sqlilabs3.布尔盲注4.基于时间的盲注5.基于报错的注入总结 1.sql注入自动化工具–sqlmap 配置环境变量/快捷方式 最终效果&#xff1a; …

数据高效转储,生产轻松支撑

在使用WINDOWS或智能手机的时候&#xff0c;经常会遇到存储空间不足的问题&#xff0c;鲜有人会打开文件管理系统自己逐个清理&#xff0c;不仅因为底层的系统文件繁多操作耗时&#xff0c;更有其操作专业度高、风险高的问题。这时我们往往会求助各种各样的清理大师&#xff0c…

2个月拿到华为offer,身为00后的我拿30K没问题吧?

背景介绍 美本计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三回国的时间比较短&#xff0c;于是找的实习是在一家初创公司里面做全栈。 本人面…

网络安全CTF工具合集

各种在线工具以及工具整合 CTF资源库|CTF工具下载|CTF工具包|CTF工具集合 逆向工程: GDB – http://www.gnu.org/software/gdb/download/ IDA Pro – Download center Immunity Debugger – http://debugger.immunityinc.com/ OllyDbg – OllyDbg v1.10 radare2 – radare Hop…

MySQL基于成本的优化

MySQL的成本是什么&#xff1f;MySQL在执行一个查询的时候&#xff0c;其实是有多种不同的方案的&#xff0c;但是最终会选择一种成本比较低的方案&#xff0c;那么这个成本都体现在什么地方&#xff1f;如何计算&#xff1f; MySQL的成本 I/O成本 &#xff1a; 把数据从磁盘…

Python 萌新 - 花10分钟学爬虫

前言 Python 新手入门很多时候都会写个爬虫练手&#xff0c;本教程使用 Scrapy 框架&#xff0c;帮你简单快速实现爬虫&#xff0c;并将数据保存至数据库。在机器学习中数据挖掘也是十分重要的&#xff0c;我的数据科学老师曾经说过&#xff0c;好算法不如好数据。 Python助学…

理光打印机连接电脑后不打印的原因及解决方法

理光打印机在使用时&#xff0c;可能会出现正常连接上理光打印机却没有反应的情况&#xff0c;出现无法打印的情况&#xff0c;下面&#xff0c;驱动人生为大家带来理光打印机连接后不打印的解决方案。 驱动人生分析&#xff0c;一般遇到理光打印机连接后不打印的情况&#xf…

第一行代码 第十一章 基于位置的服务

第11章 基于位置的服务 在本章中&#xff0c;我们将要学习一些全新的Android技术&#xff0c;这些技术有别于传统的PC或Web领域的应用技术&#xff0c;是只有在移动设备上才能实现的。 基于位置的服务&#xff08;Location Based Service&#xff09;。由于移动设备相比于电脑…

Prompt Engineering | 编写prompt的原则与策略

&#x1f604; 为了更好地与大模型&#xff08;e.g. chatgpt&#xff09;更好的交流&#xff0c;一起来学习如何写prompt吧&#xff01;&#x1f604; 文章目录 1、简介2、编写prompt的原则与策略2.1、编写清晰、具体的指令2.1.1、策略一&#xff1a;使用分隔符清晰地表示输入的…

js 解析map (处理后端返回对象拼接)

返回的数据 需要的展示效果 解析如下&#xff1a; { title: ‘销售属性’, align: ‘left’, dataIndex: ‘xsshuxing’, width: 200, render(value, record) { let keyValue ‘’; { for (var key in record.otherAttr) { console.log(‘属性&#xff1a;’ key ‘,值&…

EIS-Net

我们提出了一种新的领域泛化框架&#xff08;称为EISNet&#xff09;&#xff0c;该框架利用来自多源领域图像的外在关系监督和内在自我监督学习&#xff0c;学习如何同时在不同领域中进行泛化。 具体而言&#xff0c;我们采用多任务学习范式&#xff0c;通过特征嵌入来构建我…

AI智慧安监视频平台EasyCVR视频出现不能播放的情况排查与解决

EasyCVR基于云边端协同&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台兼容性强、拓展度高&#xff0c;可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码、平台级联等功能。 有用户反…

如何动态生成列表视图?

UE5 插件开发指南 前言0 什么是列表视图?1 如何动态生成?1.0 指定ListView生成的条目前言 这里将其拆分成两个问题来分析: (1)什么是列表视图? (2)如何动态生成? 0 什么是列表视图? 列表视图就是用来展示一系列对象的UI列表,在UE编辑器的UserWidget设计窗口中可以找到…