diff --git a/MathQuestionGenerator.jar b/MathQuestionGenerator.jar index caa7c2e..d664d47 100644 Binary files a/MathQuestionGenerator.jar and b/MathQuestionGenerator.jar differ diff --git a/doc/项目说明.md b/doc/项目说明.md index f746afa..b864aa7 100644 --- a/doc/项目说明.md +++ b/doc/项目说明.md @@ -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为GBK,65001为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标准库,无需额外依赖 - ## 项目价值 本项目展示了面向对象编程的实际应用,体现了良好的软件工程实践,包括: diff --git a/src/Main.class b/src/Main.class index d2953ec..9ffa455 100644 Binary files a/src/Main.class and b/src/Main.class differ diff --git a/src/Main.java b/src/Main.java index c2879af..419ec36 100644 --- a/src/Main.java +++ b/src/Main.java @@ -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("无效输入, 正在返回登陆界面"); } } } diff --git a/src/SysFunc.class b/src/SysFunc.class index 80d0c9c..446f10a 100644 Binary files a/src/SysFunc.class and b/src/SysFunc.class differ diff --git a/src/SysFunc.java b/src/SysFunc.java index a8b0be7..328a8e4 100644 --- a/src/SysFunc.java +++ b/src/SysFunc.java @@ -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将退出当前用户,重新登录):"); } } diff --git a/src/Teacher.class b/src/Teacher.class index 4242b0f..f4726bd 100644 Binary files a/src/Teacher.class and b/src/Teacher.class differ diff --git a/src/Teacher.java b/src/Teacher.java index 3ad8d36..bc66375 100644 --- a/src/Teacher.java +++ b/src/Teacher.java @@ -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");