优化JavaS上次为最开始版本,此次添加了抽象类

develop
lzy 6 days ago
parent 3f970c05ce
commit de59404e3f

@ -8,26 +8,26 @@
- **文件保存**:题目按“年-月-日-时-分-秒.txt”保存到用户专属文件夹。
## 2. 预设账号
| 学段 | 用户名 | 密码 |
|--------|------|------|
| 小学 | 张三 1 | 123 |
| 小学 | 张三 2 | 123 |
| 小学 | 张三 3 | 123 |
| 初中 | 李四 1 | 123 |
| 初中 | 李四 2 | 123 |
| 初中 | 李四 3 | 123 |
| 高中 | 王五 1 | 123 |
| 高中 | 王五 2 | 123 |
| 高中 | 王五 3 | 123 |
| 学段 | 用户名 | 密码 |
|--------|-----|------|
| 小学 | 张三1 | 123 |
| 小学 | 张三2 | 123 |
| 小学 | 张三3 | 123 |
| 初中 | 李四1 | 123 |
| 初中 | 李四2 | 123 |
| 初中 | 李四3 | 123 |
| 高中 | 王五1 | 123 |
| 高中 | 王五2 | 123 |
| 高中 | 王五3 | 123 |
## 3. 使用步骤
1. **运行程序**:执行`com.mathpaper.main.Main`类的`main`方法。
2. **登录**:输入“用户名 密码”(如“张三 1 123”登录成功后显示当前学段。
2. **登录**:输入“用户名 密码”如“张三1 123”登录成功后显示当前学段。
3. **生成题目**输入10-30的数字程序自动生成并保存题目。
4. **切换学段**:输入“切换为初中”(示例),切换后可生成对应学段题目。
5. **退出登录**:输入-1返回登录界面。
## 4. 注意事项
- 题目数量仅支持10-30输入其他数字除-1外提示重试
- 生成的题目保存在项目根目录`generated_papers`下的用户文件夹中,请勿手动删除
- 题目数量仅支持10-30输入其他数字除-1外退出登录
- 生成的题目保存在项目根目录`generated_papers`下的用户文件夹中。
- 切换学段时需严格按照“切换为小学/初中/高中”格式输入,否则提示无效。

@ -0,0 +1,10 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# 依赖于环境的 Maven 主目录路径
/mavenHomeManager.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/个人项目1.iml" filepath="$PROJECT_DIR$/个人项目1.iml" />
</modules>
</component>
</project>

@ -0,0 +1,10 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# 依赖于环境的 Maven 主目录路径
/mavenHomeManager.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/com.iml" filepath="$PROJECT_DIR$/com.iml" />
</modules>
</component>
</project>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" packagePrefix="com" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -1,3 +1,4 @@
// mathpaper/main/Main.java
package com.mathpaper.main;
import com.mathpaper.user.AccountManager;
@ -24,7 +25,7 @@ public class Main {
String currentType = AccountManager.getAccountType(username);
while (true) {
// 提示信息:始终使用当前有效的 currentType无效切换后不变
System.out.print("\n准备生成" + currentType + "数学题目请输入生成题目数量10-30输入-1退出当前用户):");
System.out.print("\n准备生成" + currentType + "数学题目请输入生成题目数量10-30输入-1退出当前用户,重新登录");
String input = SCANNER.nextLine().trim();
// 处理学段切换:传入当前学段,确保无效时保留原学段
@ -50,11 +51,6 @@ public class Main {
List<String> questions = generator.generate(count, username);
FILE_HANDLER.saveQuestions(username, questions);
// 4. 继续操作提示
System.out.print("是否继续生成" + currentType + "题目?(输入“是”继续,其他返回主页):");
if (!SCANNER.nextLine().trim().equals("是")) {
System.out.println("返回主页,可重新输入数量或切换学段...");
}
}
}
}

@ -0,0 +1,22 @@
package com.mathpaper.question;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractQuestionGenerator implements QuestionGenerator {
protected final QuestionChecker checker = new QuestionChecker();
@Override
public List<String> generate(int count, String username) {
List<String> questions = new ArrayList<>();
while (questions.size() < count) {
String expr = generateSingle();
if (!checker.isDuplicate(username, expr)) {
questions.add((questions.size() + 1) + ". " + expr + " = ");
}
}
return questions;
}
protected abstract String generateSingle();
}

@ -1,28 +1,13 @@
package com.mathpaper.question;
import com.mathpaper.util.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class JuniorQuestionGenerator implements QuestionGenerator {
private final QuestionChecker checker = new QuestionChecker();
public class JuniorQuestionGenerator extends AbstractQuestionGenerator {
private final Random RANDOM = new Random();
@Override
public List<String> generate(int count, String username) {
List<String> questions = new ArrayList<>();
while (questions.size() < count) {
String expr = generateSingle();
if (!checker.isDuplicate(username, expr)) {
questions.add((questions.size() + 1) + ". " + expr + " = ");
}
}
return questions;
}
// 生成一道初中题(确保含平方/开根号)
private String generateSingle() {
protected String generateSingle() {
String expr = "";
do {
int operandCount = Utils.getOperandCount();

@ -1,28 +1,12 @@
// 修改后的PrimaryQuestionGenerator.java
package com.mathpaper.question;
import com.mathpaper.util.Utils;
import java.util.ArrayList;
import java.util.List;
public class PrimaryQuestionGenerator implements QuestionGenerator {
private final QuestionChecker checker = new QuestionChecker();
public class PrimaryQuestionGenerator extends AbstractQuestionGenerator {
@Override
public List<String> generate(int count, String username) {
List<String> questions = new ArrayList<>();
// 生成不重复题目
while (questions.size() < count) {
String expr = generateSingle();
if (!checker.isDuplicate(username, expr)) {
// 添加题号和等号如“1. 2 + 3 = ”)
questions.add((questions.size() + 1) + ". " + expr + " = ");
}
}
return questions;
}
// 生成一道小学题
private String generateSingle() {
protected String generateSingle() {
int operandCount = Utils.getOperandCount();
StringBuilder expr = new StringBuilder();

@ -1,3 +1,4 @@
// mathpaper/question/QuestionChecker.java
package com.mathpaper.question;
import com.mathpaper.file.FileHandler;

@ -1,28 +1,14 @@
// 修改后的SeniorQuestionGenerator.java
package com.mathpaper.question;
import com.mathpaper.util.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class SeniorQuestionGenerator implements QuestionGenerator {
private final QuestionChecker checker = new QuestionChecker();
public class SeniorQuestionGenerator extends AbstractQuestionGenerator {
private final Random RANDOM = new Random();
@Override
public List<String> generate(int count, String username) {
List<String> questions = new ArrayList<>();
while (questions.size() < count) {
String expr = generateSingle();
if (!checker.isDuplicate(username, expr)) {
questions.add((questions.size() + 1) + ". " + expr + " = ");
}
}
return questions;
}
// 生成一道高中题(确保含三角函数)
private String generateSingle() {
protected String generateSingle() {
String expr;
do {
int operandCount = Utils.getOperandCount();

@ -1,3 +1,4 @@
// mathpaper/util/Utils.java
package com.mathpaper.util;
import java.util.Random;

@ -0,0 +1,10 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# 依赖于环境的 Maven 主目录路径
/mavenHomeManager.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/个人项目1.iml" filepath="$PROJECT_DIR$/个人项目1.iml" />
</modules>
</component>
</project>

@ -0,0 +1,10 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# 依赖于环境的 Maven 主目录路径
/mavenHomeManager.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/com.iml" filepath="$PROJECT_DIR$/com.iml" />
</modules>
</component>
</project>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" packagePrefix="com" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Loading…
Cancel
Save