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

中小学数学卷子自动生成程序

项目简介

本项目提供一个命令行工具,为小学、初中和高中三个难度层级的教师批量生成数学试题。程序支持账号登录、难度切换、去重出题与试卷归档,便于教师快速准备不同难度的练习卷。

核心特性

  • 登录鉴权:内置九个教师账号,登录后自动匹配题目难度。
  • 统一接口:QuestionGenerator 接口抽象题目生成行为,三种学段实现类分别负责小学、初中、高中题目生成,便于扩展新的学段。
  • 去重出题:QuestionGenerationService 在题目生成前加载账号历史题库,并在生成过程中对照 Set<String> 做查重,确保同一账号生成的题目不重复。
  • 多轮出题:同一账号可在一次登录会话中多次生成试题,历史集合会随着新题目更新,避免再生成到旧题。
  • 结果持久化:QuestionStorageServicegenerated_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)

    1. 打开 CMD切换编码并锁定 UTF-8
      chcp 65001
      set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
      
    2. 进入项目根目录并运行应用:
      java -jar smarthomework.jar
      
  • 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:难度枚举,提供展示名称与解析能力。

查重原理

  1. 登录成功后,应用调用 QuestionStorageService.loadExistingQuestions(username),读取该账号历史文件,去除题号后存入集合。
  2. 生成新题目时,QuestionGenerationService.generateUniqueQuestions 会在每次生成后检查:
    • 是否出现在历史集合;
    • 是否在当前批次已出现。 不满足条件的题目将被丢弃并重新生成,最多尝试 10,000 次。
  3. 成功生成题目后,应用写入文件并将新题加入历史集合,确保后续批次继续去重。

目录结构

src/                    Java 源码(遵循 Google Java Style
doc/README.md           项目说明文档
generated_questions/    程序运行后生成的题目文件夹