Version2.0 #2

Merged
hnu202326010425 merged 1 commits from develop into main 5 months ago

Binary file not shown.

@ -29,6 +29,40 @@ Personal_Project/
├── 王五2/
└── 王五3/
```
## 运行环境
- **语言**Java21.0.4
- **Windows环境**Windows11 cmd或powershell终端管理员 (win10或以下版本可能无法识别SysFuc类中的ANSI编码而产生字符乱码) 注意在终端您需要设置编码chcp 936
- **Linux环境**ubuntu22.04.5 LTS; 注意终端运行时需要确认编码格式为UTF-8下述而后将Main.java中scanner参数"GBK"删去后重新编译并生成.jar文件以解决乱码问题
- __编译命令如下(进入项目目录):
- __javac src/*.java
- __jar cfm MathQuestionGenerator.jar(名称可换) MANIFEST.MF src/*.class
- __java -jar MathQuestionGenerator.jar
- **编码**WINDOWS下标准输入scanner为GBK支持中文输入,文件保存为UTF-8
-__您可以在终端通过输入命令chcp查看当前编码936为GBK65001为UTF-8 (一般是GBK这种情况不需要额外设置编码格式)
UBUNTU下标准输入scanner默认UTF-8文件保存为UTF-8
-__您可以通过echo $LANG查看当前编码并通过export LANG=en_US.UTF-8暂时设置编码格式为UTF-8 (一般是UTF-8只需要删去Main中scanner的"GBK"参数即可)
- **依赖**纯Java标准库无需额外依赖
## 运行方法
- **通用**-下载MathQuestionGenerator.jar(可自行更改名字)
-完成环境设置以及编码格式设置,见上述运行环境
-通过java -jar MathQuestionGenerator.jar运行
- **批处理**Windows11环境下您可以打开项目目录双击Math.bat文件直接运行
## 使用流程
1. **保存文件**:将项目保存至同一目录
2. **启动程序**:见上述"运行方法"
3. **用户登录**:根据提示输入预置的用户名和密码(格式:用户名 密码)
4. **选择模式**:系统显示当前出题类型,可选择切换
5. **切换类型**:输入" 切换** "切换至对应出题类型
6. **生成题目**输入题目数量10-30
7. **查看结果**:题目生成后显示保存路径
8. **重复使用**:题目生成后可选择继续生成或切换难度
9. **退出登录**:输入题目数量为-1则退出当前用户可重新登录
10. **退出系统**:可选返回登陆或者退出系统
## 核心功能
@ -76,19 +110,6 @@ Personal_Project/
- **异常处理**:完善的异常处理机制确保程序稳定性
- **路径管理**:自动创建和管理教师个人文件夹以及题目文档
## 使用流程
1. **保存文件**:将项目保存至同一目录
2. **启动程序**:在当前目录下双击运行 “运行程序.bat”
3. **用户登录**:根据提示输入预置的用户名和密码(格式:用户名 密码)
4. **选择模式**:系统显示当前出题类型,可选择切换
5. **切换类型**:输入" 切换** "切换至对应出题类型
6. **生成题目**输入题目数量10-30
7. **查看结果**:题目生成后显示保存路径
8. **重复使用**:题目生成后可选择继续生成或切换难度
9. **退出登录**:输入题目数量为-1则退出当前用户可重新登录
10. **退出系统**:可选返回登陆或者退出系统
## 预置用户信息
| 用户名 | 密码 | 类型 | 初始类型 |
@ -286,11 +307,6 @@ public static void main(String[] args)
- 添加题目答案计算功能
- 支持批量导入导出
## 开发环境
- **语言**Java21.0.4
- **编码**标准输入scanner为GBK支持中文输入,文件保存为UTF-8
- **依赖**纯Java标准库无需额外依赖
## 项目价值
本项目展示了面向对象编程的实际应用,体现了良好的软件工程实践,包括:

Binary file not shown.

@ -17,17 +17,16 @@ public class Main {
System.out.println("是否返回登陆(y/n)?");
String choice = scanner.nextLine();
if (choice.charAt(0) == 'y') {
continue;
} else if (choice.charAt(0) == 'n') {
System.out.println("感谢您的使用");
break;
} else {
System.out.println("无效输入, 正在返回登陆界面");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
} else if (choice.charAt(0) == 'n') {
System.out.println("感谢您的使用");
break;
} else {
System.out.println("无效输入, 正在返回登陆界面");
}
}
}

Binary file not shown.

@ -24,6 +24,15 @@ public class SysFunc {
static final String PURPLE = "\u001B[35m";
static final String CYAN = "\u001B[36m";
static final String BOLD = "\u001B[1m";
// 清屏代码
static final String CLEAR_SCREEN = "\033[H\033[2J";
// 清屏方法
public static void clearScreen() {
System.out.print(CLEAR_SCREEN);
System.out.flush();
}
public static void init(){
// 用户预加载
@ -45,6 +54,7 @@ public class SysFunc {
// 登陆界面
public static Teacher login(Scanner scanner) {
clearScreen();
boolean flag = false;
System.out.println(BOLD + CYAN + "=== 数学题目生成系统 ===" + RESET);
System.out.println(BOLD + CYAN + "请登录您的账户" + RESET);
@ -65,7 +75,6 @@ public class SysFunc {
if (t.name.equals(cur_name) && t.password.equals(cur_password)) {
teacher = t;
flag = true;
System.out.println(GREEN + "当前选择为" + teacher.getType() + "出题");
break;
}
}
@ -78,18 +87,19 @@ public class SysFunc {
// 切换类型界面
public static void ShiftType(Scanner scanner) {
System.out.println(GREEN + "当前选择为" + teacher.getType() + "出题");
int type = SysFunc.typeMap.get(SysFunc.teacher.getType());
System.out.println(BOLD + PURPLE + "=== 是否切换出题类型(y/n) ===" + RESET);
System.out.print(BOLD + BLUE + "> " + RESET);
String choice = scanner.nextLine();
if (choice.equals("y")) {
System.out.println(BOLD + YELLOW + "请输入指令: 切换** (支持小学,初中,高中难度): " + RESET);
System.out.println(BOLD + YELLOW + "请输入指令: 切换** (支持小学,初中,高中难度): " + RESET);
while (true) {
System.out.print(BOLD + BLUE + "> " + RESET);
String choice_type = scanner.nextLine();
if (choice_type.substring(0, 2).equals("切换") && typeMap.containsKey(choice_type.substring(2))) {
type = typeMap.get(choice_type.substring(2));
if (choice_type.length() >= 5 && choice_type.substring(0, 3).equals("切换") && typeMap.containsKey(choice_type.substring(3))) {
type = typeMap.get(choice_type.substring(3));
if (type == 1) {
teacher = new PrimaryTea(teacher.name, teacher.password, teacher.path);
} else if (type == 2) {
@ -100,14 +110,14 @@ public class SysFunc {
System.out.println(GREEN + "准备生成" + teacher.getType() + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):");
break;
} else {
System.out.println(RED + RESET + "请输入小学、初中和高中三个选项中的一个");
System.out.println(RED + RESET + "请输入小学、初中和高中三个选项中的一个 (切换为**)");
}
}
} else if (choice.equals("n")) {
System.out.println(GREEN + "请继续输入题目数量:");
System.out.println(GREEN + "准备生成" + teacher.getType() + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):");
} else {
System.out.println(RED + RESET + "无效输入,已为您设置默认类型:" + teacher.getType());
System.out.println(GREEN + "请输入题目数量:");
System.out.println(GREEN + "准备生成" + teacher.getType() + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):");
}
}

Binary file not shown.

@ -25,16 +25,6 @@ public abstract class Teacher {
this.path = path;
return;
}
// 生成文件夹
File folder = new File(name);
try {
if (!folder.exists()) {
folder.mkdirs();
}
} catch (Exception e) {
e.printStackTrace();
}
this.path = folder.getAbsolutePath();
}
// 查重
@ -73,6 +63,18 @@ public abstract class Teacher {
// 生成存储文档
public String generatePath(){
if(this.path == null){
// 生成文件夹
File folder = new File(name);
try {
if (!folder.exists()) {
folder.mkdirs();
}
} catch (Exception e) {
e.printStackTrace();
}
this.path = folder.getAbsolutePath();
}
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
File file = new File(this.path, sdf.format(date) + ".txt");

Loading…
Cancel
Save