# fuxi **Repository Path**: livejerry/fuxi ## Basic Information - **Project Name**: fuxi - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-05-20 - **Last Updated**: 2026-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 题库复习系统 (Question Bank System) 基于 Spring Boot + PostgreSQL 17 的题库复习后端系统,支持单选题、多选题、判断题的练习和管理。 ## 功能特性 - ✅ 题目管理(CRUD、分类、搜索) - ✅ 答题练习(随机抽题、自动判分) - ✅ 错题本(自动记录、标记掌握) - ✅ 星级收藏(1-5星标记) - ✅ 统计分析(正确率、按题型/分类统计) - ✅ RESTful API ## 技术栈 - **后端框架**: Spring Boot 3.2.0 - **数据库**: PostgreSQL 17 - **ORM**: Spring Data JPA - **工具库**: Lombok, MapStruct - **Java版本**: 17+ ## 项目结构 ``` src/main/java/com/questionbank/ ├── QuestionBankApplication.java # 启动类 ├── config/ │ └── CorsConfig.java # CORS配置 ├── controller/ │ ├── QuestionController.java # 题目管理API │ ├── PracticeController.java # 答题练习API │ ├── WrongBookController.java # 错题本API │ └── StatisticsController.java # 统计分析API ├── service/ │ ├── QuestionService.java # 题目服务 │ ├── PracticeService.java # 答题服务 │ ├── WrongBookService.java # 错题本服务 │ └── StatisticsService.java # 统计服务 ├── repository/ │ ├── QuestionRepository.java # 题目数据访问 │ ├── AnswerRecordRepository.java # 答题记录数据访问 │ ├── WrongQuestionRepository.java # 错题本数据访问 │ └── QuestionFavoriteRepository.java # 收藏数据访问 ├── model/ │ ├── entity/ # 实体类 │ │ ├── Question.java │ │ ├── AnswerRecord.java │ │ ├── WrongQuestion.java │ │ └── QuestionFavorite.java │ ├── dto/ # 数据传输对象 │ │ ├── QuestionDTO.java │ │ ├── AnswerRequest.java │ │ ├── AnswerResult.java │ │ └── StatisticsVO.java │ └── enums/ # 枚举类型 │ └── QuestionType.java └── exception/ ├── BusinessException.java # 业务异常 ├── ApiResponse.java # 统一响应 └── GlobalExceptionHandler.java # 全局异常处理 ``` ## 快速开始 ### 1. 环境要求 - JDK 17+ - Maven 3.6+ - PostgreSQL 17 ### 2. 数据库配置 #### 创建数据库 ```sql CREATE DATABASE question_bank; ``` #### 执行建表脚本 ```bash psql -U postgres -d question_bank -f src/main/resources/db/schema.sql ``` 或者手动执行 `src/main/resources/db/schema.sql` 中的SQL语句。 #### 修改配置文件 编辑 `src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:postgresql://localhost:5432/question_bank username: postgres password: your_password # 修改为你的密码 ``` ### 3. 编译运行 ```bash # 编译项目 mvn clean package # 运行应用 mvn spring-boot:run ``` 应用将在 `http://localhost:8080` 启动。 ## API接口文档 ### 题目管理 `/api/questions` | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/questions` | 分页获取题目列表 | | GET | `/api/questions/{id}` | 获取单个题目详情 | | GET | `/api/questions/category/{category}` | 按分类获取题目 | | GET | `/api/questions/type/{type}` | 按题型获取题目 | | GET | `/api/questions/random` | 随机获取题目 | | GET | `/api/questions/search?keyword=xxx` | 搜索题目 | | GET | `/api/questions/star?starLevel=3` | 按星级查询 | | POST | `/api/questions` | 创建题目 | | PUT | `/api/questions/{id}` | 更新题目 | | PUT | `/api/questions/{id}/star?starLevel=5` | 更新题目星级 | | DELETE | `/api/questions/{id}` | 删除题目 | | GET | `/api/questions/categories` | 获取所有分类 | ### 答题练习 `/api/practice` | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/practice/answer` | 提交答案 | **请求示例:** ```json { "questionId": 1, "userAnswer": "A", "userId": "user001" } ``` **响应示例:** ```json { "isCorrect": true, "correctAnswer": "A", "explanation": "解析内容...", "questionInfo": { "id": 1, "content": "题目内容", "options": "[...]", "category": "01Chain" } } ``` ### 错题本 `/api/wrong-book` | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/wrong-book` | 获取未掌握的错题 | | GET | `/api/wrong-book/all` | 获取所有错题 | | GET | `/api/wrong-book/review` | 获取需要复习的错题 | | GET | `/api/wrong-book/details` | 获取错题详情(含题目) | | PUT | `/api/wrong-book/{questionId}/mastered` | 标记为已掌握 | | DELETE | `/api/wrong-book/{questionId}` | 从错题本移除 | | GET | `/api/wrong-book/count` | 统计错题数量 | **参数说明:** - `userId`: 用户ID(可选,默认 `default_user`) ### 统计分析 `/api/statistics` | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/statistics/overview` | 获取总体统计信息 | **响应示例:** ```json { "totalAnswers": 100, "correctAnswers": 80, "accuracyRate": 80.0, "wrongQuestionCount": 15, "typeStatistics": { "SINGLE_CHOICE": { "totalAnswers": 50, "correctAnswers": 45, "accuracyRate": 90.0 }, "MULTIPLE_CHOICE": { "totalAnswers": 30, "correctAnswers": 20, "accuracyRate": 66.67 } }, "categoryStatistics": { "01Chain": { "totalAnswers": 40, "correctAnswers": 35, "accuracyRate": 87.5 } } } ``` ## 数据库表结构 ### question (题目表) - `id`: 主键 - `type`: 题目类型 (SINGLE_CHOICE/MULTIPLE_CHOICE/TRUE_FALSE) - `content`: 题干内容 - `options`: 选项 (JSONB格式) - `answer`: 正确答案 - `explanation`: 答案解析 - `category`: 分类 - `difficulty`: 难度 (1-5) - `star_level`: 星级 (0-5) ### answer_record (答题记录表) - `id`: 主键 - `user_id`: 用户ID - `question_id`: 题目ID - `user_answer`: 用户答案 - `is_correct`: 是否正确 - `answered_at`: 答题时间 ### wrong_question (错题本表) - `id`: 主键 - `user_id`: 用户ID - `question_id`: 题目ID - `wrong_count`: 错误次数 - `last_wrong_at`: 最后错误时间 - `is_mastered`: 是否已掌握 ### question_favorite (收藏表) - `id`: 主键 - `user_id`: 用户ID - `question_id`: 题目ID - `star_level`: 星级 (1-5) - `favorited_at`: 收藏时间 ## 使用示例 ### 1. 获取随机题目 ```bash curl http://localhost:8080/api/questions/random?limit=5 ``` ### 2. 提交答案 ```bash curl -X POST http://localhost:8080/api/practice/answer \ -H "Content-Type: application/json" \ -d '{ "questionId": 1, "userAnswer": "A", "userId": "user001" }' ``` ### 3. 查看错题本 ```bash curl http://localhost:8080/api/wrong-book?userId=user001 ``` ### 4. 查看统计信息 ```bash curl http://localhost:8080/api/statistics/overview?userId=user001 ``` ### 5. 标记题目为5星 ```bash curl -X PUT http://localhost:8080/api/questions/1/star?starLevel=5 ``` ## 开发计划 - [ ] 添加用户认证 (Spring Security + JWT) - [ ] 实现批量导入题目 (Excel/CSV) - [ ] 添加学习报告生成 - [ ] 实现智能组卷功能 - [ ] 前端界面开发 (Vue/React) ## 注意事项 1. **PostgreSQL版本**: 本项目使用 PostgreSQL 17,确保数据库版本兼容 2. **JSONB字段**: options字段使用JSONB类型,需要PostgreSQL 9.4+ 3. **默认用户**: 如不传userId,系统使用 `default_user` 作为默认用户ID 4. **多选题答案**: 支持 "A,B,C" 或 "ABC" 格式,系统会自动标准化比较 ## 许可证 MIT License