基于SpringBoot+Vue的平时成绩管理系统

news2024/12/23 18:07:47

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

在现代教育环境中,教师们需要有效地管理和评估学生的学习成果。然而,传统的手动成绩管理方式存在着许多问题,如繁琐的数据录入、容易出现错误和困难的数据分析。因此,开发一种学生平时成绩管理系统成为迫切的需求,以提供教师们一个高效、准确的成绩管理解决方案。之所以设计和开发一个学生平时成绩管理系统,是为了帮助教师轻松记录学生的各项成绩,并根据预先设定的打分规则进行自动计算和评估。通过该系统,教师们可以及时了解学生的学习进展,进行个性化的教育支持和决策,提高教学效果和学生学业成果。
首先,该系统可以大大提高成绩管理的效率和准确性,减少人为错误的发生,为教师节省时间和精力。其次,系统提供的实时反馈和监控功能有助于教师及时了解学生的学习状况,帮助他们制定有针对性的教学计划和个性化辅导方案。此外,通过系统记录的学生成绩数据和数据分析,教育管理部门可以更好地了解学校的教育质量和资源利用情况,优化教育资源的配置和分配,提高教育效益。最后,学生平时成绩管理系统的研究对于促进家校合作也具有积极意义,家长可以及时了解学生的学习状况,与教师共同关注学生的成长和发展。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
    Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘管理员信息表’(admin)

字段名类型默认值列注释
idbigintNULL主键
accountvarcharNULL账号
passwordvarcharNULL密码
admin_namevarcharNULL姓名
imgvarcharNULL头像
remarkvarcharNULL备注

2:‘班级信息表’(classes)

字段名类型默认值列注释
idbigintNULL主键
classes_namevarcharNULL班级名称
remarkvarcharNULL备注

3:‘课程信息表’(course)

字段名类型默认值列注释
idbigintNULL主键
course_namevarcharNULL课程名称
classes_idbigintNULL班级
teacher_idbigintNULL老师
remarkvarcharNULL备注

4:‘分数信息表’(score)

字段名类型默认值列注释
idbigintNULL主键
student_idbigintNULL学生
course_idbigintNULL课程
teacher_idbigintNULL老师
scoredecimalNULL分数
remarkvarcharNULL备注

5:‘分数详情表’(score_detail)

字段名类型默认值列注释
idbigintNULL主键
score_idbigintNULL总分
weight_info_detail_idbigintNULL权重详情
detail_scoredecimalNULL详细分数

6:‘学生信息表’(student)

字段名类型默认值列注释
idbigintNULL主键
accountvarcharNULL账号
passwordvarcharNULL密码
school_numbervarcharNULL学号
student_namevarcharNULL姓名
imgvarcharNULL头像
sextinyintNULL性别[0:男,1女]
addressvarcharNULL居住地址
phonevarcharNULL联系方式
birthdayvarcharNULL生日
classesbigintNULL班级
reamrkvarcharNULL备注

7:‘教师信息表’(teacher)

字段名类型默认值列注释
idbigintNULL主键
accountvarcharNULL账号
passwordvarcharNULL密码
teacher_namevarcharNULL姓名
imgvarcharNULL头像
sextinyintNULL性别[0:男,1女]
addressvarcharNULL居住地址
phonevarcharNULL联系方式
birthdayvarcharNULL生日
professional_titlevarcharNULL职称
reamrkvarcharNULL备注

8:‘权重信息表’(weight_info)

字段名类型默认值列注释
idbigintNULL主键
course_idbigintNULL课程
teacher_idbigintNULL老师

9:‘权重详情表’(weight_info_detail)

字段名类型默认值列注释
idbigintNULL主键
weight_info_idbigintNULL权重信息
projectvarcharNULL打分项目
weightbigintNULL所占权重
remarkvarcharNULL备注

