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.
3.7 KiB
3.7 KiB
中小学数学卷子自动生成程序
项目简介
本项目提供一个命令行工具,为小学、初中和高中三个难度层级的教师批量生成数学试题。程序支持账号登录、难度切换、去重出题与试卷归档,便于教师快速准备不同难度的练习卷。
核心特性
- 登录鉴权:内置九个教师账号,登录后自动匹配题目难度。
- 统一接口:
QuestionGenerator接口抽象题目生成行为,三种学段实现类分别负责小学、初中、高中题目生成,便于扩展新的学段。 - 去重出题:
QuestionGenerationService在题目生成前加载账号历史题库,并在生成过程中对照Set<String>做查重,确保同一账号生成的题目不重复。 - 多轮出题:同一账号可在一次登录会话中多次生成试题,历史集合会随着新题目更新,避免再生成到旧题。
- 结果持久化:
QuestionStorageService以generated_questions/<用户名>/为根目录,按时间戳创建YYYY-MM-DD-HH-mm-ss.txt文件保存题目,格式包含题号与空行。 - 难度切换:输入
切换为小学|初中|高中即可在登录状态下转换出题难度。
运行指南
首先确保您当前电脑正确配置 java 环境并且要求 JDK 版本在 21 及以上 进入可执行 jar 包 smarthomework.jar 所在的目录
-
macOS (zsh)
java -jar smarthomework.jar -
Linux (Bash/zsh)
java -jar smarthomework.jar -
Windows 命令提示符 (CMD)
- 打开 CMD,切换编码并锁定 UTF-8:
chcp 65001 set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 - 进入项目根目录并运行应用:
java -jar smarthomework.jar
- 打开 CMD,切换编码并锁定 UTF-8:
-
Windows 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:难度枚举,提供展示名称与解析能力。
查重原理
- 登录成功后,应用调用
QuestionStorageService.loadExistingQuestions(username),读取该账号历史文件,去除题号后存入集合。 - 生成新题目时,
QuestionGenerationService.generateUniqueQuestions会在每次生成后检查:- 是否出现在历史集合;
- 是否在当前批次已出现。 不满足条件的题目将被丢弃并重新生成,最多尝试 10,000 次。
- 成功生成题目后,应用写入文件并将新题加入历史集合,确保后续批次继续去重。
目录结构
src/ Java 源码(遵循 Google Java Style)
doc/README.md 项目说明文档
generated_questions/ 程序运行后生成的题目文件夹