基于SpringBoot的在线考试管理系统设计与实现
题 目:
基于SpringBoot的在线考试管理系统设计与实现
学生专业:
辅助教师:
摘 要
随着教育信息化进程持续推进,高校课程考核方式逐步由传统纸笔模式向网络化、过程化和数据化转变。纸质考试在长期教学实践中形成了相对固定的组织流程,但在题库维护、试卷生成、批改统计、结果追踪和错题反馈等环节仍主要依赖人工处理。课程规模扩大、考试频次增加后,人工处理方式在效率、准确性和持续管理方面的局限进一步显现。教师需要投入时间完成命题、阅卷、试卷整理、成绩录入和错题归档等工作,考试数据也难以持续沉淀。
针对课程考试管理中的实际需求,本文设计并实现了一套基于 Spring Boot 的在线考试管理系统。系统采用前后端分离架构,后端以 Spring Boot 2.7.18 为核心框架,结合 Spring Security、JWT、MyBatis-Plus、Fastjson2 和 Apache POI 等组件完成认证授权、业务处理、数据持久化和成绩导出等功能;前端以 Vue3、Vite、Element Plus、Vue Router、Pinia、Axios 与 ECharts 为主要技术基础,承担页面交互、状态管理与可视化展示任务。系统实现了用户认证与权限控制、题库管理、试卷管理、规则型智能组卷、在线考试、客观题自动判分、主观题人工批改、成绩统计分析、错题本管理以及个人信息维护等核心功能。
系统分析与设计部分从课程考试业务出发,对角色边界、功能结构、业务流程、权限控制和数据库模型进行梳理;系统实现部分结合程序运行过程,对登录认证、题目筛选、试卷生成、考试记录保存、自动评分、错题归集、人工批改、统计分析以及 Excel 成绩导出等关键环节进行说明。文中页面截图、统计结果和错题记录均来源于系统实际运行过程,对应数据由系统运行生成。
测试数据显示,本系统能够覆盖课程考试的主要业务链路。教师可以基于题库组织试卷并发布考试,学生能够在线作答并形成考试记录,系统可自动完成客观题评分和错题归集,教师可继续对主观题进行人工评分,并据此生成成绩统计结果和导出成绩单。系统在功能完整性、流程连贯性和教学适用性方面达到预期目标,也为后续完善考试监管与学习分析功能提供了基础。
关键词:SpringBoot;Vue3;在线考试;智能组卷;主观题批改;错题本
Abstract
With the continuous development of educational informatization, course examination management in universities is gradually moving from paper-based operation to online and data-driven organization. Traditional examinations are still common, but they often suffer from low efficiency in question maintenance, paper generation, grading statistics, result tracking and wrong-question feedback.
To address these problems, this thesis designs and implements an online examination management system based on Spring Boot. The back end is built with Spring Boot, Spring Security, JWT and MyBatis-Plus, while the front end is developed with Vue3, Vite, Element Plus, Axios, Pinia and ECharts. The system supports user authentication, question bank management, paper management, rule-based paper generation, online examination, automatic scoring, manual grading for subjective questions, score statistics, wrong-question management and personal information maintenance.
The analysis and design part of this thesis discusses role boundaries, functional structure, business process, permission control and database model. The implementation part explains key procedures such as login authentication, question filtering, paper generation, examination record saving, automatic scoring, wrong-question collection, manual grading, statistical analysis and Excel export based on actual system execution.
The testing results show that the system can cover the key workflow of online examination management in a relatively complete and stable way. Therefore, the system has practical value for course-oriented examination scenarios and also provides a basis for further expansion.
Key words: Spring Boot; Vue3; Online Examination; Paper Generation; Manual Grading; Wrong Question Book
目 录
摘要I
AbstractII
第1章 绪论1
1.1 研究背景1
1.2 研究意义1
1.3 国内外研究现状2
1.4 研究内容与论文结构2
第2章 需求分析3
2.1 业务场景分析3
2.2 可行性分析3
2.3 功能需求分析3
2.4 用例分析4
2.5 非功能需求分析5
第3章 系统总体设计6
3.1 设计目标与设计原则6
3.2 技术路线选择6
3.3 系统架构设计7
3.4 功能模块划分7
3.5 权限与菜单设计8
3.6 智能组卷与业务流程设计9
3.7 安全与异常处理设计10
第4章 数据库设计11
4.1 概念结构设计11
4.2 逻辑结构设计12
4.3 关键数据表分析12
4.4 数据完整性与约束设计15
第5章 系统详细实现16
5.1 开发环境与项目结构实现16
5.2 用户认证与权限控制实现16
5.2.1 登录认证流程16
5.2.2 权限控制实现18
5.3 管理员用户管理实现18
5.4 题库管理实现18
5.4.1 题目查询与维护18
5.4.2 题目结构设计19
5.5 试卷管理与智能组卷实现19
5.5.1 试卷组织方式19
5.5.2 智能组卷逻辑20
5.6 考试管理在线答题与自动评分实现21
5.6.1 考试发布与开始控制21
5.6.2 自动评分与记录写入23
5.7 主观题批改实现23
5.7.1 批改数据加载23
5.7.2 批改结果回写24
5.8 成绩统计与导出实现25
5.8.1 统计指标计算25
5.8.2 成绩导出实现25
5.9 错题本与个人中心实现25
5.9.1 错题记录生成25
5.9.2 错题反馈作用26
5.10 关键实现细节分析27
第6章 系统测试28
6.1 测试环境与测试思路28
6.2 测试数据准备28
6.2.1 业务链路验证29
6.3 现有不足与改进方向29
6.3.1 后续改进方向29
第7章 总结与展望31
7.1 研究总结31
7.2 后续展望31
参考文献32
致 谢33
第1章 绪论
1.1 研究背景
在高校日常教学运行中,课程考试是课程评价和教学反馈的重要环节。一次考试的组织过程通常涉及命题、审题、组卷、监考、阅卷、录分、归档和结果分析等多项工作。传统考试主要依赖纸笔和人工处理,流程相对固定,但难以适应课程考核高频化、规范化和信息化的发展要求。
传统纸质考试的局限主要体现在流程数据难以沉淀和复用。教师命题时需要反复查找既有资料,试卷难度均衡性和知识点覆盖情况较多依赖个人经验;考试结束后,成绩虽然可以统计,但学生错误集中位置、知识点失分分布和后续复习依据往往缺少系统整理。因此,纸质考试能够完成单次考核任务,却难以将考核结果继续转化为教学调整和学生复习的依据。
在教育信息化持续推进的背景下,在线考试系统逐渐成为高校课程管理的重要组成部分。该类系统的价值并不限于将答题方式由纸面迁移到屏幕,更在于将题库资源、试卷结构、作答记录、评分结果和错题反馈串联起来,使分散的考试流程转化为可追踪、可统计、可复用的数据链。该转变对于提升教学管理效率和改进学生复习方式具有现实意义[15]。
从本课题的系统功能看,考试管理不仅包括在线答题,还包括题目前期建设、试卷自动生成、考试过程记录、成绩统计和错题训练等连续环节。题库中的课程、难度和知识点标签为组卷提供了可计算的筛选条件;错题记录和掌握状态则把考试结果延伸到复习阶段,使系统具备持续反馈能力。
1.2 研究意义
从教师工作角度看,在线考试系统能够将重复性事务从人工处理中分离出来。题库建立后,教师在后续命题和组卷时不必每次从零开始,考试结束后也可以及时获得成绩分布、及格率和错题情况等结果。考试由单次评价节点转化为教学效果分析的数据来源,有助于教师将更多精力投入教学内容与教学改进。
从学生学习角度看,仅提供总分的考试结果信息量有限。学生虽然能够了解整体成绩水平,但不易判断错误集中位置、失分原因以及需要重点复习的知识点。在线考试系统保存答题记录和错题信息后,学生可以在考后查看错误答案、正确答案和题目解析,从而将考试结果转化为具有针对性的复习依据。
从毕业设计选题角度看,该课题具有较强的工程实践意义。一方面,课题以可运行系统实现为目标,需要围绕真实业务完成需求、设计、实现和测试的全过程;另一方面,系统包含鉴权控制、流程状态管理、数据统计和前后端协作等常见 Web 开发问题,能够较全面地体现信息管理系统的开发过程。
从系统建设角度看,本课题具有综合训练价值。在线考试管理系统既包含用户、表单、分页和权限控制等一般管理系统功能,也涉及考试状态、试卷题目映射、自动评分、主观题批改和错题归集等具有业务约束的逻辑。围绕这些问题展开设计,可以体现 Web 应用从需求分析、功能实现到测试验证的完整过程。
1.3 国内外研究现状
国外高校和在线学习平台较早将学习管理系统与在线测评工具结合起来,强调课程资源、作业、测试、讨论和学习记录之间的协同管理。以常见学习平台为例,测验模块通常能够支持题库复用、随机抽题、成绩反馈和学习过程记录,考试功能不再是孤立页面,而是教学支持体系中的一个环节[14]。
国内在线考试系统的研究与应用同样发展较快,尤其在公共课、大班课和线上教学场景中应用较普遍。相关系统普遍能够完成登录、题库维护、在线作答和成绩查询等基础功能,但在中小型课程项目中,组卷规则、主观题批改衔接、错题训练和个人信息维护等环节仍容易被简化处理。
因此,面向课程实际教学过程设计一套结构清晰、模块完整、运行稳定的在线考试管理系统,仍然具有现实意义。本文关注的重点不是界面数量的堆叠,而是围绕题库标签化、规则约束组卷、在线作答、自动评分、人工批改、成绩统计、错题收集训练和个人信息维护等环节,形成能够运行和验证的完整业务链路。
1.4 研究内容与论文结构
围绕在线考试这一业务链,研究工作主要包括四个方面:其一,结合管理员、教师和学生三类角色的使用场景,对系统需求进行梳理,并明确功能边界;其二,从总体架构、权限控制和数据库设计三个层面完成系统设计;其三,基于 Spring Boot 与 Vue3 实现题库管理、试卷管理、在线考试、自动评分、人工批改、成绩统计和错题本等模块;其四,基于系统运行数据对系统进行测试,并结合测试结果分析系统实现效果。
论文结构安排如下:第一章为绪论,介绍研究背景、意义和研究现状;第二章进行系统需求分析;第三章给出系统总体设计;第四章展开数据库设计;第五章说明系统详细实现;第六章展示测试过程与结果;第七章对全文进行总结,并提出后续改进方向。
第2章 需求分析
2.1 业务场景分析
在线考试系统需求分析应从课程考试的组织流程出发,而不能仅停留在页面功能层面。课程考试并非若干功能按钮的机械组合,而是一条由题库、试卷、考试、评分、统计和反馈构成的连续业务链。只有明确该业务链的前后关系,后续系统设计才能保持结构一致性。
从管理员、教师和学生三类角色的协同关系看,系统需要同时满足静态管理需求和动态流程需求。静态管理需求主要包括用户、题目和试卷等基础数据维护;动态流程需求则包括考试开始状态、答卷提交状态、主观题批改状态和错题掌握状态等业务推进规则。前者强调信息完整性,后者强调流程连贯性。
基于上述分析,本系统将考试视为连接题库、试卷、考试记录、统计分析和错题反馈的业务中心。题库为试卷提供题目来源,试卷为考试提供内容基础,考试生成作答记录和错题结果,成绩统计与复习反馈则建立在这些数据之上。因此,系统设计需要围绕完整业务链路展开。
2.2 可行性分析
技术可行性方面,Spring Boot、Vue3、Element Plus、MyBatis-Plus 和 MySQL 均具有成熟的开发生态,能够满足课程项目中登录鉴权、数据管理和页面交互等需求。相关框架资料完备、工具链稳定,适合作为本系统的技术实现基础。
经济可行性方面,系统所使用的框架和工具均来自开源技术栈,开发和部署成本可控,不依赖商业中间件或专有数据库。对于毕业设计项目而言,该方案可以在普通个人计算机环境下完成开发、调试和展示,具备实施可行性。
操作可行性方面,系统主要面向课程考试管理场景,界面入口、表单填写和结果反馈需保持清晰一致。当前系统按照角色动态展示菜单,管理员、教师和学生登录后可进入对应功能区域,符合课程考试场景中的基本使用习惯。
2.3 功能需求分析
结合任务书要求与程序实现情况,系统功能可归纳为用户认证与权限管理、管理员用户管理、题库管理、试卷管理与智能组卷、考试管理、在线答题、主观题批改、成绩统计分析以及错题本和个人中心维护九个部分。该划分覆盖考试管理的主要环节,并使不同模块之间保持明确的职责边界。
从业务流程看,题库管理、试卷管理和考试管理属于考试前准备阶段;在线答题、自动评分和主观题批改属于考试执行与评分阶段;成绩统计和错题本属于考试后反馈阶段。三类阶段之间存在明确的前后依赖关系,考试前准备影响考试执行稳定性,考试记录完整性则决定考试后分析结果的可信度。
从角色分工看,管理员主要处理平台基础管理,教师重点关注考试组织与结果分析,学生关注个人作答过程和考后复习反馈。因此,需求分析不仅需要列出功能项目,还需要明确各项功能的使用主体、使用场景及其与其他模块之间的依赖关系。
表2-1 系统角色与核心功能对应关系
角色
核心功能
使用目的
管理员
查看用户列表、修改角色、启用或禁用账号、删除账号
保证基础数据和系统使用秩序
教师
维护题目、创建试卷、发布考试、批改主观题、查看统计并导出成绩
完成考试组织和结果分析
学生
查看考试、在线答题、提交试卷、查看记录、复习错题、维护个人信息
完成考试并获得学习反馈
2.4 用例分析
需求进一步细化时,需要将主要操作抽象为具体业务用例。通过用例分析,可以将抽象功能要求落实到实际操作路径中,从而判断系统是否覆盖考试场景中的关键行为。
学生角色的典型用例包括登录系统、查看待参加考试、开始答题、提交试卷、查看考试记录、访问错题本和修改个人信息。学生提交答卷并不意味着业务流程结束,系统还需要通过成绩记录和错题反馈支撑后续复习。
管理员角色的用例相对集中,主要承担系统入口和账号状态维护职责。若账号状态、角色分配和用户信息管理不规范,系统权限控制与后续考试业务均会受到影响。因此,管理员功能属于保障系统正常运行的基础模块。
表2-2 典型业务用例说明
角色
用例名称
前置条件
结果
教师
创建试卷
已登录且题库中存在可选题目
生成试卷数据并保存题目分值配置
教师
发布考试
已存在试卷且填写考试时间
考试信息写入数据库并进入待开始状态
学生
提交试卷
考试已开始且学生已进入答题页面
系统保存作答记录并完成自动判分
教师
批改主观题
存在待批改考试记录
更新主观题得分并形成最终成绩
学生
查看错题本
至少存在一条错题记录
系统展示错误答案、正确答案与掌握状态
2.5 非功能需求分析
非功能需求并非都直接体现为页面按钮,但会影响系统整体质量。在线考试系统涉及账号信息、答题记录和成绩数据,若缺少安全保障和流程稳定性,即使页面功能完整,也难以支撑实际考试场景。因此,安全性、可维护性、可用性和响应性是系统设计中需要重点考虑的质量要求。
可维护性方面,系统采用控制器、服务层和持久层分离的结构,将登录、题库、试卷、考试和错题等业务对象分别组织。该结构有助于降低模块耦合度,使后续功能扩展和问题定位具有较明确的代码边界。
可用性与响应性方面,系统需保持页面入口、交互控件和提示信息的一致性。当前系统在菜单布局、表格展示和弹窗交互方面采用统一风格,常规查询和写入操作基于关系型数据库事务处理实现,能够满足课程级考试场景下的响应要求。
第3章 系统总体设计
3.1 设计目标与设计原则
系统总体设计首先围绕考试业务链路的完整性展开,即系统能否将题库、试卷、考试、评分、统计和反馈组织为连续流程。若仅对若干页面进行功能叠加,系统虽然具有较多界面入口,但难以支撑真实考试流程中的状态衔接与数据流转。
按照软件工程中模块化、低耦合和可维护性的基本要求[11,13],系统设计遵循分层清晰、职责单一、状态可追踪和便于扩展四项原则。分层清晰强调前端展示、后端业务和数据库访问之间的边界;职责单一强调不同业务逻辑之间保持低耦合;状态可追踪要求考试和考试记录在各阶段具有明确状态标识;便于扩展则为后续题型、统计方式和监考规则扩展预留空间。
在实现阶段,上述原则直接影响系统功能衔接。例如,考试记录状态若缺少清晰设计,主观题批改和成绩统计将难以顺利衔接;试卷与题目之间若缺少统一数据表达方式,组卷和答题环节将产生重复转换。因此,总体设计阶段需要优先处理业务对象关系和状态流转问题。
3.2 技术路线选择
后端选择 Spring Boot,主要基于其在项目整合、配置管理和快速开发方面的成熟度。对于开发周期有限且功能相对集中的毕业设计项目,稳定的后端框架能够降低基础配置成本,使开发重点集中于业务逻辑实现[1]。
前端采用 Vue3 与 Element Plus 的组合。Vue3 在组件组织和响应式处理方面具有较好的灵活性,适合中小型管理系统开发;Element Plus 提供表格、表单、分页、标签和弹窗等常用管理类组件,可减少重复界面开发工作,使前端实现聚焦于业务交互逻辑[4,5]。
数据库访问层采用 MyBatis-Plus 配合 MySQL。MyBatis-Plus 在保留 MyBatis 灵活性的基础上简化常规增删改查操作;MySQL 具备成熟的事务、索引和 JSON 字段支持,能够满足题库、试卷、考试记录和统计查询等数据存储需求[3,10]。
3.3 系统架构设计
本系统采用前后端分离架构。浏览器端负责页面展示、交互响应和局部状态管理,业务数据统一通过 HTTP 接口从后端获取。该结构能够明确前端与后端职责边界,便于系统调试和后续部署。
实现层面,前端通过 Axios 对请求过程进行统一封装,并在请求头中自动附带 JWT;后端过滤器解析令牌后,将用户身份与角色信息写入安全上下文。通过该机制,页面组件只需处理角色显示和页面逻辑,无需在各组件中重复编写认证处理代码[2,7,9]。
总体架构如图3-1所示。用户层、表示层、业务层与数据层之间保持相对清晰的职责边界。尽管系统规模有限,标准分层结构仍能增强模块边界的明确性,并为后续功能扩展和维护提供基础。
图3-1 系统总体架构图
3.4 功能模块划分
模块划分遵循业务对象和业务阶段相结合的思路。系统将用户认证与权限管理、题库管理、试卷管理与智能组卷、在线考试与自动交卷、成绩统计与主观题批改、错题本与个人中心等模块分别组织,使功能边界与考试业务过程保持一致。
按业务对象和业务阶段划分模块,有助于明确模块依赖关系。题库为试卷提供题目来源,试卷组织题目结构,考试承接试卷并形成记录,统计分析和错题反馈则建立在考试记录基础之上。该依赖关系有助于降低功能职责混乱的风险。
系统功能结构如图3-2所示。图中将用户认证与权限管理、题库管理、试卷管理与智能组卷、在线考试与自动交卷、成绩统计与主观题批改以及错题本与个人中心等模块分别组织,反映了系统在考试前、考试中和考试后各阶段的功能分布。
图3-2 系统功能结构图
3.5 权限与菜单设计
为保证不同角色之间的业务边界,系统在前端和后端两侧均设置权限控制。前端根据角色隐藏无关入口,后端负责拦截越权请求。两者配合后,既可减少误操作,也可防止敏感数据仅依赖页面隐藏进行保护。
以访问控制为例,管理员可进入用户管理页面,普通学生无法在菜单中看到该入口;即使学生通过手工方式访问管理员路径,后端仍会因角色不匹配而拒绝请求。教师可访问考试统计与主观题批改接口,学生则只能访问与本人考试记录和错题本相关的功能。
表3-1 角色权限与接口路径对应关系
角色
主要访问路径
权限说明
管理员
/admin/、/teacher/、/student/**
可管理用户,也可查看教师和学生相关业务
教师
/teacher/**、/student/**中的个人功能
负责题库、试卷、考试与成绩管理
学生
/student/**
只访问与本人考试和个人信息有关的功能
3.6 智能组卷与业务流程设计
本系统的智能组卷采用规则约束型策略,其智能性主要体现在题目标签筛选、分层随机抽取和分值归一化三个环节。教师在题库中录入题目时,需要维护课程、题型、难度和知识点等标签;组卷时,系统根据这些标签自动构造候选题集合,再按照教师设定的题型数量和难度分布完成抽取。
具体算法过程如下:首先读取教师填写的课程、总分、及格分、考试时长、知识点范围以及各题型的难度分布;其次按"课程-题型-难度-知识点"组合筛选题目;再次检查每个组合下的候选题数量是否满足要求;最后在候选集合中随机抽取题目,并在总分不一致时按比例调整单题分值。该方法虽然不属于复杂优化模型,但能够满足课程考试中对结构可控、结果可解释和实现稳定性的要求。
当某一题型或难度下的候选题数量不足时,系统不生成不完整试卷,而是返回明确异常提示,指出当前条件下的题量不足问题。该设计可以避免试卷结构与教师预期不一致,并促使教师补充相应课程、难度或知识点下的题目资源。
智能组卷业务流程如图3-3所示。该流程以教师设置组卷规则为起点,以保存试卷题目编号和分值映射为结束点,中间包含标签筛选、题量校验、随机抽取和分值处理等关键步骤。
图3-3 智能组卷业务流程图
3.7 安全与异常处理设计
安全设计主要围绕认证、授权和敏感数据保护展开。用户密码采用 BCrypt 哈希方式存储,登录成功后由后端生成 JWT,前端在后续请求中通过统一请求拦截器携带令牌;后端过滤器解析令牌后,将用户编号和角色信息写入安全上下文,再由 Spring Security 根据访问路径判断是否允许继续执行业务逻辑。
异常处理设计采用"统一返回结构+服务层业务校验"的方式。系统对账号状态异常、令牌无效、越权访问、题目不存在、试卷不存在、考试未开始、考试已结束、题量不足和重复提交等情况分别进行判断,并通过统一结果对象返回错误信息。这样既能保证前端获得明确提示,也能避免异常状态继续向数据库写入不完整数据。
安全与异常处理流程如图3-4所示。该流程将前端请求、令牌解析、路径授权、业务校验、成功响应和异常响应置于同一链路中,说明系统权限控制并非依赖前端菜单隐藏,而是在后端完成访问拦截与错误处理。
图3-4 安全与异常处理流程图
第4章 数据库设计
4.1 概念结构设计
数据库设计是本课题的重要基础。在线考试管理系统虽然包含多个页面,但系统运行依赖用户、题目、试卷、考试、考试记录和错题记录等数据对象之间的关系。若上述关系设计不清晰,主观题批改、成绩统计和错题反馈等后续流程将难以形成完整闭环。
概念模型设计重点关注三类关系:用户与个人信息之间的一对一关系,试卷与题目之间的多对多关系,考试记录、错题记录与题目之间的一对多关系。明确这些关系后,逻辑表结构设计和业务实现能够保持一致。
图4-1为数据库 E-R 图。图中以长方形表示实体,以菱形表示联系,并在联系边上标注 1:1、1:N 和 N:N 等关系,用于展示用户、试卷、题目、考试、考试记录和错题记录之间的对应关系。
图4-1 数据库E-R图
4.2 逻辑结构设计
关系型数据库设计应在实体关系、字段约束和数据一致性之间建立清晰对应关系[12]。结合系统数据库脚本,本系统共设计八张主要数据表,分别用于保存用户、题目、试卷、考试、考试记录、错题、错题练习和系统配置等信息。这些表围绕考试业务流程前后衔接,共同支撑系统的数据流转。
其中,题目表为试卷提供数据来源,试卷表通过 "paper_id" 与考试表关联;学生作答后,考试记录表保存答案和得分情况,错题表再从考试记录中抽取答错题目和正确答案。考试记录表处于数据结构的关键位置,既连接考试业务,也支撑统计分析和学习反馈。
表4-1 主要数据表及其作用
表名
作用
关键字段
sys_user
保存用户账号、角色与状态信息
username、password、role、status
exam_question
保存题目内容、题型、难度和答案
type、course、difficulty、answer
exam_paper
保存试卷与题目分值映射
question_ids、question_scores、total_score
exam_exam
保存具体考试安排
paper_id、start_time、end_time、duration
exam_record
保存学生答卷与成绩
answers、objective_score、subjective_score、score
exam_wrong_question
保存错题和掌握状态
question_id、user_answer、correct_answer、is_mastered
exam_practice_record
保存错题练习结果
question_id、user_answer、is_correct
sys_config
保存系统参数
config_key、config_value
4.3 关键数据表分析
用户表 "sys_user" 不仅承担登录认证功能,还保存角色、邮箱、手机号、学号和班级等信息。该设计使管理员页面能够直接复用用户表字段完成查询和维护,避免在系统规模较小的情况下额外拆分学生身份附表。
题目表 "exam_question" 保存题型、课程、难度、知识点、题干、选项、标准答案、解析和分值等信息。题目选项采用 JSON 字段保存,主要是因为不同题型的选项结构存在差异;标准答案统一存储在 "answer" 字段中,便于自动判分时完成答案校验。
试卷表 "exam_paper" 采用题目编号列表和分值映射相结合的结构。系统通过 "question_ids" 保存题目编号列表,通过 "question_scores" 保存每道题对应分值。对于课程级项目,该结构能够满足试卷组织需要,并降低关系维护复杂度。
考试记录表 "exam_record" 是系统数据流转的关键表。学生提交答卷后,答案、客观题得分、主观题得分、总分、提交时间、作答时长、IP 地址和切屏次数等信息均写入该表。主观题批改、成绩统计、Excel 导出和错题归集等后续操作均依赖考试记录表展开。
为进一步明确逻辑结构设计,本文选取系统运行中最关键的六张业务表列出字段结构。字段约束与索引设置直接服务于登录认证、组卷、考试提交、主观题批改、成绩统计和错题反馈等业务环节。
表4-2 用户表结构
字段名
数据类型
约束
字段说明
id
BIGINT
主键、自增
用户编号
username
VARCHAR(50)
非空、唯一
登录用户名
password
VARCHAR(100)
非空
BCrypt 加密后的密码
real_name
VARCHAR(50)
非空
真实姓名
role
VARCHAR(20)
非空
用户角色
VARCHAR(100)
可空
邮箱
phone
VARCHAR(20)
可空
手机号
student_no
VARCHAR(50)
可空
学生学号
class_name
VARCHAR(50)
可空
班级名称
status
TINYINT
默认0
账号状态
create_time
DATETIME
默认当前时间
创建时间
update_time
DATETIME
自动更新
更新时间
表4-3 题目表结构
字段名
数据类型
约束
字段说明
id
BIGINT
主键、自增
题目编号
type
TINYINT
非空
题型
course
VARCHAR(50)
非空
课程标签
difficulty
TINYINT
非空
难度标签
knowledge_point
VARCHAR(100)
可空
知识点标签
content
TEXT
非空
题干内容
options
JSON
可空
客观题选项
answer
TEXT
非空
标准答案
analysis
TEXT
可空
答案解析
score
DECIMAL(5,1)
默认5.0
默认分值
creator_id
BIGINT
非空
创建教师编号
表4-4 试卷表结构
字段名
数据类型
约束
字段说明
id
BIGINT
主键、自增
试卷编号
title
VARCHAR(100)
非空
试卷标题
description
TEXT
可空
试卷说明
course
VARCHAR(50)
非空
课程名称
total_score
DECIMAL(6,1)
非空
试卷总分
pass_score
DECIMAL(6,1)
非空
及格分
duration
INT
非空
考试时长
question_ids
JSON
非空
题目编号列表
question_scores
JSON
非空
题目分值映射
creator_id
BIGINT
非空
创建教师编号
表4-5 考试表结构
字段名
数据类型
约束
字段说明
id
BIGINT
主键、自增
考试编号
paper_id
BIGINT
非空、索引
关联试卷编号
title
VARCHAR(100)
非空
考试名称
description
TEXT
可空
考试说明
start_time
DATETIME
非空
开始时间
end_time
DATETIME
非空
结束时间
duration
INT
非空
考试时长
status
TINYINT
默认0
考试状态
allow_view_answer
TINYINT
默认0
是否允许查看答案
creator_id
BIGINT
非空
发布教师编号
表4-6 考试记录表结构
字段名
数据类型
约束
字段说明
id
BIGINT
主键、自增
记录编号
exam_id
BIGINT
非空、索引
考试编号
user_id
BIGINT
非空、索引
学生编号
paper_id
BIGINT
非空、索引
试卷编号
answers
JSON
可空
学生答案
score
DECIMAL(6,1)
默认0
总分
objective_score
DECIMAL(6,1)
默认0
客观题得分
subjective_score
DECIMAL(6,1)
默认0
主观题得分
status
TINYINT
默认0
批改状态
start_time
DATETIME
可空
开始作答时间
submit_time
DATETIME
可空
提交时间
duration
INT
默认0
作答用时
ip_address
VARCHAR(50)
可空
提交IP地址
switch_count
INT
默认0
切屏次数
表4-7 错题表结构
字段名
数据类型
约束
字段说明
id
BIGINT
主键、自增
错题记录编号
user_id
BIGINT
非空、索引
学生编号
question_id
BIGINT
非空、索引
题目编号
record_id
BIGINT
非空、索引
考试记录编号
user_answer
TEXT
可空
学生答案
correct_answer
TEXT
可空
正确答案
is_mastered
TINYINT
默认0
掌握状态
master_time
DATETIME
可空
掌握时间
create_time
DATETIME
默认当前时间
收录时间
4.4 数据完整性与约束设计
为保证数据正确性与一致性,数据库脚本对主要字段设置非空约束、唯一约束和索引。例如,用户表中的用户名字段保持唯一,考试记录表通过 "exam_id" 与 "user_id" 组合约束避免同一学生重复提交同一场考试。上述约束是系统数据完整性的基础。
此外,系统对经常用于筛选和统计的字段设置普通索引,如用户角色、题型、课程、难度、考试状态和掌握状态等。上述索引能够提升典型查询语句的执行稳定性,并符合数据库逻辑设计中对检索效率的基本要求。
在数据逻辑上,系统还通过服务层校验补充了表结构无法直接表达的规则,例如考试未开始时不允许进入答题流程,已提交记录不能重复提交,只有待批改记录才允许教师继续评分等。数据库约束与业务校验结合,才共同构成了系统的数据完整性保障。
第5章 系统详细实现
5.1 开发环境与项目结构实现
在开发环境配置方面,后端使用 Maven 进行依赖管理,主要依赖包括 Spring Boot Web、Spring Security、Spring Boot Validation、MyBatis-Plus、JWT、Fastjson2、Hutool 和 Apache POI 等;前端则以 Vite 作为构建工具,结合 Vue3、Axios、Pinia、Element Plus 和 ECharts 完成功能实现。上述配置覆盖接口开发、权限控制、数据访问、前端交互和图表展示等环节,能够满足系统开发与运行需要。
项目组织方面,后端按照 "controller"、"service"、"mapper"、"entity"、"dto"、"vo"、"common"、"config"、"security" 和 "utils" 等包进行划分,前端围绕 "api"、"views"、"router"、"store" 和 "utils" 等目录展开。该结构为业务逻辑提供稳定归属位置,有助于降低后续阅读、修改和维护成本。
表5-1 系统开发环境与主要依赖
类别
具体配置
操作系统
Windows 10
后端语言
Java 8
后端框架
Spring Boot 2.7.18
安全框架
Spring Security + JWT
ORM/持久层
MyBatis-Plus 3.5.3.1
数据库
MySQL 8.4
前端框架
Vue3 + Vite
界面组件
Element Plus
数据可视化
ECharts
5.2 用户认证与权限控制实现
5.2.1 登录认证流程
用户认证流程由 "AuthController"、"AuthServiceImpl"、"SecurityConfig" 和 "JwtAuthenticationFilter" 共同完成。登录时,系统先根据用户名查询用户信息,再利用 "PasswordEncoder" 比对输入密码与数据库中的 BCrypt 哈希值。若账号不存在、状态异常或密码不匹配,系统返回明确提示,以保证认证过程的可靠性。
密码校验通过后,后端借助 "JwtUtil" 生成包含用户编号、用户名和角色信息的令牌,并将相关内容返回前端。前端登录成功后将令牌与用户信息写入本地存储,后续接口访问统一通过请求拦截器携带 "Authorization" 头,从而形成连续的认证访问流程。图5-1展示系统登录页面。
代码5-1 登录认证核心代码
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();wrapper.eq(User::getUsername, loginDTO.getUsername());User user = userMapper.selectOne(wrapper);if (user == null) { throw new RuntimeException("用户不存在");}if (user.getStatus() == 1) { throw new RuntimeException("账号已被禁用");}if (!passwordEncoder.matches(loginDTO.getPassword(), user.getPassword())) { throw new RuntimeException("密码错误");}String token = jwtUtil.generateToken(user.getId(), user.getUsername(), user.getRole());
图5-1 系统登录页面
5.2.2 权限控制实现
权限控制体现了前后端协同关系。后端在安全配置中区分管理员、教师和学生路径,前端通过路由守卫和动态菜单控制用户可访问范围。前端用于减少无关入口,后端用于阻止越权访问,两者共同构成系统权限控制机制。
5.3 管理员用户管理实现
管理员用户管理模块对应后端 "UserManageController" 与 "UserServiceImpl"。该模块虽不直接参与考试业务,但承担平台基础维护职责。账号状态、角色分配和无效用户清理等管理操作,会直接影响系统后续业务使用。
前端用户管理页面采用表格与对话框结合的交互方式,围绕用户名、真实姓名、角色、邮箱、手机号、学号、班级和状态等字段进行展示。该页面便于管理员查询和维护账号信息,并通过"管理员不能删除自己"等约束降低误操作风险。图5-2展示管理员用户管理页面。
图5-2 管理员用户管理页面
5.4 题库管理实现
5.4.1 题目查询与维护
题库管理由 "QuestionController" 和 "QuestionServiceImpl" 负责实现。服务层利用 "LambdaQueryWrapper" 对题型、课程、难度和知识点进行动态查询拼接,前端通过表格和表单完成题目新增、编辑、删除与筛选。题库管理是后续试卷生成和考试组织的数据基础。
5.4.2 题目结构设计
题目设计支持单选、多选、判断、填空和简答五类题型,可覆盖课程日常测试中的主要题目形式。客观题侧重选项与标准答案维护,主观题侧重题干、参考答案与解析完整性。课程、难度和知识点三个维度的标签,为后续组卷提供了明确筛选条件。
实现细节方面,系统提供课程列表与知识点列表查询接口,前端可据此构建筛选条件选项。该设计减少了教师重复输入课程名称造成的不一致问题。图5-3展示教师题库管理页面,其中题型、难度和课程信息被统一组织在题库视图中。
图5-3 教师题库管理页面
5.5 试卷管理与智能组卷实现
5.5.1 试卷组织方式
试卷管理模块由 "PaperController" 和 "PaperServiceImpl" 负责实现。系统支持教师手动选题和按课程、题型、难度规则自动生成试卷。手动组卷侧重教师控制,规则组卷侧重在已有题库基础上生成结构符合设定要求的试卷。
5.5.2 智能组卷逻辑
智能组卷核心逻辑位于 "generatePaper" 方法。系统遍历题型配置后,根据课程、题型、难度和知识点筛选候选题集合;题量满足条件时,在候选集合中随机抽取指定数量题目并计算总分。若抽取结果与目标总分存在偏差,系统按比例修正题目分值。该方案适合课程考试场景中对可解释性、可配置性和可维护性的要求。
组卷设计的重点在于规则稳定落地、筛选逻辑清晰以及题量不足时的明确反馈。对于课程考试场景,规则透明和结果可解释比复杂优化模型更符合实际需求。图5-4展示试卷管理中的智能组卷配置页面。
代码5-2 智能组卷核心代码
for (GeneratePaperDTO.QuestionTypeConfig typeConfig : generatePaperDTO.getQuestionTypes()) { for (Map.Entry<Integer, Integer> entry : typeConfig.getDifficultyDistribution().entrySet()) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Question::getType, typeConfig.getType()) .eq(Question::getCourse, generatePaperDTO.getCourse()) .eq(Question::getDifficulty, entry.getKey()); if (generatePaperDTO.getKnowledgePoints() != null && !generatePaperDTO.getKnowledgePoints().isEmpty()) { wrapper.in(Question::getKnowledgePoint, generatePaperDTO.getKnowledgePoints()); } List questions = questionMapper.selectList(wrapper); if (questions.size() < entry.getValue()) { throw new RuntimeException("符合条件的题目数量不足"); } Collections.shuffle(questions); selectedQuestions.addAll(questions.stream() .limit(entry.getValue()).collect(Collectors.toList())); }}
图5-4 试卷管理与智能组卷页面
5.6 考试管理在线答题与自动评分实现
5.6.1 考试发布与开始控制
考试管理由 "ExamController" 与 "ExamServiceImpl" 承担。教师发布考试时,系统先校验试卷是否存在,再保存考试名称、起止时间、时长和说明等信息。考试状态采用数值字段表示未开始、进行中和已结束,便于前端展示和后端流程判断。图5-5展示教师端考试管理页面。
图5-5 考试管理页面
学生进入答题页面后,系统调用开始考试接口。后端首先判断当前时间是否处于考试开放区间,并检查该学生是否已有对应考试记录。若记录不存在,系统创建新记录;若学生已进入但尚未提交,系统允许继续作答;若记录已提交,系统拒绝重复进入,以保证考试流程的严谨性。图5-6展示学生在线答题页面。
图5-6 学生在线答题页面
5.6.2 自动评分与记录写入
提交答卷时,系统读取试卷中保存的题目编号和分值映射,并逐题处理答案。单选、多选和判断题由系统自动评分,学生答案与标准答案一致时累计客观题得分;答案错误时,同步写入错题表。填空题和简答题暂不自动判分,系统先将记录状态设为待批改,等待教师后续评分。
代码5-3 自动评分与错题归集核心代码
for (Long questionId : questionIds) { Question question = questionMapper.selectById(questionId); String userAnswer = submitExamDTO.getAnswers().get(questionId.toString()); BigDecimal questionScore = questionScores.get(questionId.toString()); if (question.getType() <= 3) { if (userAnswer != null && userAnswer.trim().equalsIgnoreCase(question.getAnswer().trim())) { objectiveScore = objectiveScore.add(questionScore); } else { saveWrongQuestion(userId, questionId, record.getId(), userAnswer, question.getAnswer()); } } else { hasSubjective = true; }}record.setStatus(hasSubjective ? 1 : 2);
该处理方式明确区分了自动评分和人工评分边界。客观题规则明确,适合自动评分;主观题若仅依赖机械字符串匹配,评分结果可能失真。因此,系统将客观题自动处理与主观题人工评分结合,更符合课程考试实际需求。
5.7 主观题批改实现


5.7.1 批改数据加载
主观题批改通过 "getRecordDetail" 和 "gradeSubjectiveQuestions" 两组逻辑完成。教师进入批改页面后,系统根据记录编号查询考试记录、学生信息、考试信息和试卷主观题内容,并将标准答案与学生答案返回前端,便于教师逐题评分。
5.7.2 批改结果回写
批改完成后,系统汇总教师录入的各题得分,更新考试记录中的主观题得分和总分,并将记录状态置为已批改。主观题评分结果随即进入成绩统计和成绩导出的后续流程。图5-7展示教师批改主观题的运行界面。
代码5-4 主观题批改核心代码
ExamRecord record = examRecordMapper.selectById(recordId);if (record == null) { throw new RuntimeException("考试记录不存在");}if (record.getStatus() != 1) { throw new RuntimeException("只能批改状态为待批改的记录");}BigDecimal subjectiveScore = questionScores.values().stream() .reduce(BigDecimal.ZERO, BigDecimal::add);record.setSubjectiveScore(subjectiveScore);record.setScore(record.getObjectiveScore().add(subjectiveScore));record.setStatus(2);examRecordMapper.updateById(record);
图5-7 教师主观题批改页面
5.8 成绩统计与导出实现
5.8.1 统计指标计算
成绩统计模块以考试记录表为数据来源,重点计算参加人数、平均分、最高分、最低分、及格率、优秀率以及客观题平均分等指标。上述指标能够从整体层面反映考试结果,为教师了解课程测验情况提供数据依据。
在结果呈现层面,系统使用 ECharts 绘制成绩分布柱状图[6],并以指标卡片显示关键统计结果。以当前演示数据为例,三名学生成绩分别处于不及格、良好和满分区间,图表能够呈现不同成绩层次。图5-8展示成绩统计分析页面。
5.8.2 成绩导出实现
成绩导出功能通过 Apache POI 生成 Excel 文件。系统在成绩单中写入学号、姓名、班级、客观题得分、主观题得分、总分、提交时间和用时等信息,并按总分从高到低排序。导出结果可用于打印、归档和后续分析[8]。
图5-8 成绩统计分析页面
5.9 错题本与个人中心实现
5.9.1 错题记录生成
错题本模块由 "WrongQuestionController" 与 "WrongQuestionServiceImpl" 实现。系统在自动评分阶段发现学生客观题作答错误后,将题目编号、学生答案、正确答案和对应考试记录写入错题表,并将掌握状态初始化为未掌握。学生进入错题页后,可查看错误记录并在复习后标记为已掌握。
5.9.2 错题反馈作用
从学习反馈角度看,错题本为考试后的复习提供了明确入口。学生获得分数后,可以通过错题记录回看错误答案和正确答案,并结合掌握状态安排后续练习。该功能将考试结果转化为可持续利用的复习数据。图5-9展示学生错题本页面。
图5-9 学生错题本页面
个人中心页面用于维护用户名、真实姓名、邮箱、角色等个人基础信息,并为学生展示参加考试次数和错题数量等学习统计。该页面补充了系统的个人信息维护环节,使用户信息管理、考试参与和学习反馈形成完整闭环。图5-10展示个人中心页面。
图5-10 个人中心页面
5.10 关键实现细节分析
系统实现质量主要取决于关键细节的处理情况。例如,考试开始前后的状态判断、考试记录重复提交限制、错题及时归集和主观题得分回写等逻辑,均会影响后续流程的正确性和连续性。
测试结果显示,系统能够覆盖一次在线考试的关键业务链。管理员完成基础用户维护,教师完成题库维护、组卷和考试发布,学生进入系统作答并提交试卷,系统自动处理客观题,教师继续完成主观题评分,最终统计页和错题页均可根据真实记录生成结果。系统在功能流程和数据流转两个层面保持了较好的连续性。
第6章 系统测试
6.1 测试环境与测试思路
系统测试的目的不仅在于验证页面可访问性,还在于验证关键业务能否闭环运行。对于在线考试系统,登录、组卷、考试、评分、统计和错题反馈等环节的衔接情况,是判断系统可用性的重要依据。
测试环境包括 Windows 10、Java 8、Spring Boot 2.7.18、Vue3、MySQL 8.4 和 Google Chrome 浏览器。系统以本地方式运行,前端端口为 3001,后端端口为 8080,数据库中预置 6 个用户账号和 18 道题目。测试过程中又额外生成了 1 份试卷、1 场考试和 3 份答卷,用于模拟真实业务流程。
表6-1 测试环境配置
项目
配置
操作系统
Windows 10
浏览器
Google Chrome
JDK
1.8.0_202
后端框架
Spring Boot 2.7.18
前端框架
Vue3 + Vite
数据库
MySQL 8.4
前端端口
3001
后端端口
8080
6.2 测试数据准备
为提高测试结果的可信度,系统在实际运行基础上准备了一组测试数据。数据包括 1 个管理员账号、2 个教师账号、3 个学生账号以及两门课程的 18 道题目,后续在此基础上生成试卷、考试和答卷记录。相关页面与统计结果均建立在系统运行状态之上。
测试数据分别为 student1、student2 和 student3 设置不同作答结果,以便统计分析、错题展示和批改页面呈现差异化结果。其中,student1 错误较多,用于观察错题归集情况;student2 得分较高,用于形成高分样本;student3 居于中间,更接近日常课堂测验中的常见情况。
从测试过程看,考试系统的关键难点在于业务状态组织。若试卷、考试、考试记录和错题记录之间关系不清晰,主观题批改、统计分析和错题反馈等后续环节容易出现断裂。因此,系统测试需要重点验证流程衔接和数据流转是否一致。
表6-2 主要功能测试结果
编号
测试内容
测试过程
预期结果
测试结论
T1
登录认证
分别使用管理员、教师和学生账号登录
进入对应角色页面,菜单按权限显示
通过
T2
用户管理
管理员进入用户管理页面执行查询与编辑
用户列表正常显示,状态可修改
通过
T3
题库管理
教师按题型和课程筛选题目
返回题目分页结果,信息完整
通过
T4
考试开始与提交
student1 进入考试并提交答卷
生成考试记录,自动计算客观题成绩
通过
T5
主观题批改
教师打开 student1 记录并录入评分
记录状态由待批改变为已批改
通过
T6
成绩统计
教师进入统计分析页面
显示平均分、及格率和成绩分布图
通过
T7
错题本
student1 查看错题本页面
看到 3 条错题记录并可标记掌握
通过
T8
成绩导出
教师在统计页执行导出
生成 Excel 成绩单文件
通过
表6-2汇总了登录、题库、组卷、在线答题、评分、统计、错题和个人中心等主要功能测试结果。各项测试均基于本地运行环境和预置数据完成,测试重点在于验证功能流程是否可执行、数据是否能够正确写入并在后续页面中复用。
6.2.1 业务链路验证
业务链路验证结果显示,管理员、教师和学生三类角色能够按预设流程完成各自操作。系统从用户维护、题库建设、试卷生成、考试发布、学生作答、自动评分、人工批改到统计反馈均能够形成连续数据记录,测试数据与页面展示结果保持一致。
以本次演示数据为例,系统最终形成 3 条已提交考试记录,成绩分别为 0 分、100 分和 95 分,平均分为 65 分,及格率为 66.67%,优秀率为 66.67%。这些数据由学生答题生成原始记录,并在教师完成主观题评分后计算得到,统计页展示结果与考试记录保持一致。
错题本测试结果同样验证了系统反馈链路。以 student1 为例,其在 3 道客观题上作答错误,提交试卷后系统自动生成 3 条错题记录,页面能够显示题目编号、学生答案和正确答案。相较于只展示总分,该反馈形式更有助于学生定位错误,也便于教师观察学生失分位置。
6.3 现有不足与改进方向
6.3.1 后续改进方向
测试结果总体符合预期,但系统仍存在进一步完善空间。首先,当前智能组卷主要依赖规则筛选和随机抽取,能够满足课程项目场景;若题库规模继续扩大,还需进一步控制知识点覆盖率、题目重复率和试卷相似度。
其次,考试过程控制仍可继续加强。当前系统已保存作答开始时间、提交时间、IP 地址和切屏次数,但复杂异常行为处理尚未展开。若系统面向更正式的考试环境,还需要进一步细化日志记录、异常提示和考试中断恢复机制。
最后,当前错题本主要保存错题内容和掌握状态,已具备基本复习入口,但尚未与知识点掌握分析、个性化练习推荐或阶段性学习建议充分结合。后续若向学习支持平台拓展,还需进一步完善学习分析设计。
第7章 总结与展望
7.1 研究总结
本文围绕"基于 Spring Boot 的在线考试管理系统设计与实现"这一题目,完成了需求分析、总体设计、数据库设计、系统实现与测试验证等工作。运行数据说明,系统能够较完整地满足任务书提出的主要要求,并在题库管理、规则型组卷、在线考试、自动评分、主观题批改、成绩统计和错题本等方面形成连续业务链路。
开发过程表明,考试系统的难点不在于页面数量,而在于业务状态是否组织清楚。试卷、考试、考试记录和错题记录之间的关系若缺少统一设计,主观题批改、统计分析和错题反馈等环节将难以保持连续。因此,本文在系统设计和实现中重点关注流程衔接。
从工程实践角度看,该系统展示了较完整的 Web 项目落地过程。项目既包含增删改查等常见管理功能,也涉及认证授权、状态流转、数据统计、导出处理和前后端协作等问题。通过本次实现,可以进一步加深对系统分析、数据库设计、接口组织和页面交互关系的理解。
7.2 后续展望
后续系统完善可从三个方向展开:第一,优化组卷策略,使试卷在知识点覆盖、难度平衡和题型结构方面更加可控;第二,增强考试过程控制能力,补充更细粒度的异常行为记录和更稳健的中断恢复机制;第三,深化考试后数据分析,使错题本、知识点统计和阶段性学习建议之间形成更紧密的联系。
未来若将系统拓展到更大规模的课程环境,数据库结构和试卷---题目关系可继续规范化。例如,可将当前试卷中的 JSON 题目映射拆分为独立关系表,以提高可维护性和查询灵活性。同时,前端页面还可进一步完善响应式适配和交互细节。
综上,系统围绕课程考试管理构建了可运行、可验证的应用原型。测试结果显示,该系统能够支撑课程级考试组织与结果反馈,并为后续扩展更细粒度的组卷策略、考试过程监管和学习分析功能提供了基础。
参考文献
1\] Spring. Spring Boot Reference Documentation\[EB/OL\]. \[2\] Spring. Spring Security Reference\[EB/OL\]. \[3\] MyBatis-Plus. MyBatis-Plus Official Guide\[EB/OL\]. \[4\] Vue.js Team. Vue.js Guide\[EB/OL\]. \[5\] Element Plus Team. Element Plus Documentation\[EB/OL\]. \[6\] Apache ECharts. Apache ECharts Documentation\[EB/OL\]. \[7\] Axios. Axios Documentation\[EB/OL\]. \[8\] Apache Software Foundation. Apache POI Documentation\[EB/OL\]. \[9\] Jones M, Bradley J, Sakimura N. JSON Web Token (JWT): RFC 7519\[S\]. 2015. \[10\] Oracle. MySQL 8.4 Reference Manual\[EB/OL\]. \[11\] Pressman R S, Maxim B R. Software Engineering: A Practitioner's Approach\[M\]. 9th ed. New York: McGraw-Hill, 2019. \[12\] 王珊, 萨师煊. 数据库系统概论\[M\]. 第6版. 北京: 高等教育出版社, 2023. \[13\] 张海藩. 软件工程导论\[M\]. 第6版. 北京: 清华大学出版社, 2018. \[14\] Moodle. Quiz Activity Documentation\[EB/OL\]. \[15\] 教育部. 教育信息化2.0行动计划\[Z\]. 2018. 致 谢 本课题从选题、系统实现到论文整理,得到了指导教师在研究思路和论文修改方面的帮助。指导教师对系统功能边界、论文结构安排和技术表达提出了具体建议,使本文能够更加重视系统本身的业务分析与实现说明。 同时,感谢在测试阶段提供意见和帮助的同学。系统页面交互与业务流程中的部分问题,需要在实际使用和联调过程中才能被发现。通过多轮测试与修改,本文对软件开发中业务逻辑、技术实现和使用体验之间的关系有了更加具体的认识。 最后,感谢本次毕业设计带来的实践训练。该课题使本人将课程中学习的框架知识、数据库知识和软件工程方法进行综合运用,也使本人较完整地经历了系统从需求分析、功能实现到论文表达的全过程。