五、功能模块:

  1. 管理员管理:管理员可以添加、编辑和删除系统管理员的账户信息。

    管理员管理

  2. 教师信息管理:管理员可以管理教师的个人信息,包括添加、编辑和删除教师账户。

    教师信息管理

  3. 学生信息管理:管理员可以管理学生的个人信息,包括添加、编辑和删除学生账户。

    学生信息管理

  4. 班级信息管理:管理员可以管理班级的信息,包括添加、编辑和删除班级。

    班级信息管理

  5. 课程信息管理:管理员可以管理课程的信息,包括添加、编辑和删除课程。

    课程信息管理

  6. 学生分数信息查看:管理员可以查看学生的分数信息,包括按照学生、课程或班级进行查询。

    学生分数信息查看

  7. 个人信息管理:教师可以管理自己的个人信息,包括修改密码和更新个人资料。学生可以管理自己的个人信息,包括修改密码和更新个人资料。

    个人信息管理

  8. 学生信息管理:教师可以管理学生的个人信息,包括查看学生列表和学生详情。

    学生信息管理

  9. 班级信息管理:教师可以管理班级的信息,包括查看班级列表和班级详情。

    班级信息管理

  10. 我的课程:教师可以查看自己所教授的课程信息,包括课程名称、上课时间等。

    我的课程

  11. 自动打分规则管理:教师可以设置自动打分规则,例如根据作业提交情况自动计算学生分数。

    自动打分规则管理

  12. 学生分数信息管理:教师可以录入和管理学生的分数信息。系统会根据打分规则自动进行计算打分。

    学生分数信息管理

  13. 我的分数信息查看:学生可以查看自己的分数信息,包括各门课程的分数和总分。

    我的分数信息查看

