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.

8.8 KiB

数学题目生成系统

项目简介

这是一个基于 Java 的命令行应用程序,用于为小学、初中和高中教师生成数学题目试卷。系统支持用户登录、题目查重、按难度生成题目,并保存为文本文件。

功能特点

  • 多角色登录:支持小学、初中、高中教师登录
  • 题目生成:根据学段生成不同难度的数学题目
  • 题目查重:自动检查题目是否重复,确保唯一性
  • 试卷保存:将生成的题目保存为带时间戳的文本文件
  • 模式切换:教师可在登录后切换出题学段
  • 多次生成:教师登录后能生成无限次试卷

项目结构图

GenerateMath/
├── doc/                           # 文档和资源目录
│   ├── 张三1/                     # 教师个人文件夹(存储生成的试卷)
│   ├── 张三2/
│   ├── 张三3/
│   ├── 李四1/
│   ├── 李四2/
│   ├── 李四3/
│   ├── 王五1/
│   ├── 王五2/
│   ├── 王五3/
│   ├── 小学老师账号密码本          # 小学教师认证文件(格式:用户名 密码)
│   ├── 初中老师账号密码本          # 初中教师认证文件
│   └── 高中老师账号密码本          # 高中教师认证文件
├── out/                           # 编译输出目录
├── src/                           # 源代码目录
│   ├── paper/                     # 试卷生成模块
│   │   ├── Paper.java             # 抽象试卷类(提供文件路径检查功能)
│   │   │   └── checkPath(File file) # 检查并创建文件路径
│   │   ├── PrimaryPaper.java      # 小学试卷生成
│   │   │   └── PrimaryPaper(int problemNumber, String teacherName) # 构造函数:生成小学试卷文件
│   │   ├── JuniorPaper.java       # 初中试卷生成
│   │   │   └── JuniorPaper(int problemNumber, String teacherName) # 构造函数:生成初中试卷文件
│   │   └── SeniorPaper.java       # 高中试卷生成
│   │       └── SeniorPaper(int problemNumber, String teacherName) # 构造函数:生成高中试卷文件
│   ├── problem/                   # 题目生成模块
│   │   ├── MathProblem.java       # 抽象题目类(定义题目基本结构)
│   │   │   ├── content            # 题目内容字符串
│   │   │   ├── op2[]              # 基础运算符数组(+,-,×,÷)
│   │   │   └── examine(String teacherName) # 抽象查重方法
│   │   ├── PrimaryMathProblem.java # 小学数学题目生成
│   │   │   ├── PrimaryMathProblem() # 构造函数生成2-5个数字的小学题目
│   │   │   └── examine(String teacherName) # 查重:检查教师文件夹中是否已有相同题目
│   │   ├── JuniorMathProblem.java  # 初中数学题目生成
│   │   │   ├── JuniorMathProblem() # 构造函数:生成含平方、开方的初中题目
│   │   │   ├── opBack[]           # 后缀运算符(平方、括号)
│   │   │   ├── opFront[]          # 前缀运算符(开方、括号)
│   │   │   └── examine(String teacherName) # 查重方法
│   │   └── SeniorMathProblem.java  # 高中数学题目生成
│   │       ├── SeniorMathProblem() # 构造函数:生成含三角函数的高中题目
│   │       ├── opBack[]           # 后缀运算符(平方、括号)
│   │       ├── opFront[]          # 前缀运算符(三角函数)
│   │       └── examine(String teacherName) # 查重方法
│   └── teacher/                   # 教师管理模块
│       ├── Teacher.java           # 抽象教师类(定义教师基本属性和行为)
│       │   ├── rank (枚举)        # 教师等级PRIMARY, JUNIOR, SENIOR
│       │   ├── mode               # 当前出题模式
│       │   ├── userName           # 教师用户名
│       │   ├── initMode()         # 抽象方法:初始化出题模式提示
│       │   └── generatePaper(int number) # 抽象方法:生成试卷
│       ├── PrimaryTeacher.java    # 小学教师类
│       │   ├── PrimaryTeacher(String name) # 构造函数
│       │   ├── initMode()         # 输出小学出题提示信息
│       │   └── generatePaper(int number) # 创建PrimaryPaper对象生成试卷
│       ├── JuniorTeacher.java     # 初中教师类
│       │   ├── JuniorTeacher(String name) # 构造函数
│       │   ├── initMode()         # 输出初中出题提示信息
│       │   └── generatePaper(int number) # 创建JuniorPaper对象生成试卷
│       └── SeniorTeacher.java     # 高中教师类
│           ├── SeniorTeacher(String name) # 构造函数
│           ├── initMode()         # 输出高中出题提示信息
│           └── generatePaper(int number) # 创建SeniorPaper对象生成试卷
│
├── Main.java                      # 程序主入口类
│   ├── primary/junior/senior (静态List) # 内置账号密码列表(备用验证)
│   ├── log1(String bookName, String password) # 内置账号验证方法
│   ├── log(String bookName, String password) # 文件账号验证方法(优先读取文件)
│   ├── generate(Teacher teacher)  # 交互式出题循环控制
│   └── main(String[] args)        # 主方法:处理登录和用户交互
├── README.md                      # 项目说明文档
└── 其他配置文件...                 # IDE配置文件等

