1. 项目背景与核心价值
这个基于SpringBoot+Vue的考试系统平台,是我在指导计算机专业毕业设计过程中反复打磨的一个经典案例。它完美解决了高校毕设选题中"选题难、实现难、文档难"三大痛点,特别适合Java Web方向的学生作为毕业设计项目。
系统采用前后端分离架构,后端使用SpringBoot+MyBatisPlus实现RESTful API,前端采用Vue+ElementUI构建管理界面。整套代码包含完整的权限管理、题库管理、在线考试、自动阅卷等核心功能模块,数据库使用MySQL 5.7,所有SQL脚本都经过优化处理。
特别提示:这个项目经过5个毕业季的迭代,已经修复了早期版本中的并发控制、事务处理等典型问题,可以直接作为生产级项目参考。
2. 技术架构详解
2.1 后端技术栈
SpringBoot 2.7.6 + MyBatisPlus 3.5.1 构成核心业务层,采用多模块Maven工程结构:
code复制exam-system
├── exam-common -- 公共模块
├── exam-system -- 系统管理模块
├── exam-question -- 题库管理模块
└── exam-test -- 考试业务模块
关键配置要点:
- 使用Spring Security + JWT实现认证授权
- Redis缓存热点数据(如考试场次信息)
- 自定义注解实现分布式锁控制并发提交
- 集成Hutool工具包处理常见工具类需求
2.2 前端技术栈
Vue 2.6 + ElementUI 2.15 构建的管理端具有以下特点:
- 基于vue-element-admin基础模板二次开发
- 使用vuex进行状态管理
- axios封装了统一的请求拦截处理
- 采用动态路由实现权限控制
2.3 数据库设计
数据库包含12张核心表,主要表结构说明:
| 表名 | 功能说明 | 关键字段 |
|---|---|---|
| sys_user | 用户表 | user_id, username, password, salt |
| exam_paper | 试卷表 | paper_id, subject_id, total_score |
| exam_question | 题库表 | question_id, type, content, answer |
数据库脚本特别处理了字符集(utf8mb4)和存储引擎(InnoDB),确保兼容主流云数据库服务。
3. 核心功能实现
3.1 在线考试模块
考试流程控制是系统的核心难点,我们采用状态机模式管理考试过程:
- 考前准备:校验考生资格、加载试卷
- 考试中:实时保存答题记录(防丢失)
- 交卷处理:异步批改客观题,人工批改主观题
关键代码片段(Java):
java复制// 考试状态机
public enum ExamStatus {
NOT_STARTED,
IN_PROGRESS,
SUBMITTED,
GRADED
}
// 使用Redis记录考试剩余时间
redisTemplate.opsForValue().set(
"exam:time:"+userId,
remainingTime,
Duration.ofMinutes(120));
3.2 自动阅卷功能
支持四种题型自动批改:
- 单选题:精确匹配答案
- 多选题:采用集合比对(顺序无关)
- 判断题:直接比对布尔值
- 填空题:使用相似度算法(容错匹配)
技术要点:
- 使用Apache Commons Text计算Levenshtein距离
- 对填空题答案进行标准化处理(去除空格、转小写)
3.3 权限控制系统
基于RBAC模型实现五级权限控制:
- 超级管理员
- 院系管理员
- 教师用户
- 学生用户
- 访客用户
权限校验采用注解方式:
java复制@PreAuthorize("hasRole('TEACHER') or hasRole('ADMIN')")
public void createQuestion(Question question) {
// 业务逻辑
}
4. 项目部署指南
4.1 开发环境搭建
-
后端环境:
- JDK 1.8+
- Maven 3.6+
- MySQL 5.7+
- Redis 5.0+
-
前端环境:
- Node.js 14+
- npm 6+
4.2 关键配置修改
application.yml需要修改的配置项:
yaml复制spring:
datasource:
url: jdbc:mysql://localhost:3306/exam_db?useSSL=false
username: root
password: 123456
redis:
host: localhost
port: 6379
4.3 常见问题解决
-
前端跨域问题:
在vue.config.js中配置代理:javascript复制devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } -
MySQL时区问题:
连接字符串添加时区参数:code复制jdbc:mysql://localhost:3306/exam_db?serverTimezone=Asia/Shanghai
5. 毕设应用建议
5.1 二次开发方向
-
功能扩展:
- 增加在线编程题评测(集成Docker沙箱)
- 实现考试监控(WebRTC视频监控)
- 添加错题本功能
-
性能优化:
- 使用Elasticsearch实现题库搜索
- 引入消息队列处理批量导入
5.2 论文写作要点
-
技术选型对比章节建议包含:
- SpringBoot vs 传统SSM框架
- Vue vs React前端框架选择
- JWT vs Session认证方案
-
系统测试部分应包含:
- 并发考试压力测试(JMeter)
- 不同题型批改准确率测试
这个项目源码已经过完整测试,包含详细的开发文档和接口说明。我在实际教学中发现,学生最常遇到的问题往往集中在权限控制和考试并发处理这两个模块,建议在论文中重点说明这些技术难点的解决方案。