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.1 KiB

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

一、概述

该项目是一个基于 Java 的中小学数学卷子自动生成系统,支持小学、初中和高中三个难度级别,具备用户登录、题目生成、查重、文件存储等功能。

二、类

1.Start - 程序入口类

功能:

程序的启动入口,调用 Login 类启动登录流程。

方法:

main(String[] args) 启动程序,创建 Login 实例并调用其 Main() 方法。

2. Login - 用户登录类

功能:

处理用户登录、验证、权限管理和难度切换。

方法:

Main() 主登录循环,接收用户输入并验证。

initializeUserFile() 初始化用户文件 users.txt如果不存在则创建。

load() 从 users.txt 加载用户信息到内存。

Prove(String username, String password) 验证用户名和密码。

Success(User user, Scanner scanner) 登录成功后进入题目生成流程。

Switch(QuestionManager questionManager, String input) 切换题目生成难度。

getRole(String role):将英文角色转换为中文显示。

3. User - 用户信息类

功能:

封装用户的基本信息。

属性:

username 用户名

password 密码

role 角色primary/junior/senior

方法:

构造方法和 getter 方法

4. QuestionManager - 题目管理器

功能:

管理题目生成、文件存储和用户目录。

方法:

setRole(String role) 设置当前题目生成器(小学/初中/高中)。

createQuestionsDirectory() 创建用户题目存储目录。

generateQuestions(int count) 生成指定数量的题目并保存到文件。

getCurrentRoleChinese() 返回当前难度的中文名称。

getUserQuestionFiles(String username) 获取用户所有题目文件(用于查重)。

5. QuestionGenerator - 题目生成器接口

功能:

定义题目生成器的基本行为。

方法:

generateQuestion() 生成一道题目。

normalizeQuestion(String question) 标准化题目格式用于比较。

generateOperator(String[] operators) 随机生成运算符。

isValidParentheses(String expression) 验证括号是否合法。

6. AbstractQuestionGenerator - 抽象题目生成器

功能:

提供题目生成的通用方法和查重机制。

方法:

setUsername(String username) 设置用户名并加载历史题目。

loadExistingQuestions() 加载用户已生成的题目用于查重。

normalizeQuestion(String question) 去除空格标准化题目。

generateNumber() 生成 1~100 的随机数。

isQuestionUnique(String question) 判断题目是否重复。

isValidParentheses(String expression) 验证括号是否合法且不冗余。

ensureBalancedParentheses(String expression) 确保括号成对出现。

7. PrimaryQuestionGenerator - 小学题目生成器

功能:

生成小学难度题目,仅包含加减乘除和括号。

方法:

generateQuestion() 生成小学题目,支持括号和多个操作数。

addReasonableParentheses(String expression, int operandCount) 随机添加合理括号。

8. JuniorQuestionGenerator - 初中题目生成器

功能:

生成初中难度题目,至少包含一个平方或开方运算。

方法:

generateQuestion() 生成初中题目,确保包含平方或开方。

AddSpecialOperator(...) 添加平方或开方运算符。

hasProperOperatorSpacing(String expression) 检查运算符间距是否合理。

9. SeniorQuestionGenerator - 高中题目生成器

功能:

生成高中难度题目至少包含一个三角函数sin/cos/tan支持嵌套。

方法:

generateQuestion() 生成高中题目,确保包含三角函数。

AddTrigOperator(...) 添加三角函数运算符。

ForceAddTrigOperator(...) 若未包含三角函数,则强制添加。

Revise(String expression) 调整括号位置,避免语法错误。

三、流程

1.登录流程

1用户输入用户名和密码

2系统验证身份并显示角色

3用户选择生成题目数量或切换难度

4系统生成题目并保存到用户目录。

2.题目生成流程

1根据难度选择对应的生成器

2生成操作数和运算符

3添加括号和特殊运算符初中/高中);

4查重和括号合法性检查

5保存到文件格式为 年-月-日-时-分-秒.txt。

3.文件存储结构

src
├── questions/
|       └── 用户名/
|             ├── 2025-09-20-10-30-45.txt
|             └── 2025-09-20-10-35-22.txt
└── users.txt

4.难度特征

难度 运算符类型 特殊要求
小学 +, -, ×, ÷ 可含括号
初中 +, -, ×, ÷, ², √ 至少一个平方或开方
高中 +, -, ×, ÷, sin, cos, tan 至少一个三角函数,可嵌套

四、运行

1. Linux bash

~/src$ javac *.java
~/src$ java Start
已创建users.txt
Loading...

---------登录系统---------
请输入用户名和密码(用空格隔开):

或先生成jar

~/src$ javac *.java
~/src$ jar -cfve main.jar Start *.class
已添加清单
正在添加: AbstractQuestionGenerator.class(输入 = 4777) (输出 = 2649)(压缩了 44%)
正在添加: JuniorQuestionGenerator.class(输入 = 3654) (输出 = 2095)(压缩了 42%)
正在添加: Login.class(输入 = 5877) (输出 = 3401)(压缩了 42%)
正在添加: PrimaryQuestionGenerator.class(输入 = 2048) (输出 = 1203)(压缩了 41%)
正在添加: QuestionGenerator.class(输入 = 356) (输出 = 199)(压缩了 44%)
正在添加: QuestionManager.class(输入 = 4097) (输出 = 2204)(压缩了 46%)
正在添加: SeniorQuestionGenerator.class(输入 = 4577) (输出 = 2454)(压缩了 46%)
正在添加: Start.class(输入 = 308) (输出 = 238)(压缩了 22%)
正在添加: User.class(输入 = 1121) (输出 = 540)(压缩了 51%)
~/src$ java -jar main
Error: Unable to access jarfile main
~/src$ java -jar main.jar
已创建users.txt
Loading...

---------登录系统---------
请输入用户名和密码(用空格隔开):

2.Windows cmd

D:\src>chcp 65001
Active code page: 65001

D:\src>java Start.java
已创建users.txt
Loading...

---------登录系统---------
请输入用户名和密码(用空格隔开):

D:\src>chcp 65001
Active code page: 65001

D:\src>javac -encoding UTF-8 *.java

D:\src>java Start
已创建users.txt
Loading...

---------登录系统---------
请输入用户名和密码(用空格隔开):

或先生成jar

D:\src>chcp 65001
Active code page: 65001

D:\src>javac -encoding UTF-8 *.java

D:\src>jar cfve main.jar Start *.class
已添加清单
正在添加: AbstractQuestionGenerator.class(输入 = 4777) (输出 = 2647)(压缩了 44%)
正在添加: JuniorQuestionGenerator.class(输入 = 3654) (输出 = 2095)(压缩了 42%)
正在添加: Login.class(输入 = 5877) (输出 = 3402)(压缩了 42%)
正在添加: PrimaryQuestionGenerator.class(输入 = 2048) (输出 = 1203)(压缩了 41%)
正在添加: QuestionGenerator.class(输入 = 356) (输出 = 199)(压缩了 44%)
正在添加: QuestionManager.class(输入 = 4097) (输出 = 2204)(压缩了 46%)
正在添加: SeniorQuestionGenerator.class(输入 = 4577) (输出 = 2454)(压缩了 46%)
正在添加: Start.class(输入 = 308) (输出 = 238)(压缩了 22%)
正在添加: User.class(输入 = 1121) (输出 = 539)(压缩了 51%)

D:\src>java -jar main.jar
已创建users.txt
Loading...

---------登录系统---------
请输入用户名和密码(用空格隔开):

3.Windows PowerShell

与cmd类似只需将

D:\src>chcp 65001

换成

PS D:\src> [Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8