diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000..01062e8 --- /dev/null +++ b/doc/README.md @@ -0,0 +1 @@ +#个人项目:中小学数学卷子自动生成程序 diff --git a/src/ExamSystem.java b/src/ExamSystem.java new file mode 100644 index 0000000..319b429 --- /dev/null +++ b/src/ExamSystem.java @@ -0,0 +1,59 @@ +import java.util.Scanner; + +public class ExamSystem { + private final Scanner scanner = new Scanner(System.in); + public Users login() { + Users users = null; + while (users == null) { + System.out.print("请输入用户名和密码: "); + String input = scanner.nextLine(); + String[] parts = input.split(" "); + if (parts.length == 2) { + users = Users.login(parts[0], parts[1]); + } + if (users == null) { + System.out.println("请输入正确的用户名、密码"); + } + } + System.out.println("当前选择为" + users.getType() + "出题"); + return users; + } + + public void generateProblems(Users users) { + while (true) { + + System.out.print("准备生成" + users.getType() + + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):"); + String input = scanner.nextLine().trim(); + + if (input.equals("-1")) { + break; + } + + ProblemsGenerator generator = switch (users.getType()) { + case "小学" -> new PrimaryProblem(); + case "初中" -> new JuniorProblem(); + case "高中" -> new SeniorProblem(); + default -> null; + }; + + if (input.startsWith("切换为")) { + String target = input.replace("切换为", ""); + if (target.equals("小学") || target.equals("初中") || target.equals("高中")) { + users = new Users(users.getName(), users.getPassword(), target); + System.out.println("系统提示:准备生成" + users.getType() + "数学题目"); + } else { + System.out.println("请输入小学、初中和高中三个选项中的一个"); + } + continue; + } + + int num = Integer.parseInt(input); + if (num >= 10 && num <= 30 && generator != null) { + Generator.generate(users, num, generator); + } else { + System.out.println("请输入 10-30 之间的数字"); + } + } + } +} diff --git a/src/Generator.java b/src/Generator.java new file mode 100644 index 0000000..200797f --- /dev/null +++ b/src/Generator.java @@ -0,0 +1,34 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class Generator { + public static void generate(Users users, int count, ProblemsGenerator problemsGenerator) { + StringBuilder builder = new StringBuilder(); + for (int i = 1; i <= count; i++) { + builder.append(i).append(". ").append(problemsGenerator.generate()).append("\n\n"); + } + save(users, builder.toString()); + System.out.println("题目生成完成。"); + } + + private static void save(Users users, String content) { + try { + String folder = "doc/" + users.getType(); + java.io.File dir = new java.io.File(folder); + if (!dir.exists()) { + dir.mkdirs(); + } + String filename = LocalDateTime.now() + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) + ".txt"; + FileWriter writer = new FileWriter(folder + "/" + filename); + writer.write(content); + writer.close(); + } catch (IOException e) { + System.out.println("保存失败:" + e.getMessage()); + } + } +} + + diff --git a/src/JuniorProblem.java b/src/JuniorProblem.java new file mode 100644 index 0000000..8933d87 --- /dev/null +++ b/src/JuniorProblem.java @@ -0,0 +1,23 @@ +import java.util.Random; + +public class JuniorProblem implements ProblemsGenerator{ + private static final Random RANDOM = new Random(); + + @Override + public String generate() { + int count = RANDOM.nextInt(5) + 1; // 1~5个数 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + int num = RANDOM.nextInt(20) + 1; + if (RANDOM.nextBoolean()) { + sb.append(num).append("^2"); + } else { + sb.append("√").append(num); + } + if (i < count - 1) { + sb.append(" + "); + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..374dc2d --- /dev/null +++ b/src/Main.java @@ -0,0 +1,9 @@ +public class Main { + public static void main(String[] args) { + ExamSystem system = new ExamSystem(); + while (true) { + Users users = system.login(); + system.generateProblems(users); + } + } +} \ No newline at end of file diff --git a/src/PrimaryProblem.java b/src/PrimaryProblem.java new file mode 100644 index 0000000..4b5e693 --- /dev/null +++ b/src/PrimaryProblem.java @@ -0,0 +1,20 @@ +import java.util.Random; + +public class PrimaryProblem implements ProblemsGenerator { + private static final Random RANDOM = new Random(); + private static final char[] OPS = {'+', '-', '*', '/'}; + + @Override + public String generate() { + int count = RANDOM.nextInt(5) + 1; // 1~5个数 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + int num = RANDOM.nextInt(100) + 1; + sb.append(num); + if (i < count - 1) { + sb.append(" ").append(OPS[RANDOM.nextInt(OPS.length)]).append(" "); + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/ProblemsGenerator.java b/src/ProblemsGenerator.java new file mode 100644 index 0000000..94b8bee --- /dev/null +++ b/src/ProblemsGenerator.java @@ -0,0 +1,3 @@ +public interface ProblemsGenerator { + String generate(); +} diff --git a/src/SeniorProblem.java b/src/SeniorProblem.java new file mode 100644 index 0000000..a5675bf --- /dev/null +++ b/src/SeniorProblem.java @@ -0,0 +1,21 @@ +import java.util.Random; + +public class SeniorProblem implements ProblemsGenerator{ + private static final Random RANDOM = new Random(); + private static final String[] FUNCS = {"sin", "cos", "tan"}; + + @Override + public String generate() { + int count = RANDOM.nextInt(5) + 1; // 1~5个数 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + int angle = RANDOM.nextInt(90) + 1; + String func = FUNCS[RANDOM.nextInt(FUNCS.length)]; + sb.append(func).append("(").append(angle).append("°)"); + if (i < count - 1) { + sb.append(" + "); + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/Users.java b/src/Users.java new file mode 100644 index 0000000..b77898d --- /dev/null +++ b/src/Users.java @@ -0,0 +1,44 @@ +public class Users { + private final String name; + private final String password; + private final String type; + + private static final Users[] USERS = { + new Users("张三1", "123", "小学"), + new Users("张三2", "123", "小学"), + new Users("张三3", "123", "小学"), + new Users("李四1", "123", "初中"), + new Users("李四2", "123", "初中"), + new Users("李四3", "123", "初中"), + new Users("王五1", "123", "高中"), + new Users("王五2", "123", "高中"), + new Users("王五3", "123", "高中") + }; + + public Users(String name, String password, String type) { + this.name = name; + this.password = password; + this.type = type; + } + + public String getType() { + return type; + } + + public String getName() { + return name; + } + + public String getPassword() { + return password; + } + + public static Users login(String name, String password) { + for (Users users : USERS) { + if (users.getName().equals(name) && users.getPassword().equals(password)) { + return users; + } + } + return null; + } +} \ No newline at end of file