教务管理系统带万字文档基于springboot+vue的校务管理系统java项目

文章目录

  • 教务管理系统
    • 一、项目演示
    • 二、项目介绍
    • 三、万字项目文档
    • 四、部分功能截图
    • 五、部分代码展示
    • 六、底部获取项目源码和万字论文参考(9.9¥带走)

教务管理系统

一、项目演示

校务管理系统

二、项目介绍

基于springboot+vue的前后端分离教务管理系统

系统角色 : 系统管理员、科任老师、班主任、学生

系统管理员:管理系统用户、角色与权限,拥有查看班主任信息,学生基本信息,年级,班级,课程的管理,发布考试信息等。

科任老师:录入成绩,查看自己的个人信息。

班主任:可以查看本班成绩,本班学生信息。

学生:查看自己成绩,自己信息

项目技术
语言:java
前端技术:Vue、 ELementUI
后端技术:SpringBoot、Mybatis-Plus
数据库:MySQL

三、万字项目文档

在这里插入图片描述

在这里插入图片描述

四、部分功能截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、部分代码展示

package com.ljxy.score.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ljxy.score.common.Result;
import com.ljxy.score.entity.Clazz;
import com.ljxy.score.entity.Grade;
import com.ljxy.score.entity.Student;
import com.ljxy.score.entity.User;
import com.ljxy.score.service.ClazzService;
import com.ljxy.score.service.GradeService;
import com.ljxy.score.service.StudentService;
import com.ljxy.score.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@Api(tags = "班级模块")
@RestController
@RequestMapping("/clazz")
public class ClazzController {
    @Resource
    ClazzService clazzService;
    @Resource
    GradeService gradeService;
    @Resource
    StudentService studentService;
    @Resource
    UserService userService;

    @ApiOperation(value = "全部年级")
    @GetMapping("/all")
    public Result<?> getAllClazz() {
        List<Clazz> list = clazzService.list();
        return Result.success(list);
    }

    @ApiOperation(value = "分页查询(班级管理)")
    @GetMapping("/list")
    public Result<?> page(@RequestParam(defaultValue = "1") Integer PageNum, @RequestParam(defaultValue = "10") Integer PageSize, @RequestParam(defaultValue = "") String search) {
        LambdaQueryWrapper<Clazz> wrapper = Wrappers.<Clazz>lambdaQuery();
        if (StrUtil.isNotBlank(search)) wrapper.like(Clazz::getName, search);
        Page<Clazz> clazzPage = clazzService.findPage(new Page<>(PageNum, PageSize), search);
        return Result.success(clazzPage);
    }

    @ApiOperation(value = "添加班级")
    @PostMapping("/add")
    public Result<?> addClazz(@RequestBody Clazz clazz) {
        Grade one = gradeService.getOne(Wrappers.<Grade>lambdaQuery().eq(Grade::getId, clazz.getGradeId()));
        String GradeName = one.getName();
        Clazz result = clazzService.getOne(Wrappers.<Clazz>lambdaQuery().eq(Clazz::getId, clazz.getId()));
        Clazz res = clazzService.getOne(Wrappers.<Clazz>lambdaQuery().eq(Clazz::getName, clazz.getName()).eq(Clazz::getGradeId, clazz.getGradeId()));
        System.out.println("res = " + res);
        System.out.println("result = " + result);
        if (res != null) return Result.error("-1", GradeName+clazz.getName()+"已存在");
        if (result != null) return Result.error("-2", "编号已存在");
        clazzService.save(clazz);
        System.out.println(clazz);
        return Result.success(clazz);
    }

    @ApiOperation(value = "删除班级")
    @ApiImplicitParam(name = "id", value = "班级编号", required = true)
    @DeleteMapping("/delete/{id}")
    public Result<?> deleteClazz(@PathVariable Long id) {
        Integer gradeId = clazzService.getById(id).getGradeId();
        List<Student> list = studentService.list(Wrappers.<Student>lambdaQuery().eq(Student::getClazzId, id).eq(Student::getGradeId, gradeId));
        for (int i = 0; i < list.size(); i++) {
            userService.remove(Wrappers.<User>lambdaQuery().eq(User::getAccount,list.get(i).getStuId()));
        }
        if (clazzService.removeById(id)) return Result.success();
        return Result.error("-1", "删除失败");
    }

