Java实现教学过程管理系统 JAVA+Vue+SpringBoot+MySQL

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 教师端
    • 2.2 学生端
    • 2.3 微信小程序端
      • 2.3.1 教师功能如下
      • 2.3.2 学生功能如下
    • 三、系统展示
  • 四、核心代码
    • 4.1 查询签到
    • 4.2 签到
    • 4.3 查询任务
    • 4.4 查询课程
    • 4.5 生成课程成绩
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的教学过程管理系统,包含了课程档案、课程题目、课程成绩、消息通知、课堂签到、课堂任务模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,教学过程管理系统基于角色的访问控制,给高校管理员、教师、学生角色使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

大学生的课程评价有多个维度,除了期末考试,还有平时成绩。其中平时成绩包括签到考勤、作业、课堂表现、阶段测试、期中测试等等。本课题旨在帮助教师更好的进行教学过程管理,对每位学生的平时表现进行记录汇总,并及时的在线答疑。

1.2 项目录屏


二、功能模块

2.1 教师端

  1. 签到功能:老师发布签到任务,学生在规定时间内完成签到。
  2. 任务发布:老师可以向同学们发布任务,包括考试、测试、作业等,任务可以限时,同学们在规定的时间内完成。
  3. 作业批改:老师可以在线批改作业,客观题可以由系统批阅,主观题老师可以在线批阅。
  4. 消息发送:老师可以发送消息给学生,方便和学生沟通。
  5. 成绩管理:管理学生的平时成绩,可以给学生的各项成绩设置分数比例。
  6. 课程管理:老师可以增加删除课程,也可以修改课程。
  7. 成绩统计:统计学生成绩,老帅可以查看学生的成绩并导出。

2.2 学生端

  1. 课程查看(学生查看个人所选全部课程)。
  2. 选课(学生可以选课)。
  3. 在线考试(学生可以在某门课下进行在线考试)。
  4. 通知查看(可以查看系统消息通知,消息由老师发送的或者由系统发送)。
  5. 签到(可以查看个人所有已签到,所有末签到,能够进行点击签到)。
  6. 个人信息管理(能够查看个人详细信息,修改详细信息)。
  7. 客观题自动批改(客观题系统能够直接批改)。

2.3 微信小程序端

小程序主要包括教师和学生两种用户。

2.3.1 教师功能如下

  1. 用户登录功能:点击登录,填写姓名,选择社会身份,如教师,学生,然后填写所属学校进行登录。
  2. 个人中心功能:可以查看个人信息,如姓名,身份,院校。
  3. 消息中心功能:可以接受发送消息。
  4. 课程管理功能:可以查看学生的签到情况,作业完成情况,测试情况,考试分数情况,课程整体分数,班级整体情况。

2.3.2 学生功能如下

  1. 用户登录功能:点击登录,填写姓名,选择社会身份,如学生,教师,然后填写所属学校进行登录。
  2. 个人中心功能:可以查看个人信息,如姓名,身份,院校,学号。
  3. 消息中心功能:对学生进行提醒,如签到,作业截止之前进行提醒,测试,考试临近开始进行提醒。
  4. 在线答题功能:可以在线考试,测试,完成作业。
  5. 课程查看功能:可以查看个人作业,测试,考试的完成情况。
  6. 习题集功能:可以创建错题本,收藏题目。

三、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、核心代码

4.1 查询签到

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询签到")
public Result<IPage<Sign>> getByPage(@ModelAttribute Sign sign ,@ModelAttribute PageVo page){
    QueryWrapper<Sign> qw = new QueryWrapper<>();
    User currUser = securityUtil.getCurrUser();
    if(!ZwzNullUtils.isNull(sign.getTitle())) {
        qw.like("title",sign.getTitle());
    }
    if(!ZwzNullUtils.isNull(sign.getSendUser())) {
        qw.like("send_user",sign.getSendUser());
    }
    IPage<Sign> data = iSignService.page(PageUtil.initMpPage(page),qw);
    for (Sign s : data.getRecords()) {
        QueryWrapper<SignItem> itemQw = new QueryWrapper<>();
        itemQw.eq("user_id",currUser.getId());
        itemQw.eq("sign_id",s.getId());
        s.setSignNumber(iSignItemService.count(itemQw));
    }
    return new ResultUtil<IPage<Sign>>().setData(data);
}

