基于Python的学生成绩管理系统

news2024/11/25 17:22:56

末尾获取源码
开发语言:python
后端框架:django
数据库:MySQL5.7
开发软件:Pycharm
是否Maven项目:是


目录

一、项目简介

二、系统功能

三、系统项目截图

四、核心代码

4.1登录相关

4.2文件上传

4.3封装


一、项目简介

网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块,对于学生成绩管理系统将是又一个传统管理到智能化信息管理的改革,对于传统的学生成绩管理,所包括的信息内容比较多,对于用户想要对这些数据进行管理维护需要花费很大的时间信息,而且对于数据的存储比较麻烦,想要查找某一相关的数据信息比较繁琐,随着互联网大潮的到来,决定开发一套智能化、信息化的学生成绩管理系统,主要对首页,个人中心,教师管理,学生管理,公告信息管理,课程类型管理,课程信息管理,选课信息管理,成绩信息管理等功能模块的管理系统的研发。

本文研究的系统是以Python为语言的学生成绩管理系统设计与实现,它在使用时数据库和程序不会被造成太大的影响,用起来也很得心应手。它也算是当时比较流行的安全性相对也很高的框架之一了,Python开发语言。和mysql数据库,最终完成学生成绩管理系统


二、系统功能

本课题要求实现一套学生成绩管理系统,系统主要包括管理员,学生和教师三大模块

(a) 管理员;管理员进入系统主要功能包括首页,个人中心,教师管理,学生管理,公告信息管理,课程类型管理,课程信息管理,选课信息管理,成绩信息管理等功能并进行操作。

(b) 教师;教师进入系统主要功能包括首页,个人中心,公告信息管理,课程信息管理,选课信息管理,成绩信息管理等功能并进行操作。

(c) 学生;学生进入系统主要功能包括首页,个人中心,公告信息管理,课程信息管理,选课信息管理,成绩信息管理等功能并进行操作。



三、系统项目截图

系统登录,用户进入系统前在登录页面根据要求填写用户名和密码,选择角色等信息,点击登录进行登录操作,如图5-1所示。

管理员登录系统后,可以对首页,个人中心,教师管理,学生管理,公告信息管理,课程类型管理,课程信息管理,选课信息管理,成绩信息管理等功能进行相应的操作管理,如图5-2所示。

 

教师管理,在教师管理页面可以对索引,工号,教师姓名,性别,年龄,职称,电话,头像等内容进行详情,修改和删除等操作,如图5-3所示。 

学生管理,在学生管理页面可以对索引,学号,学生姓名,性别,班级,专业,手机,头像等信息进行详情,修改和删除等操作,如图5-4所示。 

公告信息管理,在公告信息管理页面可以对索引,标题,类型,发布时间等内容进行详情、修改和删除等操作,如图5-5所示。 

课程类型管理,在课程类型管理页面可以对索引,课程类型等内容进行修改和删除等操作,如图5-6所示。 

课程信息管理,在课程信息管理页面可以对索引,课程名称,课程类型,开课时间,上班地点,工号,教师姓名等内容进行详情,修改和删除等操作,如图5-7所示。 

选课信息管理,在选课信息管理页面可以对索引,课程名称,课程类型,开课时间,工号,教师姓名,选课时间,学号,姓名,专业,审核回复,审核状态等内容进行详情,修改和删除等操作,如图5-8所示。 

成绩信息管理,在成绩信息管理页面可以对索引,课程名称,学号,学生姓名,成绩,发布时间,工号,教师姓名等内容进行详情,修改和删除等操作,如图5-9所示。 

教师登录进入学生成绩管理系统可以对首页,个人中心,公告信息管理,课程信息管理,选课信息管理,成绩信息管理等功能进行相应操作,如图5-10所示。 

个人中心,在个人信息页面可以通过填写工号,性别,职称,头像,教师姓名,年龄,电话等内容进行个人信息修改操作,如图5-11所示。 

公告信息管理,在公告信息管理页面可以对索引,标题,类型,发布时间等内容进行详情操作,如图5-12所示。 

学生登录进入学生成绩管理系统可以对首页,个人中心,公告信息管理,课程信息管理,选课信息管理,成绩信息管理等功能进行相应操作,如图5-13所示。 

个人中心,在个人信息页面通过填写学号,性别,专业,头像,学生姓名,班级,手机等内容进行个人信息修改操作,如图5-14所示。 

课程信息管理,在课程信息管理页面可以对索引,课程名称,课程类型,开课时间,上班地点,工号,教师姓名等内容进行详情,选课等操作,如图5-15所示。


四、核心代码

4.1登录相关


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();
    }
}

4.2文件上传

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);
	}
	
}

4.3封装

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/526051.html

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

相关文章

12.软考——数据流图

数据流图分层 数据字典 数据流图平衡原则 考试必问根据顶层数据流图补充0层数据流图中缺失的数据流图。 1.父图与子图之间的平衡 主要看系统和外部的联系是否缺失,比如上图数据管理中间件--------->前端应用中的处理后的操作结果这个数据流缺失。 2.子图内平衡 正常的加…

1123 Is It a Complete AVL Tree(72行代码+超详细注释)

1123 Is It a Complete AVL Tree 分数 30 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by…

【原创】ChatGPT访问及内容安全技术设计

作者&#xff1a;黑夜路人 时间&#xff1a;2023/5/15 作为爆火的AIGC产品ChatGPT&#xff0c;以及类似的产品 Cluade、Bard、Newbing 等等&#xff0c;让大家趋之若鹜&#xff0c;如何把这些产品映射到自己的业务产品中&#xff0c;也是很多开发者需要面对的问题。 针对AIGC&…

Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题

