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.7 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文件输出目录

类说明

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

使用说明

登录系统

运行程序后,输入用户名和密码(格式:用户名 密码),系统会根据密码本验证身份并进入对应学段的出题模式。

生成题目

登录成功后系统会提示输入题目数量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. Java 8 或更高版本的IDE
  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. 填写出题数量时数字前后不能携带任何空白字符

未来展望

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

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