4.2 签到

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "添加单条签到数据")
public Result<SignItem> addOne(@RequestParam String id){
    Sign sign = iSignService.getById(id);
    if(sign == null) {
        return ResultUtil.error("签到不存在");
    }
    User currUser = securityUtil.getCurrUser();
    SignItem si = new SignItem();
    si.setSignId(sign.getId());
    si.setTitle(sign.getTitle());
    si.setContent(sign.getContent());
    si.setDate(sign.getDate());
    si.setUserId(currUser.getId());
    si.setUserName(currUser.getNickname());
    si.setTime(DateUtil.now());
    iSignItemService.saveOrUpdate(si);
    return ResultUtil.success();
}

4.3 查询任务

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询任务")
public Result<IPage<Task>> getByPage(@ModelAttribute Task task ,@ModelAttribute PageVo page){
    QueryWrapper<Task> qw = new QueryWrapper<>();
    User currUser = securityUtil.getCurrUser();
    if(!ZwzNullUtils.isNull(task.getTitle())) {
        qw.like("title",task.getTitle());
    }
    if(!ZwzNullUtils.isNull(task.getSendUser())) {
        qw.like("send_user",task.getSendUser());
    }
    IPage<Task> data = iTaskService.page(PageUtil.initMpPage(page),qw);
    for (Task t : data.getRecords()) {
        QueryWrapper<TaskItem> itemQw = new QueryWrapper<>();
        itemQw.eq("user_id",currUser.getId());
        itemQw.eq("task_id",t.getId());
        t.setTaskNumber(iTaskItemService.count(itemQw));
    }
    return new ResultUtil<IPage<Task>>().setData(data);
}

4.4 查询课程

@RequestMapping(value = "/getAllApp", method = RequestMethod.GET)
@ApiOperation(value = "查询全部课程")
public Result<List<Curriculum>> getAllApp(){
    List<Curriculum> curriculumList = iCurriculumService.list();
    for (Curriculum curriculum : curriculumList) {
        QueryWrapper<Achievement> aQw = new QueryWrapper<>();
        aQw.eq("curriculum_id",curriculum.getId());
        List<Achievement> achievementList = iAchievementService.list(aQw);
        String str = "";
        for (Achievement a : achievementList) {
            str += a.getUserName() + ":" + a.getGrade() + "分; ";
        }
        curriculum.setQues(str);
    }
    return new ResultUtil<List<Curriculum>>().setData(curriculumList);
}

4.5 生成课程成绩