Prompt工程师指南[从基础到进阶篇]&#xff1a;用于开发和优化提示&#xff0c;以有效地使用语言模型&#xff08;LMs&#xff09;进行各种应用和研究主题 Prompt工程是一种相对较新的学科&#xff0c;用于开发和优化提示&#xff0c;以有效地使用语言模型&#xff08;LMs&…

基于卷积的图像分类识别(二):ZFNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

LitCTF2023 Reverse 题解及复现

文章目录 一.enbase641.main函数2.换表函数3. check函数4. 解题脚本: 二.snake1. 修复MagicNumber2. 反编译3. 解题脚本 三.For Aiur1. 注意点2. 解包3. 反编译4. 解题脚本 四.程序和人有一个能跑就行了1. fakeflag2. 真flag 五.debase641. encode函数2. 函数逻辑3. 根据程序逻…

PCIe事务层(详细)总结-PCIe专题知识(六)

目录 前言一、简介二、事务层数据传输三、数据格式四、其他相关链接1、PCIe物理层总结-PCIE专题知识&#xff08;一&#xff09;2、PCIe数据链路层图文总结-PCIe专题知识&#xff08;二&#xff09;3、PCIe物理层链路训练和初始化总结-PCIe专题知识&#xff08;三&#xff09;4…

SpringCloud:微服务保护之规则持久化

现在&#xff0c;sentinel的所有规则都是内存存储&#xff0c;重启后所有规则都会丢失。在生产环境下&#xff0c;我们必须确保这些规则的持久化&#xff0c;避免丢失。 1.规则管理模式 规则是否能持久化&#xff0c;取决于规则管理模式&#xff0c;sentinel支持三种规则管理…

基于卷积的图像分类识别(一):AlexNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

机器学习中的监督学习、无监督学习、半监督学习和强化学习,这四种学习方式到底有啥区别?

监督学习、无监督学习、半监督学习和强化学习 人工智能中的机器学习是指让计算机通过学习数据的方式改善性能。在机器学习中&#xff0c;有四种主要的学习方式&#xff1a;监督学习、无监督学习、半监督学习和强化学习。本文将详细介绍这四种学习方式的概念、应用和优缺点。 …

[GXYCTF2019]BabyUpload1

上传文件后提示后缀名不能有ph 那估计都是黑名单过滤&#xff0c;大小写绕过也不行&#xff0c;尝试一下上传.htaccess文件 将文件名称为abc的当做php文件执行 上传后提示上传类型露骨&#xff0c;说明绕过了黑名单但是还有content_type类型坐镇 那就利用burp抓包修改content—…

msvcp140.dll丢失怎样修复,总结4个msvcp140.dll丢失的修复方法

今天早上打开photoshop的时候&#xff0c;电脑突然提示由于找不到msvcp140.dll&#xff0c;无法继续执行此代码&#xff0c;一时间都懵了&#xff0c;不知道怎么处理。在网上找了一上午的资料及修复方法&#xff0c;MSVCP140.dll是一个非常重要的Windows系统文件&#xff0c;它…

win10 平台搭建react native 并在 Android模拟器上运行app

目录 1 安装npm 1.1 nodejs官网下载 安装程序&#xff0c;双击安装&#xff0c;一路点“是"即可 1.2 增加三个环境变量 NODE_PATH NVM_HOME NVM_SYMLINK 1.3 在PATH中增加 %NVM_HOME% %NVM_SYMLINK% 2 安装yarn 3 安装java 11.0.2 3.1 安装…

Unity 矩阵简介

前言&#xff1a;与向量一样&#xff0c;矩阵也是3D数学的基础。要正确进行物体的位移、旋转和缩放变换&#xff0c;就必须要用到矩阵。 3D游戏中的向量一般只有3个维度&#xff0c;但矩阵要使用44矩阵&#xff0c;主要原因你是要用矩阵实现平移&#xff0c;33矩阵是不够的。4…

C++类和对象下

专栏&#xff1a;C/C 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本章为大家带来C类和对象相关内容。 类和对象下 类的默认成员函数构造函数析构函数拷贝构造函数运算符重载 const成员再谈构造函数构造函数体赋值初始值列表 explicit关键字static成员友元内部类匿名对象…

【MySQL】表的操作

目录 一.使用Cmd命令执行操作 1.使用&#xff08;mysql -uroot -p)命令进入数据库 2.创建一个角色表用于操作&#xff08;创建表之前先使用数据库&#xff09; 3.查看表 4.插入数据 5.查看表中内容 6.修改表 1.修改表名 2.修改字段名 3.修改字段的数据类型 ALTER TABL…

Vue3-黑马(十一)

目录&#xff1a; &#xff08;1&#xff09;vue3-router-布局和菜单 &#xff08;2&#xff09;vue3-进阶-router-图标二次封装-单文件组件 &#xff08;3&#xff09;vue3-进阶-router-图标的二次封装-函数式组件 &#xff08;1&#xff09;vue3-router-布局和菜单 主页做…

收藏:如何一步步成为技术领域专家

经常有人问我&#xff0c;为什么有的人工作10年仍然平台无奇&#xff0c;而有的人只用3年时间&#xff0c;就已经脱颖而出&#xff0c;成绩斐然。我说&#xff0c;是呀&#xff0c;有些参加工作多年却仍然只会复制粘贴简单业务代码&#xff0c;有些人在大学就写出Linux操作系统…

英文论文(sci)解读复现【NO.9】基于注意机制的葡萄叶片病害检测

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

(免费分享)基于微信小程序的旅游系统(带文档)

随着互联网的趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己的信息推广出去&#xff0c;最好方式就是建立自己的平台信息&#xff0c;并对其进行管理&#xff0c;随着现在智能手机的普及&#xff0c;人们对于智能手机里面的应用旅游服务软件也在不断的使用&#xff0…