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

news/2024/7/7 23:20:07

✌全网粉丝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://lihuaxi.xjx100.cn/news/1235106.html

相关文章

Flink Table/Sql自定义Kudu Sink实战(其它Sink可参考)

目录 1. 背景2. 原理3. 通过Trino创建Kudu表4. FlinkKuduTableSinkProject项目4.1 pom.xml4.2 FlinkKuduTableSinkFactory.scala4.3 META-INF/services4.4 FlinkKuduTableSinkTest.scala测试文件 5. 查看Kudu表数据 1. 背景 使用第三方的org.apache.bahir flink-connector-ku…

GIS软件中网络分析的5种应用

什么是网络分析&#xff1f;几乎每个人都需要一个网络分析的类型在他们的生活中。 例如&#xff0c;去海滩的最短路线是什么&#xff1f;应该在哪里建一所医院来最好地服务一个社区&#xff1f;如何优化运输车队&#xff1f; 以下是5种最常见的网络分析类型&#xff1a;点对点…

调试CAN过滤器功能使用笔记

一.关于CAN过滤器的配置及使用 提示&#xff1a;此处使用的是雅特力的芯片&#xff08;基本兼容stm32的芯片&#xff09; 这里只讲32位宽的过滤器&#xff0c;16位的用法基本相同&#xff0c;注意因为位数减少数据不一样。 1.1首先过滤器有两种工作模式&#xff1a; 1.标识符…

如何让ChatGPT生成更有创意的内容?

相信大家用ChatGPT这么久了&#xff0c;应该不难发现它回复的答案是非常机械化的、仿佛一个没有感情的机器人。 用语文老师的话来讲就是“你阅读文章时完全没有感情”。 举个例子&#xff1a;如果你的家乡是云南大理&#xff0c;请你赞美一下你的家乡&#xff0c;ChatGPT一般…

国产openeuler22.03容器环境下固定容器IP的实例

Docker 中默认的容器网络为名为bridge的桥接网络&#xff0c;使用DHCP协议&#xff0c;不能固定容器IP&#xff0c;每次重启&#xff0c;容器的IP是按其启动顺序来分配的&#xff0c;单宿主机多容器时&#xff0c;容器的IP就会发生变化&#xff0c;不利于程序 连接及安全加固配…

习惯了VSCode的快捷键,如何让HbuilderX快捷键也和VSCode一样?

hbuilderX uni-app 自定义快捷键无效、无法生效解决方法&#xff08;附&#xff1a;好用的常用的快捷键自定义代码片段&#xff09;_你挚爱的强哥的博客-CSDN博客才能让原有默认的快捷键被覆盖。https://blog.csdn.net/qq_37860634/article/details/131161953

JVM图解

JVM图解 一、JVM的运行时数据区 概览JVM运行时数据区主要包括以下几个部分&#xff1a;程序计数器、虚拟机栈、本地方法栈、方法区、堆&#xff1b;其中 栈是运行时的单位&#xff0c;而堆是存储的单位&#xff01; 1.程序计数器 程序计数器可以看作是当前线程所执行的字节码…

基于SpringBoot+Vue的校园台球厅人员与设备管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…