    @ApiOperation(value = "修改班级")
    @PutMapping("/update")
    public Result<?> update(@RequestBody Clazz clazz) {
        if (clazzService.updateById(clazz)) return Result.success();
        return Result.error("-1", "修改失败");
    }

    @ApiOperation(value = "根据年级ID查询班级")
    @GetMapping("/findClazzByGid")
    public Result<?> findByGid(Integer gradeId) {
        List<Clazz> res = clazzService.findClazz(gradeId);
        return Result.success(res);
    }

    @ApiOperation(value = "查id")
    @GetMapping("/findid")
    public void getById(String name, Integer gradeId) { /*        Integer res = gradeMapper.selectGrade(name); System.out.println(res);*/
        Integer id = clazzService.findId(name, gradeId);
        System.out.println(id);
    }
}

package com.ljxy.score.controller;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ljxy.score.common.Result;
import com.ljxy.score.entity.Escore;

import com.ljxy.score.entity.Vo.ClazzAvgVo;

import com.ljxy.score.service.EscoreService;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author SuSheng
 * @date 2022/3/3 16:25
 */

@Api(tags = "成绩模块")
@RestController
@RequestMapping("/escore")
public class EscoreController {

    @Resource
    EscoreService escoreService;



    @ApiOperation("查询学生成绩")
    @GetMapping("/studentscore")
    public Result<?> studentScoreList(Integer examId, Integer studentId) {

        List<Escore> scoreList = escoreService.selectScore(examId, studentId, null, null, null);
        return Result.success(scoreList);
    }

    @ApiOperation("管理员查看学生成绩")
    @GetMapping("/admin/student/score")
    public Result<?> adminScore(@RequestParam(defaultValue = "1") Integer PageNum, @RequestParam(defaultValue = "10") Integer PageSize,Integer examId, Integer studentId, Integer courseId, Integer clazzId){
        Page<Escore> page = escoreService.findPage(new Page<>(PageNum, PageSize), examId, studentId,null, clazzId, courseId);
        return Result.success(page);
    }
    /**
     * 查询学生成绩(老师)
     *
     * @param PageNum
     * @param PageSize
     * @param examId
     * @param clazzId
     * @param gradeId
     * @param courseId
     * @return
     */
    @ApiOperation("老师查询学生成绩")
    @GetMapping("/teacherscore")
    public Result<?> teacherScoreList(@RequestParam(defaultValue = "1") Integer PageNum, @RequestParam(defaultValue = "10") Integer PageSize, Integer examId, Integer clazzId, Integer gradeId, Integer courseId,Integer studentId) {


        Page<Escore> page = escoreService.findPage(new Page<>(PageNum, PageSize), examId, studentId, gradeId, clazzId, courseId);
        return Result.success(page);
    }

    /**
     * 修改学生成绩
     *
     * @param escore
     * @return
     */
    @ApiOperation("修改学生成绩")
    @PutMapping("/update")
    public Result<?> updateExamScore(@RequestBody Escore escore) {
        if (escoreService.updateById(escore)) {
            return Result.success();
        }
        return Result.error("-1", "修改失败");
    }

