From 1b3e5097d329a0fcde46cfe5a4f51169b3d0b893 Mon Sep 17 00:00:00 2001
From: hs0120 <3045193232@qq.com>
Date: Sat, 27 Sep 2025 18:43:53 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 55 ++++++++++
META-INF/MANIFEST.MF | 3 +
doc/README.md | 164 ++++++++++++++++++++++++++++
doc/初中老师账号密码本 | 3 +
doc/小学老师账号密码本 | 3 +
doc/张三1/2025-09-27-16-45-19.txt | 20 ++++
doc/张三2/2025-09-27-18-37-59.txt | 20 ++++
doc/张三2/2025-09-27-18-38-06.txt | 40 +++++++
doc/张三2/2025-09-27-18-38-11.txt | 60 ++++++++++
doc/李四1/2025-09-27-17-55-52.txt | 40 +++++++
doc/李四1/2025-09-27-17-56-59.txt | 44 ++++++++
doc/高中老师账号密码本 | 3 +
src/Main.java | 97 ++++++++++++++++
src/paper/JuniorPaper.java | 41 +++++++
src/paper/Paper.java | 17 +++
src/paper/PrimaryPaper.java | 41 +++++++
src/paper/SeniorPaper.java | 41 +++++++
src/problem/JuniorMathProblem.java | 76 +++++++++++++
src/problem/MathProblem.java | 10 ++
src/problem/PrimaryMathProblem.java | 59 ++++++++++
src/problem/SeniorMathProblem.java | 77 +++++++++++++
src/teacher/JuniorTeacher.java | 21 ++++
src/teacher/PrimaryTeacher.java | 21 ++++
src/teacher/SeniorTeacher.java | 21 ++++
src/teacher/Teacher.java | 19 ++++
25 files changed, 996 insertions(+)
create mode 100755 .gitignore
create mode 100755 META-INF/MANIFEST.MF
create mode 100755 doc/README.md
create mode 100755 doc/初中老师账号密码本
create mode 100755 doc/小学老师账号密码本
create mode 100755 doc/张三1/2025-09-27-16-45-19.txt
create mode 100755 doc/张三2/2025-09-27-18-37-59.txt
create mode 100755 doc/张三2/2025-09-27-18-38-06.txt
create mode 100755 doc/张三2/2025-09-27-18-38-11.txt
create mode 100755 doc/李四1/2025-09-27-17-55-52.txt
create mode 100755 doc/李四1/2025-09-27-17-56-59.txt
create mode 100755 doc/高中老师账号密码本
create mode 100755 src/Main.java
create mode 100755 src/paper/JuniorPaper.java
create mode 100755 src/paper/Paper.java
create mode 100755 src/paper/PrimaryPaper.java
create mode 100755 src/paper/SeniorPaper.java
create mode 100755 src/problem/JuniorMathProblem.java
create mode 100755 src/problem/MathProblem.java
create mode 100755 src/problem/PrimaryMathProblem.java
create mode 100755 src/problem/SeniorMathProblem.java
create mode 100755 src/teacher/JuniorTeacher.java
create mode 100755 src/teacher/PrimaryTeacher.java
create mode 100755 src/teacher/SeniorTeacher.java
create mode 100755 src/teacher/Teacher.java
diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..12220da
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,55 @@
+# 编译后的类文件
+*.class
+
+# 打包文件
+*.jar
+*.war
+*.ear
+
+# IDE 文件
+/.idea/
+/.settings/
+/*.iml
+/*.ipr
+/*.iws
+
+# 构建工具目录
+/target/
+/build/
+/out/
+
+# 日志文件
+*.log
+
+# 系统文件
+.DS_Store
+Thumbs.db### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
+
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..64f0ac9
--- /dev/null
+++ b/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: Main
+Class-Path: .
diff --git a/doc/README.md b/doc/README.md
new file mode 100755
index 0000000..71940b4
--- /dev/null
+++ b/doc/README.md
@@ -0,0 +1,164 @@
+# 数学题目生成系统
+
+## 项目简介
+
+这是一个基于 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`
+3. cmd模式下:将PowerShell环境下的前两条命令修改为`chcp 65001`
+
+## 注意
+1. 登陆时账号和密码之间只能间隔一个空格,且密码后不能携带任何空白字符
+2. 任何命令语句都要严格按照所给字符串输入,其前后不能携带任何空白字符
+3. 填写出题数量时数字前后不能携带任何空白字符
+
+
+## 未来展望
+
+未来可考虑添加以下功能:
+- 图形用户界面
+- 自定义题目模板
+- 试卷导出为多种格式
\ No newline at end of file
diff --git a/doc/初中老师账号密码本 b/doc/初中老师账号密码本
new file mode 100755
index 0000000..07660c5
--- /dev/null
+++ b/doc/初中老师账号密码本
@@ -0,0 +1,3 @@
+李四1 123
+李四2 123
+李四3 123
\ No newline at end of file
diff --git a/doc/小学老师账号密码本 b/doc/小学老师账号密码本
new file mode 100755
index 0000000..fb7ca23
--- /dev/null
+++ b/doc/小学老师账号密码本
@@ -0,0 +1,3 @@
+张三1 123
+张三2 123
+张三3 123
diff --git a/doc/张三1/2025-09-27-16-45-19.txt b/doc/张三1/2025-09-27-16-45-19.txt
new file mode 100755
index 0000000..ea8d5b3
--- /dev/null
+++ b/doc/张三1/2025-09-27-16-45-19.txt
@@ -0,0 +1,20 @@
+1、62÷30-(18+84)=
+
+2、56÷95÷(80✖13)=
+
+3、89-(36✖64)+10=
+
+4、52+(33÷64)÷23✖30=
+
+5、81÷(21÷64)✖18=
+
+6、37+(90+40)-22=
+
+7、11+(12÷54)÷44=
+
+8、94÷(78+52)÷69✖22=
+
+9、50+50-(91÷67)=
+
+10、13-23=
+
diff --git a/doc/张三2/2025-09-27-18-37-59.txt b/doc/张三2/2025-09-27-18-37-59.txt
new file mode 100755
index 0000000..6542305
--- /dev/null
+++ b/doc/张三2/2025-09-27-18-37-59.txt
@@ -0,0 +1,20 @@
+1、62÷69✖(22÷92)=
+
+2、55÷27÷79=
+
+3、74✖65=
+
+4、73+(25-12)-20=
+
+5、93+81-(70÷9)-14=
+
+6、86✖33+(79-99)✖9=
+
+7、48-(44+18)+80÷57=
+
+8、4+27+(37-100)✖4=
+
+9、45-28=
+
+10、81-66=
+
diff --git a/doc/张三2/2025-09-27-18-38-06.txt b/doc/张三2/2025-09-27-18-38-06.txt
new file mode 100755
index 0000000..48c5dfa
--- /dev/null
+++ b/doc/张三2/2025-09-27-18-38-06.txt
@@ -0,0 +1,40 @@
+1、33²=
+
+2、√14-80✖4=
+
+3、73²✖(70✖4)✖27÷86=
+
+4、39²-(39✖72)=
+
+5、√92+99=
+
+6、√19✖98-(62✖68)=
+
+7、√55÷9÷(47÷14)=
+
+8、√100=
+
+9、√16÷36-(72÷47)=
+
+10、64²✖(50+67)✖28=
+
+11、64²-30=
+
+12、53²-(87-44)=
+
+13、√88=
+
+14、86²÷(43+5)=
+
+15、√35-33✖(20+38)=
+
+16、67²+(99÷58)÷25=
+
+17、√7+30÷(5÷47)=
+
+18、33²-(47÷27)-6+93=
+
+19、√21✖5✖38=
+
+20、√32-34=
+
diff --git a/doc/张三2/2025-09-27-18-38-11.txt b/doc/张三2/2025-09-27-18-38-11.txt
new file mode 100755
index 0000000..b8db34e
--- /dev/null
+++ b/doc/张三2/2025-09-27-18-38-11.txt
@@ -0,0 +1,60 @@
+1、tan13+56✖31=
+
+2、sin100✖14+√79=
+
+3、sin17✖68✖cos87+√92+24=
+
+4、tan42+82-94✖cos89÷tan82=
+
+5、cos58✖100=
+
+6、tan99✖31-76=
+
+7、tan50✖98=
+
+8、tan96÷52=
+
+9、sin89=
+
+10、sin33✖23=
+
+11、cos22✖27+1=
+
+12、sin2✖67=
+
+13、tan89-97-83÷tan16=
+
+14、sin48-75=
+
+15、tan51✖69✖83=
+
+16、cos83-21-21÷44=
+
+17、sin1+95-sin15=
+
+18、cos64÷60÷9=
+
+19、tan92÷12✖41=
+
+20、tan27+17+4+√64-sin57=
+
+21、cos7+100÷19÷54=
+
+22、cos68=
+
+23、sin52=
+
+24、tan57÷4✖8+√55=
+
+25、cos41=
+
+26、tan30-11+41=
+
+27、sin100+38✖cos60+√30+62=
+
+28、cos2÷45-67-72÷tan96=
+
+29、sin87✖15=
+
+30、tan48✖58÷26+√92=
+
diff --git a/doc/李四1/2025-09-27-17-55-52.txt b/doc/李四1/2025-09-27-17-55-52.txt
new file mode 100755
index 0000000..a20bc87
--- /dev/null
+++ b/doc/李四1/2025-09-27-17-55-52.txt
@@ -0,0 +1,40 @@
+1、sin20=
+
+2、cos83÷43+87=
+
+3、sin98=
+
+4、cos31-52+77+72-sin68=
+
+5、sin37-84-sin40-sin50÷82=
+
+6、cos75÷63÷60=
+
+7、cos50+7✖24=
+
+8、tan77-8-6=
+
+9、tan98÷80+9✖cos99÷tan76=
+
+10、tan99✖9÷9-sin58=
+
+11、tan61-93-41=
+
+12、sin67=
+
+13、cos51÷31-35=
+
+14、tan40÷52+47✖cos83=
+
+15、cos25+10=
+
+16、cos27÷18-96+72+√86=
+
+17、sin97÷54+√9+√4-33=
+
+18、sin25+42÷tan89=
+
+19、cos48+91=
+
+20、cos22+18+70=
+
diff --git a/doc/李四1/2025-09-27-17-56-59.txt b/doc/李四1/2025-09-27-17-56-59.txt
new file mode 100755
index 0000000..d170f91
--- /dev/null
+++ b/doc/李四1/2025-09-27-17-56-59.txt
@@ -0,0 +1,44 @@
+1、cos27=
+
+2、sin45✖33=
+
+3、cos88÷83✖20+88=
+
+4、tan79-70=
+
+5、sin6=
+
+6、sin49+24-sin73=
+
+7、tan90÷51✖90-sin33=
+
+8、sin75✖93✖cos10+√4✖47=
+
+9、sin90÷89+√56-sin39+5=
+
+10、tan8+34+25÷tan19=
+
+11、sin37=
+
+12、cos90+92✖59=
+
+13、sin62✖29+√24+√43+80=
+
+14、sin74✖87=
+
+15、cos47✖34=
+
+16、sin99✖74-sin77÷tan3+86=
+
+17、cos96÷45+76✖72=
+
+18、sin38-83-sin86÷tan99-30=
+
+19、sin48-19✖cos92-sin8✖22=
+
+20、cos71+14=
+
+21、cos24✖68÷85=
+
+22、tan100÷64=
+
diff --git a/doc/高中老师账号密码本 b/doc/高中老师账号密码本
new file mode 100755
index 0000000..8181190
--- /dev/null
+++ b/doc/高中老师账号密码本
@@ -0,0 +1,3 @@
+王五1 123
+王五2 123
+王五3 123
\ No newline at end of file
diff --git a/src/Main.java b/src/Main.java
new file mode 100755
index 0000000..689aa33
--- /dev/null
+++ b/src/Main.java
@@ -0,0 +1,97 @@
+import teacher.JuniorTeacher;
+import teacher.PrimaryTeacher;
+import teacher.SeniorTeacher;
+import teacher.Teacher;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Scanner;
+
+public class Main {
+ static List primary = Arrays.asList("张三1 123", "张三2 123", "张三3 123");
+ static List junior = Arrays.asList("李四1 123", "李四2 123", "李四3 123");
+ static List senior = Arrays.asList("王五1 123", "王五2 123", "王五3 123");
+
+ static boolean log1(String bookName, String password) {
+ if (bookName.matches(".*小学.*") && primary.contains(password)) {
+ return true;
+ } else if (bookName.matches(".*初中.*") && junior.contains(password)) {
+ return true;
+ } else return bookName.matches(".*高中.*") && senior.contains(password);
+ }
+
+ static boolean log(String bookName, String password) {
+ try (BufferedReader fr = new BufferedReader(new FileReader(bookName))) {
+ String line;
+ while ((line = fr.readLine()) != null) {
+ if (line.equals(password)) {
+ return true;
+ }
+ }
+ return false;
+ } catch (IOException e) {
+ return log1(bookName, password);
+ }
+ }
+
+ static void generate(Teacher teacher) {
+ Scanner sc = new Scanner(System.in);
+ while (true) {
+ teacher.initMode();
+ String line = sc.nextLine();
+ int number;
+ if (line.matches("-?\\d+")) {
+ try {
+ number = Integer.parseInt(line);
+ } catch (NumberFormatException n) {
+ number = 40;
+ }
+ if (number == -1) {
+ return;
+ } else if (number >= 10 && number <= 30) {
+ teacher.generatePaper(number);
+ } else {
+ System.out.println("请输入10-30以内的数字");
+ }
+ } else if (line.equals("切换为小学")) {
+ teacher = new PrimaryTeacher(teacher.userName);
+ } else if (line.equals("切换为初中")) {
+ teacher = new JuniorTeacher(teacher.userName);
+ } else if (line.equals("切换为高中")) {
+ teacher = new SeniorTeacher(teacher.userName);
+ } else {
+ System.out.println("请输入有效的数字或指令!");
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ Scanner sc = new Scanner(System.in);
+ System.out.println("请输入用户名和密码,两者之间用一个空格隔开");
+ String s;
+ while (sc.hasNextLine()) {
+ s = sc.nextLine();
+ if (s.matches("\\s*")) {
+ System.out.println("输入不能为空!");
+ } else {
+ String name = s.split(" ")[0];
+ if (log("./doc/小学老师账号密码本", s)) {
+ Teacher teacher = new PrimaryTeacher(name);
+ generate(teacher);
+ } else if (log("./doc/初中老师账号密码本", s)) {
+ Teacher teacher = new JuniorTeacher(name);
+ generate(teacher);
+ } else if (log("./doc/高中老师账号密码本", s)) {
+ Teacher teacher = new SeniorTeacher(name);
+ generate(teacher);
+ } else {
+ System.out.println("请输入正确的用户名、密码:");
+ }
+ }
+ System.out.println("请输入用户名和密码,两者之间用一个空格隔开");
+ }
+ }
+}
diff --git a/src/paper/JuniorPaper.java b/src/paper/JuniorPaper.java
new file mode 100755
index 0000000..8f9a294
--- /dev/null
+++ b/src/paper/JuniorPaper.java
@@ -0,0 +1,41 @@
+package paper;
+
+import problem.JuniorMathProblem;
+
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class JuniorPaper extends Paper {
+ public JuniorPaper(int problemNumber, String teacherName) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
+ String formattedDate = "./doc/" + teacherName + "/" + sdf.format(new Date()) + ".txt";
+ File file = new File(formattedDate);
+ try {
+ if (!file.exists()) {
+ checkPath(file);
+ } else {
+ file.createNewFile();
+ }
+ FileOutputStream fos = new FileOutputStream(file, true);
+ OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
+ BufferedWriter bw = new BufferedWriter(osw);
+ for (int i = 1; i <= problemNumber; i++) {
+ JuniorMathProblem pmp = new JuniorMathProblem();
+ if (pmp.examine(teacherName)) {
+ String line = String.valueOf(i) + "、" + pmp.content;
+ bw.write(line);
+ bw.newLine();
+ bw.newLine();
+ } else {
+ i--;
+ }
+ }
+ bw.close();
+ System.out.println("已完成出题。");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/paper/Paper.java b/src/paper/Paper.java
new file mode 100755
index 0000000..09a5cc6
--- /dev/null
+++ b/src/paper/Paper.java
@@ -0,0 +1,17 @@
+package paper;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public abstract class Paper {
+ protected void checkPath(File file) throws IOException {
+ if (!file.exists()) {
+ Path filePath = Paths.get(file.getPath());
+ Files.createDirectories(filePath.getParent());
+ Files.createFile(filePath);
+ }
+ }
+}
diff --git a/src/paper/PrimaryPaper.java b/src/paper/PrimaryPaper.java
new file mode 100755
index 0000000..006fcd1
--- /dev/null
+++ b/src/paper/PrimaryPaper.java
@@ -0,0 +1,41 @@
+package paper;
+
+import problem.PrimaryMathProblem;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class PrimaryPaper extends Paper {
+ public PrimaryPaper(int problemNumber, String teacherName) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
+ String formattedDate = "./doc/" + teacherName + "/" + sdf.format(new Date()) + ".txt";
+ File file = new File(formattedDate);
+ try {
+ if (!file.exists()) {
+ checkPath(file);
+ } else {
+ file.createNewFile();
+ }
+ BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
+ for (int i = 1; i <= problemNumber; i++) {
+ PrimaryMathProblem pmp = new PrimaryMathProblem();
+ if (pmp.examine(teacherName)) {
+ String line = String.valueOf(i) + "、" + pmp.content;
+ bw.write(line);
+ bw.newLine();
+ bw.newLine();
+ } else {
+ i--;
+ }
+ }
+ bw.close();
+ System.out.println("已完成出题。");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/paper/SeniorPaper.java b/src/paper/SeniorPaper.java
new file mode 100755
index 0000000..ed07af0
--- /dev/null
+++ b/src/paper/SeniorPaper.java
@@ -0,0 +1,41 @@
+package paper;
+
+import problem.SeniorMathProblem;
+
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class SeniorPaper extends Paper {
+ public SeniorPaper(int problemNumber, String teacherName) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
+ String formattedDate = "./doc/" + teacherName + "/" + sdf.format(new Date()) + ".txt";
+ File file = new File(formattedDate);
+ try {
+ if (!file.exists()) {
+ checkPath(file);
+ } else {
+ file.createNewFile();
+ }
+ FileOutputStream fos = new FileOutputStream(file, true);
+ OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
+ BufferedWriter bw = new BufferedWriter(osw);
+ for (int i = 1; i <= problemNumber; i++) {
+ SeniorMathProblem pmp = new SeniorMathProblem();
+ if (pmp.examine(teacherName)) {
+ String line = String.valueOf(i) + "、" + pmp.content;
+ bw.write(line);
+ bw.newLine();
+ bw.newLine();
+ } else {
+ i--;
+ }
+ }
+ bw.close();
+ System.out.println("已完成出题。");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/problem/JuniorMathProblem.java b/src/problem/JuniorMathProblem.java
new file mode 100755
index 0000000..3a5eca7
--- /dev/null
+++ b/src/problem/JuniorMathProblem.java
@@ -0,0 +1,76 @@
+package problem;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Random;
+
+public class JuniorMathProblem extends MathProblem {
+ String[] opBack = {"²", ")"};
+ String[] opFront = {"√", "("};
+
+ public JuniorMathProblem() {
+ // 生成初中题的函数
+ Random random = new Random();
+ int total = random.nextInt(5) + 1;
+ if (total == 1) {
+ int op = random.nextInt(2);
+ int number = random.nextInt(100) + 1;
+ if (op == 0) {
+ content = String.valueOf(number) + "²";
+ } else {
+ content = "√" + String.valueOf(number);
+ }
+ } else {
+ int[] number = new int[total];
+ number[0] = random.nextInt(100) + 1;
+ int choice = random.nextInt(2);
+ if (choice == 0) {
+ content = String.valueOf(number[0]) + "²";
+ } else {
+ content = "√" + String.valueOf(number[0]);
+ }
+ for (int i = 1; i < total; i++) {
+ number[i] = random.nextInt(100) + 1;
+ int op = random.nextInt(4);
+ if (i == choice + 1 && total > choice + 2) {
+ content += op2[op] + "(" + String.valueOf(number[i]);
+ } else if (i == choice + 2) {
+ content += op2[op] + String.valueOf(number[i]) + ")";
+ } else {
+ content += op2[op] + String.valueOf(number[i]);
+ }
+ }
+ }
+ content += "=";
+ }
+
+ @Override
+ public boolean examine(String teacherName) {
+ try {
+ File folder = new File("./doc/" + teacherName);
+ if (!folder.exists() || !folder.isDirectory()) {
+ System.out.println("文件夹不存在或不是目录!");
+ }
+ File[] files = folder.listFiles();
+ if (files != null) {
+ for (File file : files) {
+ if (file.isFile()) {
+ BufferedReader fr = new BufferedReader(new FileReader(file));
+ String line;
+ while ((line = fr.readLine()) != null) {
+ if (line.equals(content)) {
+ return false;
+ }
+ }
+ fr.close();
+ }
+ }
+ }
+ } catch (IOException e) {
+ System.out.println(e);
+ }
+ return true;
+ }
+}
diff --git a/src/problem/MathProblem.java b/src/problem/MathProblem.java
new file mode 100755
index 0000000..d11d1c2
--- /dev/null
+++ b/src/problem/MathProblem.java
@@ -0,0 +1,10 @@
+package problem;
+
+public abstract class MathProblem {
+ public String content = "";
+ public String[] op2 = {"+", "-", "✖", "÷"};
+
+ boolean examine(String teacherName) {
+ return true;
+ }
+}
diff --git a/src/problem/PrimaryMathProblem.java b/src/problem/PrimaryMathProblem.java
new file mode 100755
index 0000000..d5a0dc4
--- /dev/null
+++ b/src/problem/PrimaryMathProblem.java
@@ -0,0 +1,59 @@
+package problem;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Random;
+
+public class PrimaryMathProblem extends MathProblem {
+ public PrimaryMathProblem() {
+ // 生成小学题的函数
+ Random random = new Random();
+ int total = random.nextInt(4) + 2;
+ int[] number = new int[total];
+ number[0] = random.nextInt(100) + 1;
+ content += String.valueOf(number[0]);
+ int choice = random.nextInt(2);
+ for (int i = 1; i < total; i++) {
+ number[i] = random.nextInt(100) + 1;
+ int op = random.nextInt(4);
+ if (i == choice + 1 && total > choice + 2) {
+ content += op2[op] + "(" + String.valueOf(number[i]);
+ } else if (i == choice + 2) {
+ content += op2[op] + String.valueOf(number[i]) + ")";
+ } else {
+ content += op2[op] + String.valueOf(number[i]);
+ }
+ }
+ content += "=";
+ }
+
+ @Override
+ public boolean examine(String teacherName) {
+ try {
+ File folder = new File("./doc/" + teacherName);
+ if (!folder.exists() || !folder.isDirectory()) {
+ System.out.println("文件夹不存在或不是目录!");
+ }
+ File[] files = folder.listFiles();
+ if (files != null) {
+ for (File file : files) {
+ if (file.isFile()) {
+ BufferedReader fr = new BufferedReader(new FileReader(file));
+ String line;
+ while ((line = fr.readLine()) != null) {
+ if (line.equals(content)) {
+ return false;
+ }
+ }
+ fr.close();
+ }
+ }
+ }
+ } catch (IOException e) {
+ System.out.println(e);
+ }
+ return true;
+ }
+}
diff --git a/src/problem/SeniorMathProblem.java b/src/problem/SeniorMathProblem.java
new file mode 100755
index 0000000..2cac32f
--- /dev/null
+++ b/src/problem/SeniorMathProblem.java
@@ -0,0 +1,77 @@
+package problem;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Random;
+
+public class SeniorMathProblem extends MathProblem {
+ String[] opFront = {"√", "sin", "cos", "tan"};
+
+ public SeniorMathProblem() {
+ // 生成高中题的函数
+ Random random = new Random();
+ int total = random.nextInt(5) + 1;
+ if (total == 1) {
+ int op = random.nextInt(3);
+ int number = random.nextInt(100) + 1;
+ if (op == 0) {
+ content = "sin" + String.valueOf(number);
+ } else if (op == 1) {
+ content = "cos" + String.valueOf(number);
+ } else {
+ content = "tan" + String.valueOf(number);
+ }
+ } else {
+ int[] number = new int[total];
+ number[0] = random.nextInt(100) + 1;
+ int choice = random.nextInt(3);
+ if (choice == 0) {
+ content = "sin" + String.valueOf(number[0]);
+ } else if (choice == 1) {
+ content = "tan" + String.valueOf(number[0]);
+ } else {
+ content = "cos" + String.valueOf(number[0]);
+ }
+ for (int i = 1; i < total; i++) {
+ number[i] = random.nextInt(100) + 1;
+ int op = random.nextInt(4);
+ if (i == choice + 2 || i == choice + 3) {
+ content += op2[op] + opFront[op] + String.valueOf(number[i]);
+ } else {
+ content += op2[op] + String.valueOf(number[i]);
+ }
+ }
+ }
+ content += "=";
+ }
+
+ @Override
+ public boolean examine(String teacherName) {
+ try {
+ File folder = new File("./doc/" + teacherName);
+ if (!folder.exists() || !folder.isDirectory()) {
+ System.out.println("文件夹不存在或不是目录!");
+ }
+ File[] files = folder.listFiles();
+ if (files != null) {
+ for (File file : files) {
+ if (file.isFile()) {
+ BufferedReader fr = new BufferedReader(new FileReader(file));
+ String line;
+ while ((line = fr.readLine()) != null) {
+ if (line.equals(content)) {
+ return false;
+ }
+ }
+ fr.close();
+ }
+ }
+ }
+ } catch (IOException e) {
+ System.out.println(e);
+ }
+ return true;
+ }
+}
diff --git a/src/teacher/JuniorTeacher.java b/src/teacher/JuniorTeacher.java
new file mode 100755
index 0000000..ef87c41
--- /dev/null
+++ b/src/teacher/JuniorTeacher.java
@@ -0,0 +1,21 @@
+package teacher;
+
+import paper.JuniorPaper;
+
+public class JuniorTeacher extends Teacher {
+ public JuniorTeacher(String name) {
+ mode = Teacher.rank.JUNIOR.toString();
+ userName = name;
+ }
+
+ @Override
+ public void initMode() {
+ System.out.println("当前选择为初中出题");
+ System.out.println("准备生成初中数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录)");
+ }
+
+ @Override
+ public void generatePaper(int number) {
+ paper = new JuniorPaper(number, userName);
+ }
+}
diff --git a/src/teacher/PrimaryTeacher.java b/src/teacher/PrimaryTeacher.java
new file mode 100755
index 0000000..da11fe2
--- /dev/null
+++ b/src/teacher/PrimaryTeacher.java
@@ -0,0 +1,21 @@
+package teacher;
+
+import paper.PrimaryPaper;
+
+public class PrimaryTeacher extends Teacher {
+ public PrimaryTeacher(String name) {
+ mode = Teacher.rank.JUNIOR.toString();
+ userName = name;
+ }
+
+ @Override
+ public void initMode() {
+ System.out.println("当前选择为小学出题");
+ System.out.println("准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录)");
+ }
+
+ @Override
+ public void generatePaper(int number) {
+ paper = new PrimaryPaper(number, userName);
+ }
+}
diff --git a/src/teacher/SeniorTeacher.java b/src/teacher/SeniorTeacher.java
new file mode 100755
index 0000000..36ecc06
--- /dev/null
+++ b/src/teacher/SeniorTeacher.java
@@ -0,0 +1,21 @@
+package teacher;
+
+import paper.SeniorPaper;
+
+public class SeniorTeacher extends Teacher {
+ public SeniorTeacher(String name) {
+ mode = Teacher.rank.SENIOR.toString();
+ userName = name;
+ }
+
+ @Override
+ public void initMode() {
+ System.out.println("当前选择为高中出题");
+ System.out.println("准备生成高中数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录)");
+ }
+
+ @Override
+ public void generatePaper(int number) {
+ paper = new SeniorPaper(number, userName);
+ }
+}
diff --git a/src/teacher/Teacher.java b/src/teacher/Teacher.java
new file mode 100755
index 0000000..c789f54
--- /dev/null
+++ b/src/teacher/Teacher.java
@@ -0,0 +1,19 @@
+package teacher;
+
+import paper.Paper;
+
+public abstract class Teacher {
+ enum rank {
+ PRIMARY,
+ JUNIOR,
+ SENIOR
+ }
+
+ public String mode = "";
+ public String userName = "";
+ public Paper paper;
+
+ public void initMode() {}
+
+ public void generatePaper(int number) {}
+}