From 14f37693691b38aaaa497acfea054470446b8673 Mon Sep 17 00:00:00 2001 From: "@yu-xiuhui" <2810672597@qq.com> Date: Thu, 25 Sep 2025 21:51:07 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86user=E5=92=8Cuse?= =?UTF-8?q?rmanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/auth/UserManager.java | 90 +++++++++++++++++++++++++++++++++------ 1 file changed, 76 insertions(+), 14 deletions(-) diff --git a/src/auth/UserManager.java b/src/auth/UserManager.java index ea0ffd0..bdfcd5d 100644 --- a/src/auth/UserManager.java +++ b/src/auth/UserManager.java @@ -1,23 +1,22 @@ package auth; - +import java.io.BufferedReader; +import java.io.FileReader; import java.util.*; - +import java.io.IOException; public class UserManager { private List users = new ArrayList<>(); - + public static int line_num= 0; public UserManager() { + // 要读取的文件路径 + String filePath = "user.txt"; + + // 调用方法读取文件并获取三个数据列表 + DataLists dataLists = readDataFile(filePath); + // 小学 - users.add(new User("张三1", "123", "小学")); - users.add(new User("张三2", "123", "小学")); - users.add(new User("张三3", "123", "小学")); - // 初中 - users.add(new User("李四1", "123", "初中")); - users.add(new User("李四2", "123", "初中")); - users.add(new User("李四3", "123", "初中")); - // 高中 - users.add(new User("王五1", "123", "高中")); - users.add(new User("王五2", "123", "高中")); - users.add(new User("王五3", "123", "高中")); + for(int i=0;i list1; + List list2; + List list3; + + DataLists(List list1, List list2, List list3) { + this.list1 = list1; + this.list2 = list2; + this.list3 = list3; + } + } + public static DataLists readDataFile(String filePath) { + // 创建三个列表分别存储每行的三个数据 + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + List list3 = new ArrayList<>(); + + // 使用try-with-resources语句确保资源自动关闭 + try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { + String line; + int lineNumber = 1; + + // 逐行读取 + while ((line = br.readLine()) != null) { + // 去除首尾空格 + line = line.trim(); + + // 跳过空行 + if (line.isEmpty()) { + continue; + } + + // 分割行数据,这里假设使用空格分隔 + // 如果是其他分隔符(如逗号、制表符),请修改正则表达式 + String[] parts = line.split("\\s+"); // 按一个或多个空格分割 + + // 检查是否有三个数据 + if (parts.length != 3) { + System.out.println("警告: 第" + lineNumber + "行数据格式不正确,需要3个数据,实际有" + parts.length + "个"); + lineNumber++; + continue; + } + + // 将三个数据分别添加到对应的列表 + list1.add(parts[0]); + list2.add(parts[1]); + list3.add(parts[2]); + + lineNumber++; + + } + line_num=lineNumber-1; + System.out.println("文件读取完成,共读取" + (lineNumber - 1) + "行有效数据"); + return new DataLists(list1, list2, list3); + + }catch (IOException e) { + System.out.println("读取文件时发生错误: " + e.getMessage()); + e.printStackTrace(); + return null; + } + } + + } -- 2.34.1 From a8b13a24d1449cfc5ece36bd5fe7fb04a111cd89 Mon Sep 17 00:00:00 2001 From: "@yu-xiuhui" <2810672597@qq.com> Date: Sat, 27 Sep 2025 17:18:51 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 34 +++++++- src/auth/UserManager.java | 20 +---- src/generator/HighGenerator.java | 15 ++++ src/generator/MiddleGenerator.java | 15 ++++ src/generator/Praimary.java | 4 - src/generator/PrimaryGenerator.java | 15 ++++ src/generator/ProblemGenerator.java | 8 ++ src/util/ExpressionUtils.java | 94 ++++++++++++++++++++++ src/util/FileUtils.java | 63 +++++++++++++++ src/util/ModifyClass.java | 88 ++++++++++++++++++++ src/util/menu.java | 120 ++++++++++++++++++++++++++++ 11 files changed, 452 insertions(+), 24 deletions(-) create mode 100644 src/generator/HighGenerator.java create mode 100644 src/generator/MiddleGenerator.java delete mode 100644 src/generator/Praimary.java create mode 100644 src/generator/PrimaryGenerator.java create mode 100644 src/generator/ProblemGenerator.java create mode 100644 src/util/ExpressionUtils.java create mode 100644 src/util/FileUtils.java create mode 100644 src/util/ModifyClass.java create mode 100644 src/util/menu.java diff --git a/src/Main.java b/src/Main.java index 3e59c38..cdd3ef1 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,5 +1,35 @@ + +import util.*; + +import java.util.*; + public class Main { + final private static Scanner scanner = new Scanner(System.in); + public static void main(String[] args) { - System.out.println("Hello world!"); + + menu Menu=new menu(); + while (true) { + // 登录 + System.out.println("1.登录"); + System.out.println("2.退出"); + System.out.println("3.修改密码"); + System.out.println("4.创建账户"); + + int num=scanner.nextInt(); + scanner.nextLine(); + if(num==1){ + Menu.Mymenu(); + } + if(num==2) System.exit(0); + if(num==3){ + ModifyPassword.modimenu(); + } + if(num==4){ + CreateUser.createuser(); + } + } } -} \ No newline at end of file + + +} diff --git a/src/auth/UserManager.java b/src/auth/UserManager.java index bdfcd5d..dbac070 100644 --- a/src/auth/UserManager.java +++ b/src/auth/UserManager.java @@ -9,11 +9,8 @@ public class UserManager { public UserManager() { // 要读取的文件路径 String filePath = "user.txt"; - // 调用方法读取文件并获取三个数据列表 DataLists dataLists = readDataFile(filePath); - - // 小学 for(int i=0;i list1 = new ArrayList<>(); + List list1 = new ArrayList<>();// 创建三个列表分别存储每行的三个数据 List list2 = new ArrayList<>(); List list3 = new ArrayList<>(); - - // 使用try-with-resources语句确保资源自动关闭 - try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { + try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {// 使用try-with-resources语句确保资源自动关闭 String line; int lineNumber = 1; - // 逐行读取 while ((line = br.readLine()) != null) { // 去除首尾空格 @@ -58,36 +51,27 @@ public class UserManager { if (line.isEmpty()) { continue; } - // 分割行数据,这里假设使用空格分隔 // 如果是其他分隔符(如逗号、制表符),请修改正则表达式 String[] parts = line.split("\\s+"); // 按一个或多个空格分割 - // 检查是否有三个数据 if (parts.length != 3) { System.out.println("警告: 第" + lineNumber + "行数据格式不正确,需要3个数据,实际有" + parts.length + "个"); lineNumber++; continue; } - // 将三个数据分别添加到对应的列表 list1.add(parts[0]); list2.add(parts[1]); list3.add(parts[2]); - lineNumber++; - } line_num=lineNumber-1; - System.out.println("文件读取完成,共读取" + (lineNumber - 1) + "行有效数据"); return new DataLists(list1, list2, list3); - }catch (IOException e) { System.out.println("读取文件时发生错误: " + e.getMessage()); e.printStackTrace(); return null; } } - - } diff --git a/src/generator/HighGenerator.java b/src/generator/HighGenerator.java new file mode 100644 index 0000000..a254d3a --- /dev/null +++ b/src/generator/HighGenerator.java @@ -0,0 +1,15 @@ +package generator; + +import util.ExpressionUtils; +import java.util.*; + +public class HighGenerator implements ProblemGenerator { + @Override + public List generateProblems(int count) { + List problems = new ArrayList<>(); + for (int i = 1; i <= count; i++) { + problems.add(ExpressionUtils.generateHighExpr()); + } + return problems; + } +} diff --git a/src/generator/MiddleGenerator.java b/src/generator/MiddleGenerator.java new file mode 100644 index 0000000..fb0761c --- /dev/null +++ b/src/generator/MiddleGenerator.java @@ -0,0 +1,15 @@ +package generator; + +import util.ExpressionUtils; +import java.util.*; + +public class MiddleGenerator implements ProblemGenerator { + @Override + public List generateProblems(int count) { + List problems = new ArrayList<>(); + for (int i = 1; i <= count; i++) { + problems.add(ExpressionUtils.generateMiddleExpr()); + } + return problems; + } +} diff --git a/src/generator/Praimary.java b/src/generator/Praimary.java deleted file mode 100644 index 03455ae..0000000 --- a/src/generator/Praimary.java +++ /dev/null @@ -1,4 +0,0 @@ -package generator; - -public class Praimary { -} diff --git a/src/generator/PrimaryGenerator.java b/src/generator/PrimaryGenerator.java new file mode 100644 index 0000000..0348ec3 --- /dev/null +++ b/src/generator/PrimaryGenerator.java @@ -0,0 +1,15 @@ +package generator; + +import util.ExpressionUtils; +import java.util.*; + +public class PrimaryGenerator implements ProblemGenerator { + @Override + public List generateProblems(int count) { + List problems = new ArrayList<>(count); + for (int i = 1; i <= count; i++) { + problems.add( ExpressionUtils.generatePrimaryExpr()); + } + return problems; + } +} diff --git a/src/generator/ProblemGenerator.java b/src/generator/ProblemGenerator.java new file mode 100644 index 0000000..ad65cb1 --- /dev/null +++ b/src/generator/ProblemGenerator.java @@ -0,0 +1,8 @@ +package generator; + +import java.util.List; + +public interface ProblemGenerator { + List generateProblems(int count); +} + diff --git a/src/util/ExpressionUtils.java b/src/util/ExpressionUtils.java new file mode 100644 index 0000000..da166f3 --- /dev/null +++ b/src/util/ExpressionUtils.java @@ -0,0 +1,94 @@ +package util; + +import java.util.Random; + +public class ExpressionUtils { + private static Random rand = new Random(); + + // 随机操作符 + private static final String[] OPS_PRIMARY = {"+", "-", "*", "/"}; + private static final String[] OPS_MIDDLE = {"+", "-", "*", "/"}; + private static final String[] OPS_HIGH = {"+", "-", "*", "/"}; + + // 生成一个随机整数 (1–100) + public static String randomNumber() { + return String.valueOf(rand.nextInt(100) + 1); + } + + // 生成小学表达式 + public static String generatePrimaryExpr() { + int operands = rand.nextInt(5) + 1; // 1–5 个操作数 + StringBuilder expr = new StringBuilder(); + for (int i = 0; i < operands; i++) { + if (i > 0) { + expr.append(" ").append(OPS_PRIMARY[rand.nextInt(OPS_PRIMARY.length)]).append(" "); + } + if (rand.nextBoolean() && operands > 1) { + expr.append("(").append(randomNumber()).append(" ").append(OPS_PRIMARY[rand.nextInt(OPS_PRIMARY.length)]) + .append(" ").append(randomNumber()).append(")"); + } else { + expr.append(randomNumber()); + } + } + return expr.toString(); + } + + // 生成初中表达式(至少包含平方或开根号) + public static String generateMiddleExpr() { + int operands = rand.nextInt(5) + 1; + StringBuilder expr = new StringBuilder(); + boolean hasSquareOrSqrt = false; + + for (int i = 0; i < operands; i++) { + if (i > 0) { + expr.append(" ").append(OPS_MIDDLE[rand.nextInt(OPS_MIDDLE.length)]).append(" "); + } + int num = rand.nextInt(100) + 1; + if (!hasSquareOrSqrt && rand.nextBoolean()) { + if (rand.nextBoolean()) { + expr.append("sqrt(").append(num).append(")"); + } else { + expr.append(num).append("^2"); + } + hasSquareOrSqrt = true; + } else { + expr.append(num); + } + } + + // 如果没加上,强制在最后补一个平方 + if (!hasSquareOrSqrt) { + expr.append(" + ").append(rand.nextInt(50) + 1).append("^2"); + } + + return expr.toString(); + } + + // 生成高中表达式(至少包含 sin/cos/tan) + public static String generateHighExpr() { + int operands = rand.nextInt(5) + 1; + StringBuilder expr = new StringBuilder(); + boolean hasTrig = false; + + for (int i = 0; i < operands; i++) { + if (i > 0) { + expr.append(" ").append(OPS_HIGH[rand.nextInt(OPS_HIGH.length)]).append(" "); + } + int num = rand.nextInt(100) + 1; + if (!hasTrig && rand.nextBoolean()) { + String[] funcs = {"sin", "cos", "tan"}; + expr.append(funcs[rand.nextInt(funcs.length)]).append("(").append(num).append(")"); + hasTrig = true; + } else { + expr.append(num); + } + } + + // 如果没加三角函数,强制补一个 + if (!hasTrig) { + expr.append(" + sin(").append(rand.nextInt(90) + 1).append(")"); + } + + return expr.toString(); + } +} diff --git a/src/util/FileUtils.java b/src/util/FileUtils.java new file mode 100644 index 0000000..f5f2e06 --- /dev/null +++ b/src/util/FileUtils.java @@ -0,0 +1,63 @@ +package util; + +import java.io.*; +import java.nio.file.*; +import java.text.SimpleDateFormat; +import java.util.*; + +public class FileUtils { + + // 获取用户文件夹路径 + public static String getUserFolder(String username) { + String folder = "exams/" + username; // 存放在项目目录下 exams/ + File dir = new File(folder); + if (!dir.exists()) { + dir.mkdirs(); + } + return folder; + } + + // 读取历史题目(用于查重) + public static Set loadHistory(String username) { + Set history = new HashSet<>(); + String folder = getUserFolder(username); + + File dir = new File(folder); + File[] files = dir.listFiles((d, name) -> name.endsWith(".txt")); + if (files != null) { + for (File file : files) { + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line; + while ((line = br.readLine()) != null) { + if (!line.trim().isEmpty()) { + history.add(line.trim()); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return history; + } + + // 保存新题目 + public static void saveProblems(String username, List problems) { + String folder = getUserFolder(username); + String timestamp = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()); + String filename = folder + "/" + timestamp + ".txt"; + + try (BufferedWriter bw = new BufferedWriter(new FileWriter(filename))) { + int index=1; + for (String problem : problems) { + bw.write(index+"."+problem); + bw.newLine(); + bw.newLine(); + index++; + } + System.out.println("卷子已保存到: " + filename); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/util/ModifyClass.java b/src/util/ModifyClass.java new file mode 100644 index 0000000..1930cd5 --- /dev/null +++ b/src/util/ModifyClass.java @@ -0,0 +1,88 @@ +package util; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class ModifyClass { + + /** + * 查找目标名字所在行,并替换该行的第三个字符串 + * @param filePath 文件路径 + * @param targetName 要查找的名字(每行第一个字符串) + * @param newThirdString 新的第三个字符串 + * @return 找到并替换的行号,未找到返回-1 + */ + public static int modifyclass(String filePath, String targetName, String newThirdString) { + List lines = new ArrayList<>(); + int targetLineNumber = -1; + + // 第一步:读取文件并查找目标行 + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String line; + int lineNumber = 0; + + while ((line = reader.readLine()) != null) { + lineNumber++; + lines.add(line); // 保存所有行内容 + + // 跳过空行 + if (line.trim().isEmpty()) { + continue; + } + + // 分割行为字符串数组 + String[] parts = line.trim().split("\\s+"); + + // 确保至少有一个字符串(第一个是名字) + if (parts.length > 0 && parts[0].equals(targetName)) { + targetLineNumber = lineNumber; + } + } + } catch (IOException e) { + System.err.println("读取文件错误: " + e.getMessage()); + return -1; + } + + // 如果找到目标行,进行替换 + if (targetLineNumber != -1) { + // 目标行在列表中的索引(注意列表从0开始) + int index = targetLineNumber - 1; + String targetLine = lines.get(index); + String[] parts = targetLine.trim().split("\\s+"); + + // 确保至少有三个字符串才进行替换 + if (parts.length >= 3) { + parts[2] = newThirdString; // 替换第三个字符串(索引为2) + + // 重新组合该行 + StringBuilder newLine = new StringBuilder(); + for (int i = 0; i < parts.length; i++) { + newLine.append(parts[i]); + if (i < parts.length - 1) { + newLine.append(" "); // 用空格分隔 + } + } + + // 更新列表中的行 + lines.set(index, newLine.toString()); + + // 第二步:将修改后的内容写回文件 + try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + for (String line : lines) { + writer.write(line); + writer.newLine(); + } + } catch (IOException e) { + System.err.println("写入文件错误: " + e.getMessage()); + return -1; + } + } else { + System.out.println("第 " + targetLineNumber + " 行没有足够的元素(至少需要3个)"); + } + } + + return targetLineNumber; + } +} + diff --git a/src/util/menu.java b/src/util/menu.java new file mode 100644 index 0000000..7b0d4d2 --- /dev/null +++ b/src/util/menu.java @@ -0,0 +1,120 @@ +package util; +import auth.*; +import generator.*; + +import java.util.*; + +import static util.ModifyClass.modifyclass; + +public class menu { + static Scanner scanner = new Scanner(System.in); + User currentUser = null; + ProblemGenerator generator = null; + + public void Mymenu() { + while (currentUser == null) { + + System.out.println("请输入用户名和密码(用空格隔开):"); + String input = scanner.nextLine(); + String [] parts=input.split(" "); + if (parts.length != 2) { + System.out.println("格式错误,请重新输入。"); + continue; + } + String username = parts[0]; + String password = parts[1]; + UserManager userManager = new UserManager(); + currentUser = userManager.login(username, password); + if (currentUser == null) { + System.out.println("请输入正确的用户名、密码"); + } else { + System.out.println("当前选择为 " + currentUser.getType() + " 出题"); + int tmp = menu1(currentUser, generator); + if(tmp == 1) { + currentUser = null; + generator=null; + break; + } + } + } + } + + public static int menu1(User currentUser, ProblemGenerator generator) { + int count1 = 0; + while (true) { + System.out.println("1.生成试卷"); + System.out.println("2.修改难度"); + System.out.println("3.退出当前登录"); + + int choice = scanner.nextInt(); + scanner.nextLine(); + if (choice == 1) { + generateExam(currentUser); + } else if (choice == 2) { + currentUser = switchDifficulty(currentUser); + } else if (choice == 3) { + //count=1代表currentuser要退出 + count1 = 1; + break; // 退出 + } + } + return count1; + } + + private static void generateExam(User currentUser) { + System.out.println("准备生成 " + currentUser.getType() + + " 数学题目,请输入生成题目数量(输入 -1 退出当前用户):"); + ProblemGenerator generator = getGenerator(currentUser.getType()); + int count = scanner.nextInt(); + if (count == -1) return; + if (count < 10 || count > 30) { + System.out.println("题目数量必须在 10 到 30 之间"); + return; + } + + Set history = FileUtils.loadHistory(currentUser.getUsername()); + List problems = new ArrayList<>(); + while (problems.size() < count) { + List batch = generator.generateProblems(1); + String problem = batch.get(0); + if (!history.contains(problem)) { + problems.add(problem); + history.add(problem); + } + } + for (int i = 0; i Date: Sat, 27 Sep 2025 21:16:30 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/ExpressionUtils.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/util/ExpressionUtils.java b/src/util/ExpressionUtils.java index da166f3..9e1a0b9 100644 --- a/src/util/ExpressionUtils.java +++ b/src/util/ExpressionUtils.java @@ -17,15 +17,16 @@ public class ExpressionUtils { // 生成小学表达式 public static String generatePrimaryExpr() { - int operands = rand.nextInt(5) + 1; // 1–5 个操作数 + int operands = rand.nextInt(4) + 2; // 2–5 个操作数 StringBuilder expr = new StringBuilder(); - for (int i = 0; i < operands; i++) { + for (int i = 0; i 0) { expr.append(" ").append(OPS_PRIMARY[rand.nextInt(OPS_PRIMARY.length)]).append(" "); } - if (rand.nextBoolean() && operands > 1) { + if (rand.nextBoolean() && operands > 1&& i!=operands-1) { expr.append("(").append(randomNumber()).append(" ").append(OPS_PRIMARY[rand.nextInt(OPS_PRIMARY.length)]) .append(" ").append(randomNumber()).append(")"); + i++; } else { expr.append(randomNumber()); } @@ -39,7 +40,7 @@ public class ExpressionUtils { StringBuilder expr = new StringBuilder(); boolean hasSquareOrSqrt = false; - for (int i = 0; i < operands; i++) { + for (int i = 0; i 0) { expr.append(" ").append(OPS_MIDDLE[rand.nextInt(OPS_MIDDLE.length)]).append(" "); } @@ -51,6 +52,7 @@ public class ExpressionUtils { expr.append(num).append("^2"); } hasSquareOrSqrt = true; + } else { expr.append(num); } @@ -70,7 +72,7 @@ public class ExpressionUtils { StringBuilder expr = new StringBuilder(); boolean hasTrig = false; - for (int i = 0; i < operands; i++) { + for (int i = 0; i 0) { expr.append(" ").append(OPS_HIGH[rand.nextInt(OPS_HIGH.length)]).append(" "); } -- 2.34.1 From ee0ac34e7030ad70fde121c4e77291e9223c77e8 Mon Sep 17 00:00:00 2001 From: "@yu-xiuhui" <2810672597@qq.com> Date: Sat, 27 Sep 2025 22:58:57 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/menu.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/util/menu.java b/src/util/menu.java index 7b0d4d2..5bd27cd 100644 --- a/src/util/menu.java +++ b/src/util/menu.java @@ -12,7 +12,7 @@ public class menu { ProblemGenerator generator = null; public void Mymenu() { - while (currentUser == null) { + while (currentUser==null) { System.out.println("请输入用户名和密码(用空格隔开):"); String input = scanner.nextLine(); @@ -49,7 +49,11 @@ public class menu { int choice = scanner.nextInt(); scanner.nextLine(); if (choice == 1) { - generateExam(currentUser); + int temp= generateExam(currentUser); + if(temp== 1) { + count1=1; + break; + } } else if (choice == 2) { currentUser = switchDifficulty(currentUser); } else if (choice == 3) { @@ -61,15 +65,18 @@ public class menu { return count1; } - private static void generateExam(User currentUser) { + private static int generateExam(User currentUser) { System.out.println("准备生成 " + currentUser.getType() + " 数学题目,请输入生成题目数量(输入 -1 退出当前用户):"); ProblemGenerator generator = getGenerator(currentUser.getType()); int count = scanner.nextInt(); - if (count == -1) return; + scanner.nextLine(); + if (count == -1){ + return 1; + } if (count < 10 || count > 30) { System.out.println("题目数量必须在 10 到 30 之间"); - return; + return 1; } Set history = FileUtils.loadHistory(currentUser.getUsername()); @@ -88,6 +95,7 @@ public class menu { } FileUtils.saveProblems(currentUser.getUsername(), problems); + return 0; } private static User switchDifficulty(User currentUser) { -- 2.34.1 From ccbeb34d6cbe6de576104e38eae00e09218ddcf5 Mon Sep 17 00:00:00 2001 From: "@yu-xiuhui" <2810672597@qq.com> Date: Sun, 28 Sep 2025 11:29:49 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=B0=8F=E4=BA=8E40=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.java | 11 ++++++--- src/util/ModifyClass.java | 52 +++++++-------------------------------- src/util/menu.java | 7 +++++- 3 files changed, 23 insertions(+), 47 deletions(-) diff --git a/src/Main.java b/src/Main.java index cdd3ef1..326af45 100644 --- a/src/Main.java +++ b/src/Main.java @@ -21,13 +21,18 @@ public class Main { if(num==1){ Menu.Mymenu(); } - if(num==2) System.exit(0); - if(num==3){ + else if (num==2){ + System.exit(0); + } + else if(num==3){ ModifyPassword.modimenu(); } - if(num==4){ + else if(num==4){ CreateUser.createuser(); } + else{ + System.out.println("输出错误,请重新输入"); + } } } diff --git a/src/util/ModifyClass.java b/src/util/ModifyClass.java index 1930cd5..2204ca5 100644 --- a/src/util/ModifyClass.java +++ b/src/util/ModifyClass.java @@ -17,26 +17,14 @@ public class ModifyClass { List lines = new ArrayList<>(); int targetLineNumber = -1; - // 第一步:读取文件并查找目标行 try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; - int lineNumber = 0; - while ((line = reader.readLine()) != null) { - lineNumber++; - lines.add(line); // 保存所有行内容 - - // 跳过空行 - if (line.trim().isEmpty()) { - continue; - } - - // 分割行为字符串数组 + lines.add(line); + if (line.trim().isEmpty()) continue; String[] parts = line.trim().split("\\s+"); - - // 确保至少有一个字符串(第一个是名字) if (parts.length > 0 && parts[0].equals(targetName)) { - targetLineNumber = lineNumber; + targetLineNumber = lines.size(); } } } catch (IOException e) { @@ -44,45 +32,23 @@ public class ModifyClass { return -1; } - // 如果找到目标行,进行替换 if (targetLineNumber != -1) { - // 目标行在列表中的索引(注意列表从0开始) int index = targetLineNumber - 1; - String targetLine = lines.get(index); - String[] parts = targetLine.trim().split("\\s+"); - - // 确保至少有三个字符串才进行替换 + String[] parts = lines.get(index).trim().split("\\s+"); if (parts.length >= 3) { - parts[2] = newThirdString; // 替换第三个字符串(索引为2) - - // 重新组合该行 - StringBuilder newLine = new StringBuilder(); - for (int i = 0; i < parts.length; i++) { - newLine.append(parts[i]); - if (i < parts.length - 1) { - newLine.append(" "); // 用空格分隔 - } - } - - // 更新列表中的行 - lines.set(index, newLine.toString()); - - // 第二步:将修改后的内容写回文件 + parts[2] = newThirdString; + lines.set(index, String.join(" ", parts)); try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { - for (String line : lines) { - writer.write(line); - writer.newLine(); - } + for (String l : lines) writer.write(l + System.lineSeparator()); } catch (IOException e) { System.err.println("写入文件错误: " + e.getMessage()); return -1; } } else { - System.out.println("第 " + targetLineNumber + " 行没有足够的元素(至少需要3个)"); + System.out.println("第 " + targetLineNumber + " 行元素不足3个"); } } - return targetLineNumber; } -} +} diff --git a/src/util/menu.java b/src/util/menu.java index 5bd27cd..c15d096 100644 --- a/src/util/menu.java +++ b/src/util/menu.java @@ -54,6 +54,7 @@ public class menu { count1=1; break; } + } else if (choice == 2) { currentUser = switchDifficulty(currentUser); } else if (choice == 3) { @@ -61,6 +62,9 @@ public class menu { count1 = 1; break; // 退出 } + else{ + System.out.println("输出错误,请重新输入"); + } } return count1; } @@ -72,11 +76,12 @@ public class menu { int count = scanner.nextInt(); scanner.nextLine(); if (count == -1){ + System.out.println("退出成功"); return 1; } if (count < 10 || count > 30) { System.out.println("题目数量必须在 10 到 30 之间"); - return 1; + return 2; } Set history = FileUtils.loadHistory(currentUser.getUsername()); -- 2.34.1