    /**
     * 导入学生成绩
     */
    @ApiOperation("导入学生成绩")
    @PostMapping("/upload")
    public Result<?> importScore(MultipartFile file, Integer examId, Integer gradeId, Integer clazzId, Integer courseId) {
        System.out.println(examId);
        System.out.println(gradeId);
        System.out.println(clazzId);
        System.out.println(courseId);

        ImportParams params = new ImportParams();
        params.setTitleRows(0);
        try {
            List<Escore> list = ExcelImportUtil.importExcel(file.getInputStream(), Escore.class, params);
            list.forEach(escore -> {
                System.out.println(escore);
//               查找学生成绩对应的id
                List<Escore> escores = escoreService.selectScore(examId, escore.getStudentId(), gradeId, clazzId, courseId);
                System.out.println(escores);
                Integer escoreId = escores.get(0).getId();
                System.out.println("成绩id"+escoreId);
                escoreService.updateScore(escoreId, escore.getScore());
            });
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.error("-1", "上传失败");

    }

    @ApiOperation("查询考试平均分")
    @GetMapping("/clazzavg")
    public Result<?> test(Integer examId,Integer gradeId,Integer clazzId,Integer courseId){
        float v = escoreService.selectAvg(examId,gradeId,clazzId,courseId);
        System.out.println(v);
        return Result.success(v);
    }

    @ApiOperation("各班平均分")
    @GetMapping("/test")
    public Result<?> result(Integer examId,Integer gradeId,Integer courseId){
        List<ClazzAvgVo> clazzAvgVos = escoreService.clazzAvg(examId, gradeId, courseId);
        return Result.success(clazzAvgVos);
    }

    @ApiOperation("最高分")
    @GetMapping("/height/score")
    public Result<?> heightScore(Integer examId,Integer gradeId,Integer courseId,Integer clazzId){
        float score = escoreService.heightScore(examId, gradeId, courseId,clazzId);
        return Result.success(score);
    }

}

package com.ljxy.score.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ljxy.score.common.Result;
import com.ljxy.score.entity.*;
import com.ljxy.score.entity.Vo.GradecountVo;
import com.ljxy.score.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author SuSheng
 * @date 2022/3/2 0:30
 */
@Api(tags = "考试模块")
@RestController
@RequestMapping("/exam")
public class ExamController {
    @Resource
    ExamService examService;
    @Resource
    GradeCourseService gradeCourseService;
    @Resource
    StudentService studentService;
    @Resource
    EscoreService escoreService;

    /**
     * 删除考试
     *
     * @param id
     * @return
     */
    @ApiOperation(value = "删除考试")
    @DeleteMapping("/delete/{id}")
    public Result<?> deleteExam(@PathVariable Long id) {
        if (examService.removeById(id)) return Result.success();
        return Result.error("-1", "删除失败");
    }


    /**
     * 分页查询考试成绩
     *
     * @param PageNum
     * @param PageSize
     * @param name
     * @param gradeId
     * @return
     */
    @ApiOperation(value = "考试信息(分页)")
    @GetMapping("/all")
    public Result<?> ExamList(@RequestParam(defaultValue = "1") Integer PageNum, @RequestParam(defaultValue = "10") Integer PageSize, String name, Integer gradeId) {
        System.out.println(name);
        System.out.println(gradeId);
        Page<Exam> list = examService.examPage(new Page<>(PageNum, PageSize), name, gradeId);
        return Result.success(list);
    }

    /**
     * 修改考试信息
     *
     * @param exam
     * @return
     */
    @ApiOperation(value = "修改考试信息")
    @PutMapping("/update")
    public Result<?> updateExam(@RequestBody Exam exam) {
        if (examService.updateById(exam)) {
            return Result.success(exam);
        }
        return Result.error("-1", "更新失败");
    }

    /**
     * 修改年级状态
     *
     * @param id
     * @param status
     * @return
     */
    @ApiOperation("修改考试状态")
    @PutMapping("/updateStatus")
    public Result<?> updateStatus(Integer id, Integer status) {
        System.out.println("考试ID" + id);
        System.out.println("考试状态" + status);
        examService.updateStatus(id, status);
        return Result.success();
    }


    /**
     * 添加考试
     * 初始化学生成绩信息
     */
    @ApiOperation(value = "添加考试")
    @PostMapping("/add")
    public Result<?> addExamAndInfo(@RequestBody Exam exam) {
//        设置考试状态为不可见
        Exam one = examService.getOne(Wrappers.<Exam>lambdaQuery().eq(Exam::getId, exam.getId()));
        if(one !=null){
            return Result.error("-2","编号重复");
        }
        exam.setStatus(0);
        if (examService.save(exam)) {
            //        年级id
            Integer gradeId = exam.getGradeId();
            //        根据年级查询课程
            List<GradeCourse> gradeCourseList = gradeCourseService.list(Wrappers.<GradeCourse>lambdaQuery().eq(GradeCourse::getGradeId, gradeId));
            //        查询年级学生
            List<Student> studentList = studentService.list(Wrappers.<Student>lambdaQuery().eq(Student::getGradeId, gradeId));

            for (int i = 0; i < gradeCourseList.size(); i++) {
                for (int j = 0; j < studentList.size(); j++) {


                    Escore escore = new Escore();
                    escore.setExamId(exam.getId());
                    escore.setGradeId(exam.getGradeId());
                    escore.setClazzId(studentList.get(j).getClazzId());
                    escore.setCourseId(gradeCourseList.get(i).getCourseId());
                    escore.setStudentId(studentList.get(j).getId());
                    escoreService.save(escore);
                }
            }

            return Result.success();
        }
        return Result.error("-1", "添加失败");

    }

