SpringBoot + MySQL + Redis 实现在线考试系统与智能组卷
下面给你一套可直接用于毕业设计 / 课程设计的《基于 SpringBoot + MySQL + Redis 的在线考试系统与智能组卷》完整方案。
内容覆盖:选题意义 → 技术架构 → 数据库设计 → Redis 典型用法 → 智能组卷算法 → 核心代码 → 答辩亮点,适合本科毕设,工作量充足、创新点明确。

一、选题背景与意义(论文可直接用)
随着高校信息化建设的推进,传统纸质考试存在以下问题:
-
组织成本高、阅卷周期长
-
试题重复率高,缺乏科学性
-
成绩统计繁琐,易出错
-
无法支持大规模并发考试
本系统基于 SpringBoot + MySQL + Redis,实现了:
-
在线考试全流程管理
-
基于策略的智能组卷
-
高频数据缓存与并发控制
-
自动阅卷与成绩分析
具有较强的实用价值和推广前景。
二、技术架构
前端(Vue / Thymeleaf)
↓
SpringBoot
├── Controller(接口层)
├── Service(业务层)
│ ├── 考试管理
│ ├── 智能组卷
│ └── 成绩统计
├── Mapper(MyBatis)
↓
MySQL(持久化存储)
Redis(缓存 / 限流 / 临时试卷)
|
技术 |
作用 |
|---|---|
|
SpringBoot |
快速开发 |
|
MyBatis |
ORM |
|
MySQL |
存储试题、试卷、成绩 |
|
Redis |
缓存题库、考试会话、限流 |
|
Vue / Axios |
前后端分离 |
|
JWT |
登录鉴权 |
三、系统角色设计
1️⃣ 管理员
-
题库管理(增删改查)
-
科目 & 题型管理
-
考试发布
-
系统监控
2️⃣ 教师
-
智能组卷
-
手动组卷
-
阅卷(主观题)
-
成绩分析
3️⃣ 学生
-
在线答题
-
自动交卷
-
查看成绩与解析
四、数据库设计(核心表)
1️⃣ 试题表 question
CREATE TABLE question (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
subject_id INT,
type VARCHAR(20), -- single/multiple/judge
content TEXT,
options JSON, -- ["A","B","C","D"]
answer VARCHAR(50),
difficulty INT, -- 1~5
score INT,
create_time DATETIME
);
2️⃣ 试卷表 paper
CREATE TABLE paper (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
total_score INT,
duration INT, -- 分钟
create_by INT
);
3️⃣ 试卷题目表 paper_question
CREATE TABLE paper_question (
paper_id BIGINT,
question_id BIGINT,
score INT
);
4️⃣ 考试记录表 exam_record
CREATE TABLE exam_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
paper_id BIGINT,
start_time DATETIME,
end_time DATETIME,
score DECIMAL(5,2)
);
5️⃣ 答题详情表 answer_record
CREATE TABLE answer_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
record_id BIGINT,
question_id BIGINT,
student_answer VARCHAR(50),
correct_answer VARCHAR(50),
is_correct TINYINT
);
五、Redis 的核心应用场景(✅ 答辩重点)
✅ 1️⃣ 缓存题库(减少 DB 压力)
Key: question:subject:{id}
Value: List<Question>
TTL: 30 min
redisTemplate.opsForValue().set(key, questions, 30, TimeUnit.MINUTES);
✅ 2️⃣ 考试会话(防止刷新丢题)
Key: exam:session:{studentId}:{paperId}
Value: 当前答题状态 JSON
TTL: 考试时间 + 5min
✅ 3️⃣ 考试倒计时(原子操作)
redisTemplate.opsForValue().set("exam:time:" + recordId, remainSeconds);
redisTemplate.expire("exam:time:" + recordId, remainSeconds, TimeUnit.SECONDS);
✅ 4️⃣ 防重复提交 / 限流
Boolean ok = redisTemplate.opsForValue()
.setIfAbsent("exam:submit:" + studentId, "1", 5, TimeUnit.SECONDS);
if (!ok) {
throw new RuntimeException("请勿重复提交");
}
六、智能组卷设计(⭐ 创新点)
组卷策略参数
|
参数 |
说明 |
|---|---|
|
题型比例 |
单选/多选/判断 |
|
难度分布 |
简单 / 中等 / 困难 |
|
知识点覆盖 |
章节权重 |
|
总分 |
100 |
|
题量 |
N |
智能组卷算法(简化版)
public List<Question> smartGeneratePaper(PaperStrategy strategy) {
List<Question> result = new ArrayList<>();
// 按难度随机抽取
for (Difficulty diff : Difficulty.values()) {
int count = strategy.getCountByDifficulty(diff);
List<Question> list = questionMapper
.selectRandom(diff, strategy.getSubjectId(), count);
result.addAll(list);
}
return result;
}
📌 进阶写法:遗传算法 / 回溯算法 / 权重随机(毕设加分)
七、自动阅卷核心逻辑
public BigDecimal autoScore(Long recordId) {
List<AnswerRecord> answers = answerMapper.selectByRecordId(recordId);
BigDecimal total = BigDecimal.ZERO;
for (AnswerRecord ar : answers) {
if (ar.getStudentAnswer().equals(ar.getCorrectAnswer())) {
ar.setIsCorrect(1);
total = total.add(BigDecimal.valueOf(ar.getScore()));
}
}
answerMapper.updateBatch(answers);
return total;
}
八、系统特色(答辩必讲)
✅ Redis 缓存题库,提高并发性能
✅ 智能组卷算法,提升试卷科学性
✅ 考试倒计时 & 自动交卷
✅ 防作弊:禁止重复提交、会话校验
✅ 支持大规模在线考试
✅ 可扩展为微服务 / 分布式部署
九、毕设论文结构建议
|
章节 |
内容 |
|---|---|
|
第1章 |
绪论 |
|
第2章 |
相关技术(SpringBoot / Redis / MyBatis) |
|
第3章 |
系统需求分析 |
|
第4章 |
系统设计(E-R图、Redis设计) |
|
第5章 |
系统实现(重点:智能组卷) |
|
第6章 |
系统测试(并发、性能) |
|
第7章 |
总结与展望 |
十、可升级方向(体现工作量)
✅ 前后端分离(Vue + ElementUI)
✅ JWT + Redis 登录鉴权
✅ 试卷导出 PDF
✅ 错题本 / 学习推荐
✅ 考试监控(切屏检测)
✅ 分布式锁(Redisson)
更多推荐
所有评论(0)