目录说明

  • doc/: 存储教师生成的试卷文件和账号密码本
  • src/paper/: 试卷生成相关类,负责创建和保存试卷
  • src/problem/: 题目生成相关类,负责生成各类数学题目
  • src/teacher/: 教师管理相关类,处理教师登录和权限
  • out/: Java编译后的class文件输出目录

使用说明

登录系统

运行程序后,输入用户名和密码(格式:用户名 密码),系统会先根据密码本验证身份, 如果是使用jar包运行没有密码本的情况则会采用内部字符串数组匹配的方式验证身份验证成功后进入对应学段的出题模式。

预置账号:

难度 用户名 密码 默认难度
小学 张三1 123 小学
小学 张三2 123 小学
小学 张三3 123 小学
初中 李四1 123 初中
初中 李四2 123 初中
初中 李四3 123 初中
高中 王五1 123 高中
高中 王五2 123 高中
高中 王五3 123 高中

生成题目

登录成功后系统会提示输入题目数量10-30之间包括10和30输入后即可生成试卷并保存至 ./doc/教师姓名/ 目录下。

切换学段

在出题模式下,可输入以下指令切换学段:

  • 切换为小学
  • 切换为初中
  • 切换为高中

退出登录

输入 -1 可退出当前用户,返回登录界面。

题目类型示例

  • 小学:四则运算,如 12+34-56÷7=
  • 初中:含平方和开方,如 √25+3²=
  • 高中:含三角函数,如 sin30+cos60=

文件存储

  • 生成的试卷以当前时间命名,格式为:yyyy-MM-dd-HH-mm-ss.txt

  • 保存在对应用户的文件夹下,例如:./doc/张老师/2025-09-26-14-30-15.txt

  • 若不存在该路径,程序将自动在运行目录中创建该路径的相关文件夹

运行环境

  1. JDK 24.0.1及更高版本
  2. PowerShell控制台环境支持标准输入输出
  • 方式1不使用JAR包在GenerateMath文件夹下进入终端使用命令
    [Console]::InputEncoding = [System.Text.Encoding]::UTF8
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    java -cp "out\production\GenerateMath" Main -Dfile.encoding=UTF-8
  • 方式2使用JAR包在存放JAR包的文件目录下打开终端使用命令
    [Console]::InputEncoding = [System.Text.Encoding]::UTF8
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    java -jar GenerateMath.jar
  1. cmd模式下将PowerShell环境下的前两条命令修改为chcp 65001

注意

  1. 登陆时账号和密码之间只能间隔一个空格,且密码后不能携带任何空白字符
  2. 任何命令语句都要严格按照所给字符串输入,其前后不能携带任何空白字符
  3. 填写出题数量时数字前后不能携带任何空白字符

未来展望

未来可考虑添加以下功能:

  • 图形用户界面
  • 自定义题目模板
  • 试卷导出为多种格式