    /**
     * 查询各年级考试次数
     */
    @ApiOperation("查询各年级考试次数")
    @GetMapping("/count")
    public Result<?> examCount(){
        List<GradecountVo> gradecountVos = examService.examCount();
        return Result.success(gradecountVos);
    }
}

六、底部获取项目源码和万字论文参考(9.9¥带走)

有问题,或者需要协助调试运行项目的也可以

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强大的机器学习建模扩展包:mlxtend

公众号&#xff1a;尤而小屋编辑&#xff1a;Peter作者&#xff1a;Peter 大家好&#xff0c;我是Peter~ 今天给大家介绍一个强大的机器学习建模扩展包&#xff1a;mlxtend。 mlxtend(machine learning extensions&#xff0c;机器学习扩展)是一个用于日常数据分析、机器学习…

程序员应该有什么职业素养?

程序员的六大职业素养&#xff1a;构建成功职业生涯的基石 在不断变化的技术世界中&#xff0c;程序员不单要保持技术的锋利&#xff0c;也需要培养相应的职业素养&#xff0c;这些素养在很大程度上决定了一个程序员的职业生涯能否走得长远。以下是我认为最为重要的六大职业素…

2024上海国际金属去毛刺表面精加工技术展览会

2024上海国际金属去毛刺表面精加工技术展览会 2024 Shanghai International Metal Deburring Surface Finishing Technology Exhibition 时间&#xff1a;2024年12月18日--20日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#xff08;前三位&#xff09; …

gorm/gin框架实战

gorm/gin框架实战 项目简介 学习源视频&#xff1a;【最新Go Web开发教程】基于gin框架和gorm的web开发实战 (七米出品)_哔哩哔哩_bilibili 本博客为我的学习笔记。 项目目标&#xff1a;实现一个备忘录工具(当然不支持alert)&#xff0c;仅仅是可以记录待办事项。 实现了…

Linux基础1-基本指令3

上篇文章我们说到了文件&#xff0c;pwd&#xff0c;touch&#xff0c;mkdir等知识。 Linux基础1-基本指令2&#xff08;你真的了解文件吗?&#xff09;-CSDN博客 本文继续梳理其他基础命令 1.本章重点 1.删除一个空目录命令rmdir 2.删除一个文件指令rm(重要!) 3.man命令&am…

Gradle下载慢的问题解决

把gradle地址前面的部分改一下就行&#xff0c;下载就快多了 改成这个地址&#xff1a; https://mirrors.aliyun.com/macports/distfiles/gradle/ 这个是gradle的阿里云镜像下载地址&#xff0c;在国内下载起来很快 如何改地址&#xff1a; 找到路径 项目/app/gradle/wrappe…

养老产业能否成为国家经济的新支柱?

养老产业&#xff0c;随着人口老龄化的加剧&#xff0c;逐渐成为国家经济的新支柱。在中国&#xff0c;老年人口的快速增长已经引起了社会的广泛关注&#xff0c;这也带动了对养老服务和健康医疗需求的持续增加。 政府也在积极应对这一挑战&#xff0c;出台了一系列政策来支持…

理解与应用排序算法(快速排序C实现)

目录 一、排序的定义 二、内排序方法 三、插入排序 3.1 直接插入排序 3.1 折半插入排序 3.1 链表插入排序 四、交换排序 五、起泡排序 六、快速排序 一、排序的定义 稳定排序和非稳定排序 设文件f(R1......Ri......Rj......Rn)中记录Ri、Rj&#xff08;i≠j&#xff0…

TMS320F280049 ECAP模块--应用(2)

例1-上升沿触发 如下图所示&#xff0c;evt1-4设置为上升沿触发&#xff0c;在每个上升沿ctr值依次加载到cap1-4. 例2-上升下降沿触发 每个边沿都可选为事件&#xff0c;每次事件到来&#xff0c;依次把ctr加载到cap1-4。 例3-差异模式下上升沿触发 差异模式下每次事件到来时…

varchar 字段扩展问题

背景 近期接到一个产品需求&#xff0c;由于上游业务字段扩大了字段&#xff0c;下游的字段也得跟着调整扩大&#xff0c;这就涉及几十张大表&#xff0c;十几亿行数据的变更。 如果按照传统方式 onlie-ddl 借用第三方工具也得三四天分批跑&#xff0c;看了看MySQL官网&#…

ctfshow-web入门-爆破(web25)及php_mt_seed工具的安装与使用

爆个&#x1f528;&#xff0c;不爆了 hexdec() 函数用于将十六进制字符串转换为十进制数&#xff1b; 注意&#xff1a; 我最开始做这道题时看错了&#xff0c;误以为随机数的种子直接来自于 flag 的前八位&#xff0c;以为就是 ctfshow{ 这八个字符然后 md5 加密再截取&a…

使用jquery.mousewheel-3.0.6.pack.js时报错

基于1.12.4版本的jquery.min.js&#xff0c;在使用jquery.mousewheel-3.0.6.pack.js时报错了&#xff1a; 可以如下解决&#xff1a; addEventListener事件里要加上{ passive: false }&#xff0c;这样就可以在使用鼠标滚轮放大缩小图片时&#xff0c;就不会报上述的错误了。 …

VsQt单元测试目录的管理方式

正常项目的文件管理方式 正常项目的目录&#xff0c;是由文件系统中实际的文件夹进行分类管理的。 但是如果单元测试用实际文件夹管理的话&#xff0c;会出现问题&#xff0c;就是被测类太多了&#xff0c;用文件系统管理的话&#xff0c;不太方面查看&#xff0c;如下图所示。…

7EPhone云手机各功能详解

上篇文章详细介绍了7EPhone云手机的注册和购买&#xff08;没看到的同学可以自主去翻看一下哈~&#xff09;&#xff0c;这篇文章主要给大家讲解7EPhone作为专业海外社媒营销工具&#xff0c;界面上显示什么信息&#xff0c;云机到底有什么功能&#xff0c;这些功能具体怎么来使…

招聘兼职发布客服的骗局大揭秘

在现今的互联网社会中&#xff0c;线上兼职成为许多人追求额外收入或灵活就业的方式。然而&#xff0c;这其中也隐藏着不少骗局&#xff0c;在各大招聘网站或者招聘软件上的今日头条兼职客服招聘就是其中之一。本文将详细揭露这种骗局的运作方式&#xff0c;以帮助大家识别和防…

对比WPF和Avalonia的边框渲染差异

众所周知&#xff0c;诸如Border、Rectangle等元素&#xff0c;是具有边框的。但在WPF和Avalonia中&#xff0c;边框的渲染机制有所不同。 如下代码&#xff0c;Border的边框和背景色均为黑色&#xff0c;并且将透明度设为0.5&#xff1a; <Border Width"100" H…

知了汇智携手数字经济商会,共促物联网鸿蒙产教融合新篇章

5月31日&#xff0c;由成都市数字经济商会主办&#xff0c;华为技术有限公司协办&#xff0c;成都知了汇智科技有限公司及成都市数字经济商会人才专委会共同承办的“产教融合物联网鸿蒙人才交流”大会在成都天府软件园产教融合基地隆重举办。 会议旨在加速四川省鸿蒙技术产业的…

Transformer详解(3-1)-attention为什么要除以根号d

attention的计算公式&#xff0c;为什么要除以根号d? 参考 NLP面试官&#xff1a;“Attention为什么要除以根号d” 算法女生这么回答当场想发 offer

【轻触按键】终篇 -- 纯硬 VS 复合

1、选型 2、开关机电路–填坑1 3、开关机电路–填坑1.a 4、开关机电路–复合芯片解决方案 填坑2 总结 上述几篇&#xff0c;基本上都是比较靠谱的硬件方案&#xff1b; ①所有开关均关闭&#xff1b; X1灯亮&#xff1b;P-MOS 管Q1关断&#xff1b; 特别注意&#xff0c;…

每日两题 / 34. 在排序数组中查找元素的第一个和最后一个位置 33. 搜索旋转排序数组(LeetCode热题100)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 根据二分函数&#xff0c;得到>target和<target的两个&#xff0c;分别是答案的l和r class Solution { public:vector<int> searchRange(vector<int>& nums,…