【开源】基于Vue和SpringBoot的教学过程管理系统

news2024/9/23 7:27:26

在这里插入图片描述

项目编号: S 054 ,文末获取源码。 \color{red}{项目编号:S054,文末获取源码。} 项目编号:S054,文末获取源码。


目录

  • 一、摘要
    • 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. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

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

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

相关文章

【Java】线程池源码解析

目录 一、线程池介绍 1.1、什么是线程池 1.2、线程池的工作原理 二、Executor框架接口 2.1、JDK提供的原生线程池 2.2、类关系 三、线程池核心源码分析 3.1、关键属性 3.2、状态控制 3.3、线程池状态的跃迁 3.4、execute方法源码分析 3.5、addWorker方法源码分析 3…

【LeetCode刷题日志】232.用栈实现队列

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

quinn源码解析:QUIC数据包是如何发送的

quinn源码解析&#xff1a;QUIC数据包是如何发送的 简介QUIC协议中的概念endpoint&#xff08;端点&#xff09;connection&#xff08;连接&#xff09;Stream&#xff08;流&#xff09;Frame (帧) 发包过程解析SendStream::write_allConnectionDriverEndpointDriver 简介 q…

【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…

项目自动化构建工具——make/Makefile

目录 一、概念 二、使用实例 三、原理 四、进度条程序 1、缓冲区问题 1、概念 2、\r和\n 2、代码编写 一、概念 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先…

第五篇 《随机点名答题系统》——抽点答题详解(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)

目录 1.功能需求 2.界面设计 3.流程设计 4.关键代码 随机点名答题系统&#xff08;类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统&#xff09;&#xff0c;是基于php&#xff08;8.2.11&#xff09;&#xff0c;Java…

迪克森电荷泵

迪克森电荷泵&#xff08;Dickson Charge Pump&#xff09;是一种电压倍增器电路&#xff0c;可以将低电压升高到较高电压&#xff0c;相对于其他电压升压电路&#xff0c;迪克森电荷泵具有较高的效率和较简单的电路结构。该电路的基本原理是通过电容和开关来实现电荷的积累和转…

上海亚商投顾:三大指数小幅上涨 HBM概念股全天强势

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数早盘窄幅震荡&#xff0c;午后集体拉升翻红&#xff0c;黄白二线走势分化&#xff0c;题材热点快速轮…

计算两个向量的叉积numpy.cross()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算两个向量的叉积 numpy.cross() [太阳]选择题 请问代码中最后输出正确的是&#xff1f; import numpy as np a np.array([1, 2, 3]) b np.array([4, 5, 6]) c np.cross(a, b) pri…

C#,数值计算——插值和外推,Laplace_interp的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Object for interpolating missing data in a matrix by solving Laplaces /// equation.Call constructor once, then solve one or more times /// </summary> …

初刷leetcode题目(3)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

Go语言常用命令详解(二)

文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…

《数字图像处理-OpenCV/Python》连载(44)图像的投影变换

《数字图像处理-OpenCV/Python》连载&#xff08;44&#xff09;图像的投影变换 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第 6 章 图像的几何变换 几何变…

应用开发平台集成表单设计器系列之3——整体集成思路及表单设计器功能深度了解

背景 平台需要实现自定义表单功能&#xff0c;作为低代码开发的一部分&#xff0c;通过技术预研和技术选型&#xff0c;选择form-create和form-create-designer这两个组件进行集成作为实现方案。通过深入了解和技术验证&#xff0c;确认了组件的功能能满足需求&#xff0c;具备…

移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS

目录 1 图搜索基础 1.1 机器人规划的配置空间 Configuration Space 1.2 图搜索算法的基本概念 1.3 启发式的搜索算法 Heuristic search 2 A* Dijkstra算法 2.1 Dijkstra算法 2.2 A*&&Weighted A*算法 2.3 A* 算法的工程实践中的应用 3 JPS 1 图搜索基础 1.1…

V100 GPU服务器安装GPU驱动教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

计算机网络——物理层-信道的极限容量(奈奎斯特公式、香农公式)

目录 介绍 奈氏准则 香农公式 介绍 信号在传输过程中&#xff0c;会受到各种因素的影响。 如图所示&#xff0c;这是一个数字信号。 当它通过实际的信道后&#xff0c;波形会产生失真&#xff1b;当失真不严重时&#xff0c;在输出端还可根据已失真的波形还原出发送的码元…

JVM垃圾回收相关概念

目录 一、System.gc()的理解 二、内存溢出与内存泄露 &#xff08;一&#xff09;OOM &#xff08;二&#xff09;内存泄露 三、StopTheWorld 四、垃圾回收的并行与并发 五、安全点与安全区域 &#xff08;一&#xff09;安全点 &#xff08;二&#xff09;安全区域 …

数据结构【DS】树与二叉树的应用

哈夫曼树 树的带权路径长度最小的二叉树WPL 路径长度【边数】 * 结点权值n个叶结点的哈夫曼树共有 2n-1 个结点 哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树对同一组权值&#xff0c;可能存在不同构的多棵哈夫曼树&#xff0c;但树的带权路径长度最小且唯一哈夫曼树…

C/C++高精度

个人主页&#xff1a;仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏&#xff1a;算法_仍有未知等待探索的博客-CSDN博客 为什么需要高精度算法&#xff1f; 由于c不能进行位数过高的数据运算&#xff0c;所以要通过模拟数组来进行运算&#xff0c;首先是加法。…