@RequestMapping(value = "/create", method = RequestMethod.GET)
@ApiOperation(value = "生成课程成绩")
public Result<Object> create(@RequestParam String id){
    Curriculum curriculum = iCurriculumService.getById(id);
    if(curriculum == null) {
        return ResultUtil.error("课程不存在");
    }
    List<User> userList = iUserService.list();
    QueryWrapper<Achievement> aQw = new QueryWrapper<>();
    aQw.eq("curriculum_id",curriculum.getId());
    iAchievementService.remove(aQw);
    for (User user : userList) {
        Achievement a = new Achievement();
        a.setUserId(user.getId());
        a.setUserName(user.getNickname());
        a.setCurriculumId(curriculum.getId());
        a.setCurriculumName(curriculum.getTitle());
        a.setQues(curriculum.getQues());
        a.setQuesAns("");
        a.setGrade(BigDecimal.ZERO);
        a.setGrade1(BigDecimal.ZERO);
        a.setGrade2(BigDecimal.ZERO);
        a.setTime("");
        iAchievementService.saveOrUpdate(a);
    }
    return ResultUtil.success();
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

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

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

相关文章

2023:AI疯狂进化年

嘿&#xff0c;大家好&#xff01;让我们一起来回顾一下这疯狂的 2023 年吧&#xff01;记得那个二月初吗&#xff1f;ChatGPT 上线了&#xff0c;然后呢&#xff1f;短短两个月&#xff0c;用户数量就像火箭一样突破了 1 亿&#xff01;这速度&#xff0c;简直比超级赛亚人还快…

设置打印机

一、打开控制面板的设备和打印机选项 二、点击其中的添加打印机选项 三、点我所需的打印机未列出 四、使用IP地址或主机名添加打印机 五、输入IP

python将Word页面纸张方向设置为横向

通过python-docx的章节属性&#xff0c;就可以更改纸张方向、纸张尺寸。 import docx from docx.enum.section import WD_ORIENT from docx.shared import Cmdocument docx.Document() section document.sections[0]# 设置纸张大小为A4大小 section.page_width Cm(21) sect…

稳压二极管应用电路

稳压二极管比较特殊&#xff0c;基本结构与普通二极管一样&#xff0c;也有一个PN结。由于制造工艺的不同&#xff0c;当这种PN结处于反向击穿状态时&#xff0c;PN结不会损坏(普通二极管的PN结是会损坏)&#xff0c;在稳压二极管用来稳定电压时就是利用它的这一击穿特性。 由…

泰克示波器(TBS2000系列)数学运算功能使用

目录 1 数学运算菜单1.1 运算符选择1.2 信源选择1.3 数学运算结果 1 数学运算菜单 Math运算按钮&#xff0c;用于实现对两个通道的信号进行实时的“加、减、乘”运算&#xff0c;计算时信源1在前面&#xff0c;信源2在运算符的右边&#xff0c;设置时设置信源与运算符就行了。…

请查收,你的2023京东零售技术年度好文

新春佳节&#xff0c;万象更新&#xff01;京东零售技术在2023年度发布文章内容145篇&#xff0c;全年阅读量超过20万次&#xff5e;衷心感谢每一位读者一直以来的关注和支持。 在新春到来之际&#xff0c;我们精选年度好文分享给大家&#xff0c;希望大家温故知新&#xff0c…

HarmonyOS 鸿蒙应用开发(十、第三方开源js库移植适配指南)

在前端和nodejs的世界里&#xff0c;有很多开源的js库&#xff0c;通过npm(NodeJS包管理和分发工具)可以安装使用众多的开源软件包。但是由于OpenHarmony开发框架中的API不完全兼容V8运行时的Build-In API&#xff0c;因此三方js库大都需要适配下才能用。 移植前准备 建议在适…

bert+np.memap+faiss文本相似度匹配 topN

目录 任务 代码 结果说明 任务 使用 bert-base-chinese 预训练模型将文本数据向量化后&#xff0c;使用 np.memap 进行保存&#xff0c;再使用 faiss 进行相似度匹配出每个文本与它最相似的 topN 此篇文章使用了地址数据&#xff0c;目的是为了跑通这个流程&#xff0c;数…

DoWhy:Python 中的因果推断库

DoWhy&#xff1a;Python 中的因果推断库 DoWhy 是一个强大的 Python 库&#xff0c;用于因果推断和因果推断分析。本文将介绍 DoWhy 的基本概念、主要功能和使用方法&#xff0c;帮助读者了解如何利用该库进行因果推断&#xff0c;并解决因果关系的相关问题。 什么是DoWhy&…

AI-数学-高中-24-三角函数一般形式的各参数含义

原作者视频&#xff1a;三角函数】12三角函数一般形式的各参数含义&#xff08;易&#xff09;_哔哩哔哩_bilibili 1.函数中的A标识符&#xff1a;表示曲线中间平衡位置的振幅&#xff0c;值域为正负A&#xff1a;[-A,A]。 2.函数中的B标识符&#xff1a;决定曲线纵向上下平移…

python实现中国剩余定理

中国剩余定理又称孙子定理&#xff0c;是数论中一个重要定理。最早可见于我国的数学著作《孙子算经》卷下“物不知数”问题&#xff0c;原文如下&#xff1a; 有物不知其数&#xff0c;三三数之剩二&#xff0c;五五数之剩三&#xff0c;七七数之剩二。问物几何&#xff1f;即…

一步步建立一个C#项目(连续读取S7-1200PLC数据)

这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来…

Linux文件和目录管理

目录基础 Linux操作系统以目录的方式来组织和管理系统中的所有文件。所谓的目录&#xff0c;就是将所有文件的说明信息采用树状结构组织起来。每个目录节点之下会有文件和子目录。 所有一切都从 ‘根’ 开始&#xff0c;用 ‘/’ 代表, 并且延伸到子目录。 bin&#xff1a;B…

《MySQL 简易速速上手小册》第2章:数据库设计最佳实践(2024 最新版)

文章目录 2.1 规划高效的数据库架构2.1.1 基础知识2.1.2 重点案例2.1.3 拓展案例 2.2 数据类型和表设计2.2.1 基础知识2.2.2 重点案例2.2.3 拓展案例 2.3 索引设计原则2.3.1 基础知识2.3.2 重点案例2.3.3 拓展案例 2.1 规划高效的数据库架构 在开启我们的数据库设计之旅之前&a…

240207-3步设置VSCode插件Inline-Bookmarks自定义颜色及名称

Step 1: 插件安装 Step 2: 配置文件 "inline-bookmarks.expert.custom.styles": {"default": {"gutterIconColor": "#157EFB","overviewRulerColor": "rgba(21, 126, 251, 0.7)","light": {"fontW…

【C++从0到王者】第四十二站:类型转换

文章目录 一、 C语言中的类型转换1. C语言中的类型转换2.一个常见的坑 二、为什么C需要四种类型转换三、C强制类型转换1.static_cast2.reinterpret_cast3.const_cast4.dynamic_cast 四、RTTI 一、 C语言中的类型转换 1. C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符…

MOS管防反接电路设计

电子元件大都是使用直流工作&#xff0c;电源线反接就有可能就会烧坏&#xff0c;那电路如何防反接&#xff1f;首当其冲我们想到的就是二极管了&#xff0c;运用其单向导通特性可有效防止电源反接而损坏电路&#xff0c;但是随之而来的问题是二极管存在PN节电压&#xff0c;通…

【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)

目录 1 -> 再谈构造函数1.1 -> 构造函数体赋值1.2 -> 初始化列表1.3 -> explicit关键字 2 -> static成员2.1 -> 概念2.2 -> 特性 3 -> 友元3.1 -> 友元函数3.2 -> 友元类 4 -> 内部类5 -> 匿名对象6 -> 拷贝对象时的一些编译器优化 1 -…

Three.js学习7:dat.GUI 参数控制

每个学 Three.js 的都被安利了 dat.GUI 吧&#xff1f; 我也不例外&#xff01; 今天就来了学习下 dat.GUI&#xff0c;并记录下来自己的学习成果。 一、什么是 dat.GUI? dat.GUI 是一个轻量级的图形用户界面库&#xff08;GUI 组件&#xff09;&#xff0c;使用这个库可以…

进程状态 | 僵尸进程 | 孤儿进程 | 前台后台进程 | 守护进程

文章目录 1.进程的三种基本状态2.Linux中进程状态查看2.1.进程检测脚本2.2.各种状态查看 3.孤儿进程4.前台、后台、守护进程 1.进程的三种基本状态 进程的在系统当中是走走停停的&#xff0c;「运行 - 暂停 - 运行」的活动规律&#xff1b;进程在活动期间的三种状态&#xff1…