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.

7.5 KiB

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

项目简介

这是一个命令行界面的数学题目自动生成程序,专为小学、初中和高中数学老师设计。程序可以根据不同难度级别(小学、初中、高中)自动生成符合相应教学要求的数学题目,并支持题目查重功能,确保每位老师生成的题目不会重复。

功能特点

1. 用户登录验证

  • 支持小学、初中和高中三个级别的用户账号
  • 每个级别预设3个账号密码统一为123
  • 登录成功后显示当前选择的出题级别
  • 支持用户退出功能,可重新登录

2. 题目生成功能

  • 根据账号类型自动选择对应的难度级别生成题目
  • 支持自定义生成题目数量范围10-30题
  • 操作数范围1-100
  • 操作数个数1-5个
  • 生成题目时实时显示题目内容

3. 多难度级别支持

  • 小学:仅包含加减乘除四则运算和括号,支持随机括号嵌套
  • 初中在小学基础上增加平方和开根号运算题目包含1-5个操作数若只有1个操作数则必须是平方或根号表达式确保每道题至少包含一个平方或开根号
  • 高中在初中基础上增加三角函数sin、cos、tan题目包含1-5个操作数但若只有1个操作数则强制为三角函数表达式确保每道题至少包含一个三角函数

4. 题目类型切换

  • 支持在登录状态下切换不同难度级别的题目生成
  • 输入格式:切换为 小学/初中/高中
  • 切换成功后系统清屏并提示新的难度级别

5. 题目查重功能

  • 自动检测新生成的题目是否与当前用户历史生成的题目重复
  • 设置最大尝试次数,防止在题库不足时陷入死循环
  • 确保每个用户生成的题目都是唯一的

6. 文件保存功能

  • 题目以文本文件形式保存
  • 文件名格式:yyyy-MM-dd-HH-mm-ss.txt(基于生成时间)
  • 每个用户有独立的文件夹存储题目(文件夹名为用户名)
  • 题目包含题号,每题之间空一行,便于阅读

使用说明

登录

  1. 运行程序后,输入用户名和密码(用空格分隔)
  2. 验证成功后,系统提示当前选择的出题级别
  3. 验证失败则提示重新输入

生成题目

  1. 登录成功后,系统提示输入题目数量
  2. 输入10-30之间的数字生成对应数量的题目
  3. 系统将显示生成的题目并保存到用户文件夹
  4. 输入-1退出当前用户返回登录界面

切换难度

  • 在任何提示输入题目数量的界面,输入切换为 小学/初中/高中即可切换题目难度
  • 切换成功后,系统会提示新的难度级别
  • 输入无效时,系统会提示错误信息并保持当前难度

账号列表

级别 用户名 密码
小学 张三1 123
小学 张三2 123
小学 张三3 123
初中 李四1 123
初中 李四2 123
初中 李四3 123
高中 王五1 123
高中 王五2 123
高中 王五3 123

项目结构

relentless1/
├── src/                 # 源代码目录
│   ├── Main.java                 # 程序入口类
│   ├── User.java                 # 用户类
│   ├── MathQuestion.java         # 数学题目类
│   ├── QuestionGenerator.java    # 题目生成器
│   ├── QuestionStrategy.java     # 题目策略接口
│   ├── QuestionStrategyFactory.java  # 策略工厂类
│   ├── ElementaryQuestionStrategy.java  # 小学题目策略
│   ├── MiddleSchoolQuestionStrategy.java # 初中题目策略
│   ├── HighSchoolQuestionStrategy.java   # 高中题目策略
│   └── FileUtils.java            # 文件操作工具类
├── doc/                 # 文档目录
│   └── README.md        # 项目说明文档
└── [用户名]/            # 用户题目文件夹(运行时自动创建)

技术实现

设计模式

  • 策略模式:通过QuestionStrategy接口定义题目生成策略,不同难度级别(小学、初中、高中)实现各自的题目生成算法
  • 工厂模式:通过QuestionStrategyFactory根据用户角色动态创建对应的题目生成策略对象

核心类功能

Main.java

  • 程序入口,处理用户交互逻辑
  • 实现登录流程、题目数量输入和难度切换功能
  • 包含清屏方法,提升用户体验

User.java

  • 表示用户实体,包含用户名、密码和角色属性
  • 提供静态登录方法,验证用户凭据
  • 用户信息硬编码在程序中每个角色有3个预设账号

QuestionGenerator.java

  • 根据用户角色使用对应策略生成题目
  • 实现题目查重逻辑,确保题目唯一性
  • 协调策略选择、题目生成和文件保存

QuestionStrategy.java及其实现类

  • QuestionStrategy:定义题目生成的接口
  • ElementaryQuestionStrategy:实现小学题目的生成,包含加减乘除和括号
  • MiddleSchoolQuestionStrategy实现初中题目生成增加平方和开根号运算题目包含1-5个操作数单操作数题目强制为平方或根号表达式确保每道题至少包含一个平方或开根号
  • HighSchoolQuestionStrategy实现高中题目生成增加三角函数sin、cos、tan运算题目包含1-5个操作数单操作数题目强制为三角函数表达式确保每道题至少包含一个三角函数

MathQuestion.java

  • 表示单道数学题,包含题号和题目内容

FileUtils.java

  • 提供文件操作工具方法
  • 生成时间戳格式的文件名
  • 保存题目到用户文件夹
  • 加载用户历史题目进行查重

算法特点

  1. 小学题目:支持随机括号位置,确保数学表达式的多样性
  2. 初中题目
    • 题目包含1-5个操作数
    • 若只有1个操作数则必须是平方或根号表达式
    • 有50%概率生成平方或根号操作数
    • 确保每道题至少有一个平方或开根号运算
  3. 高中题目
    • 题目包含1-5个操作数
    • 若只有1个操作数则强制生成三角函数表达式
    • 支持sin、cos、tan三种三角函数
    • 确保每道题至少有一个三角函数
  4. 查重机制使用HashSet高效检测重复题目设置最大尝试次数避免死循环

运行环境

  • Java 8及以上版本
  • 支持Windows和Linux操作系统清屏功能自适应

扩展建议

  1. 添加自定义操作数范围和运算符的功能
  2. 实现题目答案自动计算功能
  3. 支持更多类型的数学表达式和运算符号
  4. 添加图形用户界面,提升用户体验
  5. 实现用户注册和密码修改功能
  6. 支持题目导入导出功能

编译与运行

Windows PowerShell编码设置 (重要)

注意在Windows PowerShell控制台运行程序前请先执行以下命令设置编码否则可能导致中文显示错误或运行的异常

[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8

通过源代码编译运行

  1. 编译:javac -d out src/*.java
  2. 运行:java -cp out Main

通过JAR包运行

  1. 直接运行JAR包java -jar out/artifacts/relentless1_jar/relentless1.jar

注意事项

  1. 题目数量必须在10-30之间否则会提示重新输入
  2. 切换难度时,请确保输入格式正确:切换为 级别名称
  3. 程序会在当前目录下创建用户文件夹存储题目文件
  4. 为保证查重功能正常,请勿手动修改用户文件夹中的题目文件格式