# exam-system **Repository Path**: cao-study/exam-system ## Basic Information - **Project Name**: exam-system - **Description**: 基于 Spring Boot 3 + Vue 3 的前后端分离在线考试与题库系统,支持多角色权限、题库组卷、在线考试、自动判分、教师批改、成绩统计、错题本和考试监控。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2026-06-29 - **Last Updated**: 2026-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: 在线考试系统, mybatis-plus, Redis, SpringBoot ## README # 在线考试与题库系统 一个前后端分离的在线考试管理系统,覆盖课程、题库、组卷、考试发布、学生作答、教师批改、成绩查询、错题整理、考试监控和交流论坛等完整业务流程。 项目采用 Spring Boot 单体后端 + Vue3 前端 SPA 的结构,支持本地开发、Docker Compose 部署,也可以部署到云服务器后通过浏览器访问。 ## 项目演示 ### 登录页 ![登录页](docs/images/login.png) ### 管理员首页 ![管理员首页](docs/images/admin-dashboard.png) ### 用户管理 ![用户管理](docs/images/admin-users.png) ### 教师题库管理 ![教师题库管理](docs/images/teacher-questions.png) ### 考试监控 ![考试监控](docs/images/teacher-monitor.png) ### 学生学习概览 ![学生学习概览](docs/images/student-dashboard.png) ## 项目功能 ### 管理员端 - 用户管理:维护管理员、教师、学生账号,支持分页查询和角色分配。 - 课程管理:创建课程并指定授课教师,维护课程封面、课程编码和课程状态。 - 试卷管理:查看系统中的试卷信息和试卷详情。 - 论坛管理:管理学习心得内容。 - 操作日志:查看系统关键操作记录。 ### 教师端 - 课程管理:维护自己的课程,查看课程学生。 - 学生管理:查看加入课程的学生,以及学生考试完成情况。 - 题库管理:按课程维护单选题、多选题、判断题、简答题,支持 CSV 批量导入。 - 试卷管理:支持手动组卷和自动组卷,发布前校验总分为 100 分。 - 考试发布:基于课程和试卷发布考试,考试推送给课程内学生。 - 简答批改:查看整张试卷答题情况,对主观题进行评分和评语填写。 - 成绩记录:按课程、考试名称等条件查看学生成绩,支持分页。 - 考试监控:查看考试参与状态、异常行为记录和学生切屏/离开页面事件。 - 交流论坛:教师可参与学习心得交流。 ### 学生端 - 我的课程:通过课程编码或课程名称加入课程,查看课程下考试。 - 我的考试:查看未完成和已完成考试,进入考试作答。 - 考试作答:支持倒计时、手动保存草稿、答题卡、到时自动交卷、切屏提示。 - 成绩记录:区分已批改和未批改,已批改后可查看总分与答题详情。 - 我的错题:根据未得满分的题目生成错题记录,并按题型分类分页展示。 - 学习概览:首页展示课程数、待完成考试、平均分、错题分布等学习统计。 - 交流论坛:发布学习心得,支持封面、搜索、我的发布和评论交流。 - 账户管理:维护个人资料、修改密码、设置头像。 ## 技术栈 ### 后端 - Java 17 - Spring Boot 3 - Spring MVC - Spring Security - MyBatis-Plus - MySQL - Redis - JWT - Maven - JUnit ### 前端 - Vue 3 - Vite - TypeScript - Vue Router - Pinia - Axios - Element Plus - ECharts ### 部署 - Docker - Docker Compose - Nginx - MySQL 8 - Redis ## 项目结构 ```text exam-system ├─ backend/ # Spring Boot 后端服务 ├─ frontend/ # Vue3 前端项目 ├─ deploy/ # Docker Compose、数据库初始化和升级脚本 ├─ docs/ # 接口、数据库、学习记录等文档 ├─ .gitignore └─ README.md ``` ## 本地启动 ### 1. 准备环境 请先安装: - JDK 17 - Maven - Node.js - MySQL 8 - Redis ### 2. 初始化数据库 先创建数据库: ```sql CREATE DATABASE exam_system DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 再执行初始化脚本: ```bash mysql -u你的MySQL用户名 -p你的MySQL密码 exam_system < deploy/init.sql ``` 例如本机 MySQL 用户名是 `root`,密码是 `123456`: ```bash mysql -uroot -p123456 exam_system < deploy/init.sql ``` 说明:`deploy/init.sql` 会创建项目需要的全部表,并初始化演示账号和基础数据。如果是已有数据库,执行前请先备份数据。 ### 3. 修改后端配置 后端配置文件位于: ```text backend/src/main/resources/application.yml ``` 项目支持通过环境变量覆盖数据库和 Redis 配置: | 配置项 | 说明 | 默认值 | | --- | --- | --- | | `MYSQL_URL` | MySQL 连接地址 | `jdbc:mysql://localhost:3306/exam_system?...` | | `MYSQL_USER` | MySQL 用户名 | `root` | | `MYSQL_PASSWORD` | MySQL 密码 | `123456` | | `REDIS_HOST` | Redis 地址 | 按自己的 Redis 地址配置 | | `REDIS_PORT` | Redis 端口 | `6379` | | `REDIS_PASSWORD` | Redis 密码 | 空 | | `JWT_SECRET` | JWT 密钥 | 开发环境默认值 | 如果 Redis 在本机运行,可以把 `REDIS_HOST` 设置为 `localhost`。 Windows PowerShell 示例: ```powershell $env:MYSQL_USER="root" $env:MYSQL_PASSWORD="123456" $env:REDIS_HOST="localhost" $env:REDIS_PORT="6379" ``` Linux/macOS 示例: ```bash export MYSQL_USER=root export MYSQL_PASSWORD=123456 export REDIS_HOST=localhost export REDIS_PORT=6379 ``` ### 4. 启动后端 ```bash cd backend mvn spring-boot:run ``` 后端默认地址: ```text http://localhost:8080 ``` ### 5. 启动前端 ```bash cd frontend npm install npm run dev ``` 前端默认地址: ```text http://localhost:5173 ``` ## Docker 部署 进入部署目录: ```bash cd deploy ``` 复制环境变量文件: ```bash copy .env.example .env ``` Linux/macOS 可使用: ```bash cp .env.example .env ``` 根据自己的服务器环境修改 `.env`: ```env MYSQL_PASSWORD=你的MySQL密码 REDIS_HOST=你的Redis地址 REDIS_PORT=6379 REDIS_PASSWORD=你的Redis密码 JWT_SECRET=请替换成更长的随机字符串 ``` 启动服务: ```bash docker compose up -d --build ``` ## 默认账号 | 角色 | 用户名 | 密码 | | --- | --- | --- | | 管理员 | admin | 123456 | | 教师 | teacher | 123456 | | 学生 | student | 123456 | 首次部署后建议登录系统修改默认账号密码。 ## 主要文档 - `docs/api.md`:接口说明 - `docs/database.md`:数据库设计 - `docs/learning-notes.md`:项目学习记录 - `deploy/init.sql`:数据库初始化脚本 ## 访问说明 本地开发时,前端运行在 `5173` 端口,后端运行在 `8080` 端口。部署到服务器后,可以通过 Nginx 将前端静态资源和后端接口统一代理到同一个域名下访问。