六、代码示例:

    /**
     * 生成验证码
     */
    @GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException
    {
        AjaxResult ajax = AjaxResult.success();
        boolean captchaEnabled = configService.selectCaptchaEnabled();
        ajax.put("captchaEnabled", captchaEnabled);
        if (!captchaEnabled)
        {
            return ajax;
        }

        // 保存验证码信息
        String uuid = IdUtils.simpleUUID();
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;

        String capStr = null, code = null;
        BufferedImage image = null;

        // 生成验证码
        String captchaType = RuoYiConfig.getCaptchaType();
        if ("math".equals(captchaType))
        {
            String capText = captchaProducerMath.createText();
            capStr = capText.substring(0, capText.lastIndexOf("@"));
            code = capText.substring(capText.lastIndexOf("@") + 1);
            image = captchaProducerMath.createImage(capStr);
        }
        else if ("char".equals(captchaType))
        {
            capStr = code = captchaProducer.createText();
            image = captchaProducer.createImage(capStr);
        }

        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
        // 转换流信息写出
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
        try
        {
            ImageIO.write(image, "jpg", os);
        }
        catch (IOException e)
        {
            return AjaxResult.error(e.getMessage());
        }

        ajax.put("uuid", uuid);
        ajax.put("img", Base64.encode(os.toByteArray()));
        return ajax;
    }
    /**
     * 通用的本地文件上传
     *
     * @param multipartFile 文件对象
     * @return 文件访问链接URL
     */
    @PostMapping("/file")
    public SimpleResponse uploadImg(@RequestParam("file") MultipartFile file) {
        // 文件后缀
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
        File savePathFile = new File(newTomcatFolder);
        if (!savePathFile.exists()) {
            // 若不存在该目录,则创建目录
            savePathFile.mkdir();
        }
        // 通过UUID生成唯一文件名
        String filename = UUID.randomUUID() + "." + suffix;
        try {
            // 将文件保存指定目录
            file.transferTo(new File(newTomcatFolder + filename));
        } catch (Exception e) {
            e.printStackTrace();
            return SimpleResponse.error("保存文件异常");
        }
        // 返回访问链接
        return SimpleResponse.success(newTomcatHost + filename);
    }
    /**
     * 用户登录
     */
    @PostMapping("/login")
    public ReturnMsg manageLogin(@RequestBody Map<String, String> param) {
        if (StrUtil.isEmpty(param.get("username")) || StrUtil.isEmpty(param.get("password"))) {
            return ReturnMsg.error("用户名或密码错误!");
        }
        ManageDTO manageDTO = new ManageDTO();
        manageDTO.setUserName(param.get("username"));
        manageDTO.setPassWord(param.get("password"));
        QueryWrapper<ManageDTO> manageDTOQueryWrapper = new QueryWrapper<>(manageDTO);
        manageDTOQueryWrapper.last("limit 1");
        ManageDTO adminDTOS = manageService.getOne(manageDTOQueryWrapper);
        if (adminDTOS == null) return ReturnMsg.error("用户名或密码错误!");
        Map<String, Object> map = new HashMap<>();
        map.put("avatar", StrUtil.isNotBlank(adminDTOS.getPhotoImg()) ? adminDTOS.getPhotoImg() : "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
        map.put("introduction", adminDTOS.getName() + ",你好!");
        map.put("name", adminDTOS.getName());
        map.put("roles", Arrays.asList("admin"));
        map.put("type", adminDTOS.getStatus());
        Map<String, String> returnMap = new HashMap<>();
        String uuid = UUID.randomUUID().toString();
        returnMap.put("token", uuid);
        userInfoMap.put(uuid, JSON.toJSONString(map));
        return ReturnMsg.ok(returnMap);
    }

七、论文参考:

论文参考···论文参考图

八、项目总结:

基于MVC的本科生平时成绩管理系统在系统功能上由管理员对学校的基本信息进行管理,这里的管理员可以看做学校的教务处对班级、教师、管理员、学生、课程等基本信息进行管理。而老师主要负责对自己名下的课程的评分规则进行管理通过录入学科的评分规则在后续录入具体分数从而达到自动评分的功能,学生在功能上只能查看修改自己的基本信息和查看自己的学习的课程的分数,在系统的最后通过测试功能能是否达到预期后最终得到了一个完整的平时成绩管理系统。
本文在第一章节介绍了基于MVC的本科生平时成绩管理系统的研究背景和意义然后紧接着介绍了本系统先如今的国内外研究现状。在第二章节介绍了系统开发上用到的一些关键技术。在第三章节中对系统开发的需求进行了分析,分别从业务背景、业务建模、系统角色分析、系统用例分析、非功能性需求五大分别来进行分析。在第四章节对系统进行了分析与设计其中包括系统功能的设计和数据库结构的设计。在第五章节主要介绍了系统核心功能的实现。在第六章章节对系统整体进行测试确保系统的功能是符合预期且是完善的。最后对本次开发过程进行总结并且对未来做成展望
系统的核心在与由教师录入自己所教课程的打分规则,打分规则不限定种类与数量,只需要打分总比和为100即可,然后在老师给学生进行打分的时候,系统会自动将对应课程的打分规则即打分项目与所占比重进行渲染,教师只需要在后面给与对应的评分即可,在教师录入各个打分项的具体分数以后系统会根据各个打分项所占的权重来进行计算,并且最后会同时保存各个打分项的分数与计算后的总分数,以便于后续的学生、管理员、老师来查看总分与打分详情。在查看分数的时候实习是查看的总分,但是如果需要查看详情也可在对应的分数上点击详情从而查看当前课程的打分项、打分项分数所占权重、当前学生的当前打分项所得分数。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

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

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

相关文章

2023全新微信公众号无限回调系统源码 亲测可用

2023年微信公众号无限回调全新升级&#xff0c;无限回调系统功能更强大&#xff0c;现已对接易支付&#xff0c;支持用户自助充值、购买授权、更换授权和续费授权。此次升级还增加了多项实用性功能&#xff0c;为公众号运营者提供更好的服务和支持。

使用Python中的Pandas工具将多个CSV格式的数据文件合并为一个

文章目录 使用软件安装Pandas工具编写py程序运行程序注意事项 使用软件 Pycharm 2020.1 安装Pandas工具 执行命令&#xff1a;pip install pandas 编写py程序 path&#xff1a;文件所处路径 import pandas as pd import os# 指定多个csv文件所在的目录 csv_dir path# 获…

LinkedHashSet源码

介绍 LinkedHashSet是HashSet的子类 LinkedHashSet底层是一个LinkedHashMap&#xff0c;底层维护了一个数组双向链表 LinkedHashSet根据元素的hashCOde值来决定元素的存储位置&#xff0c;同时使用链表维护元素的次序&#xff0c;这使元素看起来以插入顺序保存的 LinkedHas…

辅助驾驶功能开发-功能规范篇(27)-导航辅助驾驶NAP-微避障策略

1.微避障策略功能概述 微避障策略是在NAP功能激活过程中,当邻车道有大型车辆时(卡车、公交车、大巴等)或小车压线或左右侧靠近路沿时,控制本车进行横向偏移,达到远离目标车或路沿的效果。本文分别对大型车辆偏移、小车压线偏移、路沿偏移、Merge处理和偏移规划这五个部分展…

华为OD机试真题 JavaScript 实现【不爱施肥的小布】【2023Q1 100分】

一、题目描述 某农村主管理了一大片果园&#xff0c;fields[i]表示不同国林的面积&#xff0c;单位m2&#xff0c;现在要为所有的果林施肥且必须在n天之内完成&#xff0c;否则影响收成。小布是国林的工作人员&#xff0c;他每次选择一片果林进行施肥&#xff0c;且一片国林施…

Reinforce算法原理及Tensorflow代码实现

Q-learning和DQN算法都是强化学习中的Value-based的方法&#xff0c;它们都是先经过Q值来选择动作。强化学习中还有另一大类是策略梯度方法&#xff08;Policy Gradient Methods&#xff09;。Policy Gradient 是一类直接针对期望回报&#xff08;Expected Return&#xff09;通…

电气火灾监控系统如何有效的预防木材加工企业电气火灾隐患

摘要&#xff1a;本文分析了木材加工企业的特点、现状及常见电气火灾隐患&#xff0c;提出了消灭电气火灾隐患的措施。结尾介绍了木材加工企业常用电气设备的选用及电气火灾监控系统在其低压配电系统的应用方案及产品选型。 关键词&#xff1a;木材加工企业&#xff1b;电气火…

网络服务——DHCP服务

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。 个人主页&#xff1a;小李会科技的…

我和老刘又被搞惨了

前两天在调试PHY的时候遇到了一堆问题&#xff0c;老刘都不耐其烦的搞定了&#xff0c;这次我们开始调试音频部分&#xff0c;音频部分很简单&#xff0c;无非就是录音&#xff0c;要是能把录音的音频拿到了&#xff0c;那就万事大吉了。老刘也是信心满满&#xff0c;老刘对我说…

操作系统性能提升之内核锁优化

性能为王&#xff0c;系统的性能提升是每一个工程师的追求。目前&#xff0c;性能优化主要集中在消除系统软件堆栈中的低效率上或绕过高开销的系统操作。例如&#xff0c;内核旁路通过在用户空间中移动多个操作来实现这个目标&#xff0c;还有就是为某些类别的应用程序重构底层…

提升效率,从这款智能挂灯开始

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

华为项目经理就是CEO,华为对项目经理的要求是什么?

项目经理要向上发展&#xff0c;下面我们来看看华为对项目经理的要求。 原文出自&#xff1a;pmo前沿

太空大战-第14届蓝桥杯国赛Scratch真题中级组第6题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第148讲。 太空大战&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程中级组真题第6题&am…

Flume学习---3、自定义Interceptor、自定义Source、自定义Sink

1、自定义Interceptor 1、案例需求 使用 Flume 采集服务器本地日志&#xff0c;需要按照日志类型的不同&#xff0c;将不同种类的日志发往不同的分析系统。 2、需求分析 在实际的开发中&#xff0c;一台服务器产生的日志类型可能有很多种&#xff0c;不同类型的日志可能需要发…

【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例

1、微信接口说明&#xff1a; 2、调用示例 /*** 上传图文消息内的图片获取URL** param image* return*/PostMapping("uploadImg")public String uploadImg(MultipartFile image) {return wechatOpenService.uploadImg(image);}/*** 上传图文消息内的图片获取URL* htt…

css魔法:伪元素content内容竟然可以用css函数!

&#x1f33b; 前言 CSS 伪元素用于设置元素指定部分的样式。伪元素中 ::before 和 ::after 是最常用的&#xff0c;它们分别用于在dom元素前/后插入内容&#xff0c;本文内容就是关于 ::before 和 ::after 的 content 内容的一些冷门用法展开的。 一般我们在使用伪元素时&…

基于Java+jsp+servlet的养老院管理系统设计和实现《收藏版》

基于Javajspservlet的养老院管理系统设计和实现《收藏版》 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方…

大麦生成链接 大麦生成订单截图 抢票成功截图

一键生成购票链接 一键生成订单截图 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

微服务工程搭建过程中的注意点

1、父工程pom.xml文件 1&#xff1a;父工程的maven坐标&#xff1b; 2&#xff1a;packaging使用pom&#xff1b; 原因&#xff1a;在Spring Cloud微服务工程中&#xff0c;通常会采用多模块的方式进行开发&#xff0c;父工程的pom文件中的packaging标签设置为pom&#xff0c;是…

操作系统 | 知识梳理 | 复习(上)

目录 &#x1f4da;操作系统概述 &#x1f407;操作系统中的抽象概念 &#x1f4da;准备知识 &#x1f407;中断输入输出 &#x1f407;软件中断 &#x1f407;处理器特权级 &#x1f407;操作系统的结构 &#x1f4da;程序的结构 &#x1f407;运行时视图简介 &…