下面给你一套可直接用于毕业设计 / 课程设计的《基于 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)

更多推荐