You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 中小学数学卷子自动生成程序
## 项目简介
本项目提供一个命令行工具,为小学、初中和高中三个难度层级的教师批量生成数学试题。程序支持账号登录、难度切换、去重出题与试卷归档,便于教师快速准备不同难度的练习卷。
## 核心特性
- 登录鉴权:内置九个教师账号,登录后自动匹配题目难度。
- 统一接口:`QuestionGenerator` 接口抽象题目生成行为,三种学段实现类分别负责小学、初中、高中题目生成,便于扩展新的学段。
- 去重出题:`QuestionGenerationService` 在题目生成前加载账号历史题库,并在生成过程中对照 `Set<String>` 做查重,确保同一账号生成的题目不重复。
- 多轮出题:同一账号可在一次登录会话中多次生成试题,历史集合会随着新题目更新,避免再生成到旧题。
- 结果持久化:`QuestionStorageService` 以 `generated_questions/<用户名>/` 为根目录,按时间戳创建 `YYYY-MM-DD-HH-mm-ss.txt` 文件保存题目,格式包含题号与空行。
- 难度切换:输入 `切换为小学|初中|高中` 即可在登录状态下转换出题难度。
## 运行指南
首先确保您当前电脑正确配置 java 环境并且要求 JDK 版本在 21 及以上
进入可执行 jar 包 smarthomework.jar 所在的目录
- **macOS (zsh)**
```bash
java -jar smarthomework.jar
```
- **Linux (Bash/zsh)**
```bash
java -jar smarthomework.jar
```
- **Windows 命令提示符 (CMD)**
1. 打开 CMD切换编码并锁定 UTF-8
```cmd
chcp 65001
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
```
2. 进入项目根目录并运行应用:
```cmd
java -jar smarthomework.jar
```
- **Windows PowerShell**
```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
$env:JAVA_TOOL_OPTIONS = '-Dfile.encoding=UTF-8'
java -jar smarthomework.jar
```
登录后按提示输入“用户名 密码”(空格分隔),示例:`张三1 123`。随后根据提示输入题目数量10-30 之间)生成试卷,或输入 `切换为小学|初中|高中` 调整难度,输入 `-1` 退出当前账号。程序会在 `generated_questions/<用户名>/` 目录下生成文本文件,可重复登录查看或继续生成。
## 模块结构概览
- `com.personalproject.MathExamApplication`:程序入口,负责登录流程、命令解析与服务编排。
- `com.personalproject.auth`:账户仓库与账号模型,封装登录验证逻辑。
- `com.personalproject.generator`:题目生成接口与各学段实现。
- `com.personalproject.service.QuestionGenerationService`:批量生成题目、查重与尝试次数控制。
- `com.personalproject.storage.QuestionStorageService`:题目读取、去重资源加载与结果落盘。
- `com.personalproject.model.DifficultyLevel`:难度枚举,提供展示名称与解析能力。
## 查重原理
1. 登录成功后,应用调用 `QuestionStorageService.loadExistingQuestions(username)`,读取该账号历史文件,去除题号后存入集合。
2. 生成新题目时,`QuestionGenerationService.generateUniqueQuestions` 会在每次生成后检查:
- 是否出现在历史集合;
- 是否在当前批次已出现。
不满足条件的题目将被丢弃并重新生成,最多尝试 10,000 次。
3. 成功生成题目后,应用写入文件并将新题加入历史集合,确保后续批次继续去重。
## 目录结构
```
src/ Java 源码(遵循 Google Java Style
doc/README.md 项目说明文档
generated_questions/ 程序运行后生成的题目文件夹
```