# 工程伦理课程在线考试系统 **Repository Path**: zhoujie147/onlineExamSystem ## Basic Information - **Project Name**: 工程伦理课程在线考试系统 - **Description**: 工程伦理课程在线考试系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-10 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工程伦理课程在线考试系统 ## 一、项目概述 本项目是一个 **工程伦理课程在线考试系统**,采用 **前后端分离架构**,支持管理员、教师、学生三类角色,实现用户管理、权限控制、试卷管理、题库管理、在线答卷与个人信息维护等功能。 - **后端技术栈**:Spring Boot 3、MyBatis-Plus、Sa-Token、Redis、MySQL - **前端技术栈**:Vue 3、Vite、TypeScript、Naive UI、Pinia、Vue Router、Axios、vicons/ionicons5 - **数据库**:MySQL(默认库名 `engineering_exam`) - **缓存/会话**:Redis - **主题主色**:`#18A058`(Naive UI 主题已统一配置) 目录结构大致如下: - `exam-backend/`:后端 Spring Boot 服务 - `exam-frontend/`:前端 Vue 3 单页应用 --- ## 二、功能模块说明 ### 1. 角色与权限 系统包含两大类角色: - **管理员(admin)** - 管理老师和学生的账户(增删改查) - 基本权限控制:只能访问管理员相关接口和页面 - **用户(teacher / student)** - 教师(teacher):管理题库、试卷、阅卷等 - 学生(student):在线参加考试、查看成绩、维护个人信息 后端使用 **Sa-Token** 做登录与权限控制: - `/api/auth/login`:登录,返回 token 和当前用户信息 - `/api/auth/logout`:退出登录 - `/api/auth/me`:获取当前登录用户信息 - `@SaCheckRole("admin")`:限制接口仅管理员可访问 ### 2. 后端主要模块 后端入口:`exam-backend/src/main/java/com/example/exam/ExamBackendApplication.java` 核心配置与工具: - `config/MyBatisPlusConfig.java`:MyBatis-Plus 分页插件配置 - `config/MyMetaObjectHandler.java`:自动填充 `createTime`、`updateTime`、`deleted` 等字段 - `config/SaTokenConfig.java`:Sa-Token 拦截器与 CORS 配置 - `common/ApiResponse.java`:统一返回结果封装 - `common/PageResult.java`:分页返回结构 数据实体(部分): - `entity/User.java`:用户表(管理员/教师/学生) - `entity/QuestionBank.java`:题库 - `entity/Question.java`:题目(单选 / 多选 / 简答) - `entity/ExamPaper.java`:试卷 - `entity/ExamPaperQuestion.java`:试卷与题目关联 - `entity/AnswerSheet.java`:答卷(一次考试记录) - `entity/AnswerDetail.java`:答卷明细(每道题的作答情况) 控制器: - `controller/AuthController.java` - `POST /api/auth/login`:登录(示例中使用 MD5 验证密码) - `POST /api/auth/logout`:登出 - `GET /api/auth/me`:获取当前用户信息 - `controller/UserController.java` - `GET /api/user/page`:管理员分页查询用户列表(支持关键字、角色过滤) - `POST /api/user`:管理员新增用户 - `PUT /api/user/{id}`:管理员更新用户 - `DELETE /api/user/{id}`:管理员删除用户(逻辑删除) - `PUT /api/user/profile`:当前登录用户修改个人信息(姓名/手机/邮箱) > 试卷管理、题库管理、答卷管理等接口目前预留了实体与 Mapper,可以按需求继续扩展。 ### 3. 数据库结构 后端提供了建表脚本:`exam-backend/src/main/resources/db/schema.sql`。 主要表: - `sys_user`:用户表(含 `username`、`password`、`role` 等) - `question_bank`:题库 - `question`:题目 - `exam_paper`:试卷 - `exam_paper_question`:试卷-题目关联 - `answer_sheet`:答卷(学生整张试卷) - `answer_detail`:答卷题目明细 脚本中包含一个默认管理员账号: - **用户名**:`admin` - **密码**:`123456`(以 `MD5` 方式存入数据库) --- ## 三、前端结构与路由 前端入口:`exam-frontend/src/main.ts` 主组件:`exam-frontend/src/App.vue`(内置 Naive UI 主题配置,主色 `#18A058`)。 ### 1. 路由设计(`src/router/index.ts`) - `/login`:登录页(公开) - `/` + `AdminLayout` - `/dashboard`:系统概览(根据角色显示不同提示) - `/admin/users`:用户管理(仅管理员) - `/teacher/papers`:试卷管理(教师,占位) - `/teacher/banks`:题库管理(教师,占位) - `/user` + `UserLayout` - `/user/profile`:个人信息维护 - `/user/exams`:考试列表(占位) - `/user/exams/:id`:答卷页面(占位) 路由守卫: - 未登录访问受保护路由时自动跳转到 `/login` - 根据 `meta.role` 进行简单的角色访问控制,禁止跨角色访问页面 ### 2. 状态与请求 - `src/store/user.ts`(Pinia Store) - 保存 `token` 与 `user` 信息 - `login()`:调用 `/api/auth/login` 完成登录 - `fetchMe()`:刷新当前用户信息 - `restore()`:从 `localStorage` 恢复登录状态 - `logout()`:本地退出(可扩展调用后端登出) - `src/utils/request.ts`(Axios 封装) - 请求拦截器自动注入 `Authorization: Bearer ` 头 - 与后端 `sa-token` 的 `token-name: Authorization`、`token-prefix: Bearer` 对应 ### 3. 主要页面 - `views/auth/Login.vue`:登录页 - 使用 Naive UI 表单组件,默认填充 `admin / 123456` 方便测试 - 登录成功后跳转到 `/dashboard` 或指定的 `redirect` - `views/layout/AdminLayout.vue`:管理员/教师主布局 - 左侧导航菜单根据用户角色动态展示 - `views/layout/UserLayout.vue`:学生中心布局 - `views/dashboard/Dashboard.vue`:系统概览 - `views/admin/UserManage.vue`: - 与后端用户管理接口联通 - 支持:分页、搜索、角色筛选、新增/编辑/删除用户 - `views/teacher/*`、`views/user/*`:试卷管理、题库管理、考试列表与答卷页面,目前为占位页面,可按需求继续完善。 --- ## 四、环境与配置 ### 1. 数据库(MySQL) 默认连接信息(可在 `exam-backend/src/main/resources/application.yml` 中修改): - 地址:`localhost:3306` - 数据库:`engineering_exam` - 用户:`root` - 密码:`123456` 初始化步骤: 1. 在 MySQL 中执行脚本:`exam-backend/src/main/resources/db/schema.sql` 2. 确认创建了数据库、表以及默认 `admin` 账号 ### 2. Redis 默认配置在 `application.yml` 中: - 地址:`localhost:6379` - 无密码 请确保本机已安装并启动 Redis 服务。 --- ## 五、启动步骤 ### 1. 启动后端(Spring Boot) 1. 进入后端目录: ```bash cd exam-backend ``` 2. 使用 Maven 启动(需本地安装 JDK 17+ 与 Maven): ```bash mvn spring-boot:run ``` 或在 IDE 中直接运行 `ExamBackendApplication` 主类。 后端默认启动端口:`http://localhost:8080` ### 2. 启动前端(Vue 3 + Vite) 1. 进入前端目录: ```bash cd exam-frontend ``` 2. 安装依赖: ```bash npm install ``` 3. 启动开发服务器: ```bash npm run dev ``` 前端默认访问地址:`http://localhost:5173` (`vite.config.ts` 中已配置 `/api` 代理到 `http://localhost:8080`)。 --- ## 六、快速体验 1. 确保 MySQL 与 Redis 已启动,并执行了 `schema.sql` 2. 启动后端服务(8080) 3. 启动前端服务(5173) 4. 浏览器访问 `http://localhost:5173` 5. 使用默认管理员账号登录: - 用户名:`admin` - 密码:`123456` 6. 进入系统后可体验: - 管理员:在“用户管理”中新增教师/学生账号 - 教师/学生:后续可基于现有占位页面继续扩展试卷、题库与答卷功能 --- ## 七、后续可扩展方向 - 试卷管理:支持手动组卷、从题库随机组卷、试卷批量导入/导出 - 题库管理:支持 Excel/CSV 批量导入题目,按知识点、难度分类 - 答卷与阅卷:客观题自动判分,主观题教师阅卷打分 - 成绩统计:按班级、学生、试卷维度进行统计分析与导出 - 更完善的权限系统:引入角色-权限表,支持更细粒度的菜单与接口控制