From 132bdded9d825cb5bb7b2098c9c5b3baa8bc2abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=9F=B9=E6=AF=85?= <2642034697@qq.com> Date: Wed, 24 Sep 2025 12:36:02 +0800 Subject: [PATCH] first commit --- .idea/.gitignore | 8 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + math_exam_generator2.iml | 11 + src/Info.class | Bin 0 -> 89 bytes src/Info.java | 2 + src/JuniorQuestionGenerator.class | Bin 0 -> 966 bytes src/JuniorQuestionGenerator.java | 36 ++++ src/MathExamGenerator.class | Bin 0 -> 9910 bytes src/MathExamGenerator.java | 306 ++++++++++++++++++++++++++++ src/PrimaryQuestionGenerator.class | Bin 0 -> 1138 bytes src/PrimaryQuestionGenerator.java | 41 ++++ src/QuestionGenerator.class | Bin 0 -> 208 bytes src/QuestionGenerator.java | 15 ++ src/SeniorQuestionGenerator.class | Bin 0 -> 1000 bytes src/SeniorQuestionGenerator.java | 29 +++ src/UserInfo.class | Bin 0 -> 681 bytes src/UserInfo.java | 53 +++++ src/张三2/2025-09-24-12-24-30.txt | 39 ++++ 19 files changed, 554 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 math_exam_generator2.iml create mode 100644 src/Info.class create mode 100644 src/Info.java create mode 100644 src/JuniorQuestionGenerator.class create mode 100644 src/JuniorQuestionGenerator.java create mode 100644 src/MathExamGenerator.class create mode 100644 src/MathExamGenerator.java create mode 100644 src/PrimaryQuestionGenerator.class create mode 100644 src/PrimaryQuestionGenerator.java create mode 100644 src/QuestionGenerator.class create mode 100644 src/QuestionGenerator.java create mode 100644 src/SeniorQuestionGenerator.class create mode 100644 src/SeniorQuestionGenerator.java create mode 100644 src/UserInfo.class create mode 100644 src/UserInfo.java create mode 100644 src/张三2/2025-09-24-12-24-30.txt diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e9710cf --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9ea5392 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/math_exam_generator2.iml b/math_exam_generator2.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/math_exam_generator2.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/Info.class b/src/Info.class new file mode 100644 index 0000000000000000000000000000000000000000..6c580e7203074e56fea6993ec26ca83da74d2021 GIT binary patch literal 89 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 dBLmzDZ~PPrjG)h0 USER_ACCOUNTS = new HashMap<>(); + + // 当前登录用户信息 + private static UserInfo currentUser = null; + // 已生成的题目集,用于检查重复 + private static final Set generatedQuestions = new HashSet<>(); + + private static boolean isRunning = true; + + static { + // 初始化小学、初中和高中各三个账号 + // 小学账户 + USER_ACCOUNTS.put("张三1", new UserInfo("张三1", "123", "小学")); + USER_ACCOUNTS.put("张三2", new UserInfo("张三2", "123", "小学")); + USER_ACCOUNTS.put("张三3", new UserInfo("张三3", "123", "小学")); + + // 初中账户 + USER_ACCOUNTS.put("李四1", new UserInfo("李四1", "123", "初中")); + USER_ACCOUNTS.put("李四2", new UserInfo("李四2", "123", "初中")); + USER_ACCOUNTS.put("李四3", new UserInfo("李四3", "123", "初中")); + + // 高中账户 + USER_ACCOUNTS.put("王五1", new UserInfo("王五1", "123", "高中")); + USER_ACCOUNTS.put("王五2", new UserInfo("王五2", "123", "高中")); + USER_ACCOUNTS.put("王五3", new UserInfo("王五3", "123", "高中")); + } + + public static void main(String[] args) { + // 使用BufferedReader配合InputStreamReader,明确指定GBK编码 + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(System.in, Charset.forName("GBK")))) { + + System.out.println("欢迎使用中小学数学卷子自动生成程序"); + System.out.println("请使用您的账号和密码登录(格式:用户名 密码)"); + + while (isRunning) { + if (currentUser == null) { + handleLogIn(reader); + } else { + handleRequirement(reader); + } + } + } catch (IOException e) { + System.out.println("输入输出错误:" + e.getMessage()); + } + } + public static void handleLogIn(BufferedReader reader) throws IOException { + // 用户未登录,显示登录提示 + System.out.print("请输入用户名和密码(用空格隔开,输入exit退出):"); + String input = reader.readLine(); + + if (input == null || input.trim().isEmpty()) { + return; + } else if (input.equals("exit")) { + isRunning = false; + return; + } + + String[] parts = input.split(" "); + + if (parts.length == 2) { + String username = parts[0]; + String password = parts[1]; + // 验证用户登录 + boolean loginSuccess = false; + for (Map.Entry entry : USER_ACCOUNTS.entrySet()) { + if (entry.getValue().getUsername().equals(username) && + entry.getValue().getPassword().equals(password)) { + currentUser = entry.getValue(); + loginSuccess = true; + break; + } + } + if (loginSuccess) { + System.out.println("登录成功!当前选择为" + currentUser.getUserType() + "出题"); + System.out.println("提示:您可以输入'切换为小学'、'切换为初中'或'切换为高中'来切换题目难度"); + handleUserChoice(); + loadExistingQuestions(); + } else { + System.out.println("登录失败,请输入正确的用户名和密码"); + } + } else { + System.out.println("输入格式错误,请用空格分隔用户名和密码"); + } + } + private static void handleRequirement(BufferedReader reader) throws IOException { + // 用户已登录,显示题目数量输入提示 + System.out.print("准备生成" + currentUser.getUserType() + + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):"); + String input = reader.readLine(); + if (input == null || input.trim().isEmpty()) { + return; + } + // 检查是否为切换类型命令 + if (input.startsWith("切换为")) { + String targetType = input.substring(3).trim(); + if ("小学".equals(targetType) || "初中".equals(targetType) || "高中".equals(targetType)) { + currentUser.setUserType(targetType); + System.out.println("切换成功!准备生成" + currentUser.getUserType() + "数学题目,请输入生成题目数量"); + } else { + System.out.println("切换类型错误,请输入'切换为小学'、'切换为初中'或'切换为高中'"); + } + return; + } + + try { + int questionCount = Integer.parseInt(input); + + if (questionCount == -1) { + // 退出登录 + currentUser = null; + generatedQuestions.clear(); + System.out.println("已退出登录"); + } else if (questionCount >= 10 && questionCount <= 30) { + // 生成题目 + generateExam(questionCount); + } else { + System.out.println("题目数量必须在10-30之间"); + } + } catch (NumberFormatException e) { + System.out.println("请输入有效的数字"); + } + } + // 生成试卷 + private static void generateExam(int questionCount) { + List questions = generateUniqueQuestions(questionCount); + + // 保存试卷到文件 + saveExamToFile(questions); + + System.out.println("已成功生成" + questions.size() + "道" + currentUser.getUserType() + "数学题目"); + handleUserChoice(); + } + + // 生成不重复的题目 + private static List generateUniqueQuestions(int questionCount) { + List questions = new ArrayList<>(); + Random random = new Random(); + int attempts = 0; + int maxAttempts = questionCount * 3; // 最多尝试次数,避免死循环 + + while (questions.size() < questionCount && attempts < maxAttempts) { + String question = generateQuestion(); + if (!generatedQuestions.contains(question)) { + questions.add(question); + generatedQuestions.add(question); + } + attempts++; + } + + return questions; + } + + // 处理用户生成试卷后的选择 + private static void handleUserChoice() { + System.out.println("请选择:"); + System.out.println("1. 生成题目"); + System.out.println("2. 切换题目难度"); + System.out.println("3. 退出当前用户"); + System.out.println("4. 退出程序"); + + try { + BufferedReader reader = new BufferedReader( + new InputStreamReader(System.in, Charset.forName("GBK"))); + String choice = reader.readLine(); + + switch (choice) { + case "2": + handleDifficultySwitch(); + break; + case "3": + currentUser = null; + generatedQuestions.clear(); + System.out.println("已退出登录"); + break; + case "1": + break; + case "4": + isRunning = false; + break; + default: + // 继续生成题目,不需要额外操作 + break; + } + } catch (IOException e) { + System.out.println("输入错误:" + e.getMessage()); + } + } + + // 处理难度切换 + private static void handleDifficultySwitch() { + try { + BufferedReader reader = new BufferedReader( + new InputStreamReader(System.in, Charset.forName("GBK"))); + + while (true) { + System.out.print("请输入目标难度(小学/初中/高中):"); + String targetType = reader.readLine(); + + if ("小学".equals(targetType) || "初中".equals(targetType) || "高中".equals(targetType)) { + currentUser.setUserType(targetType); + System.out.println("已切换为" + targetType + "难度"); + break; + } else { + System.out.println("难度类型错误,请重新输入"); + } + } + } catch (IOException e) { + System.out.println("输入错误:" + e.getMessage()); + } + } + + // 根据用户类型获取对应的题目生成器 + private static QuestionGenerator getQuestionGenerator() { + if ("小学".equals(currentUser.getUserType())) { + return new PrimaryQuestionGenerator(); + } else if ("初中".equals(currentUser.getUserType())) { + return new JuniorQuestionGenerator(); + } else if ("高中".equals(currentUser.getUserType())) { + return new SeniorQuestionGenerator(); + } + return null; + } + + // 根据用户类型生成题目 + private static String generateQuestion() { + StringBuilder question = new StringBuilder(); + Random random = new Random(); + QuestionGenerator generator = getQuestionGenerator(); + + if (generator != null) { + return generator.generateQuestion(question, random); + } + + return "题目生成错误"; + } + + // 加载已存在的题目,避免重复 + private static void loadExistingQuestions() { + if (currentUser == null) return; + try { + String userDir = currentUser.getUsername(); + File dir = new File(userDir); + + if (dir.exists() && dir.isDirectory()) { + File[] files = dir.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isFile() && file.getName().endsWith(".txt")) { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(new FileInputStream(file), Charset.forName("GBK")))) { + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (!line.isEmpty() && !line.matches("^\\d+\\.")) { + generatedQuestions.add(line); + } + } + } + } + } + } + } + } catch (IOException e) { + System.out.println("加载已存在题目时出错:" + e.getMessage()); + } + } + + // 保存试卷到文件 + private static void saveExamToFile(List questions) { + try { + // 创建用户目录(相对路径) + String userDir = currentUser.getUsername(); + Files.createDirectories(Paths.get(userDir)); + + // 生成文件名:年-月-日-时-分-秒.txt + String timestamp = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()); + String filePath = userDir + File.separator + timestamp + ".txt"; + + try (BufferedWriter writer = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(filePath), Charset.forName("GBK")))) { + for (int i = 0; i < questions.size(); i++) { + writer.write((i + 1) + ". " + questions.get(i)); + writer.newLine(); + if (i < questions.size() - 1) { + writer.newLine(); // 题目之间空一行 + } + } + } + } catch (IOException e) { + System.out.println("保存试卷时出错:" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/PrimaryQuestionGenerator.class b/src/PrimaryQuestionGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..cd819b71c0cbf6d9f55a300e303955434eac3542 GIT binary patch literal 1138 zcmah{&r{Pt7=26AY>2ItK!GZi0tzi{sUlWOp(r3sXHe8QFqI2|W-wS%45>dZp8OY_ z5r>lpxp>e^9i4%bC%yO=sb5k$BE>N?`|a-cz1{Ead-?YB%K?B<%*klSc^MZlz%eKx zDj_CeNJ3nO2MMQ;6emCLINuuy!!lC1=!8oWMkHL8FzW2CaHKh|a$I8&#|_i4a}1tn zY>`2jE*Eu%mU+X}Z&x-~b?d&iTB1x~T{m@0v-P_becLw5Cc|WOenWerrAnH)o>Fbg zFxRIlMyaS<*;=7u8>Q4e%`BETv#|zjmcg&u+S;RA+LqhIWtHI=tF5vYPPVtp|9Bttqm+0I*)TY6svy05w#fFmQT`) zoBA_5Z&CvxnvdnlJ^gV-D{V6bk9tvKk&Qhd37r!&<%;VeSxm1JwXH4PEHWgIo~ikF zf=zWx8M>)w1FJt}$u8F}VQ7yw0<-8v8~wh-mHy=>n#nPWU9=0+%xLxweFFPP3x*Iy z(M@uSXK|5cMOxtd@Dx0XpcVwhs}{V9s1`(pt7G1fHxcq4 z5PoD#RJ==~qA)xE3=g2UzI)F-cfSApdH`S+ccUG{dN{Vk% zOQ~`UW!w=s`yUYhj9%N^wrjq?P!Co%IF9f)V@D1CqDpq#PWKj;Fo7Zdg2c)HF+|H7P@mz~7_Fd< zOnrg)M2DMG>z$yaK8GYVOGO+S`k8yLe?zDmHo|6AGc>arF(T$_K9@geL!VjDazpq` zuNcWDwKilT(uOkn=xyZmAg+gtG9eTC2dv3%qiE2mKWG#)tGW?47gSQ^lB(OVFE<$F zJMCF9nl(;y4kOfHedrL&P!b~&qY`5h;}REyAYDJOPEt~xITODC$iCT~ literal 0 HcmV?d00001 diff --git a/src/SeniorQuestionGenerator.java b/src/SeniorQuestionGenerator.java new file mode 100644 index 0000000..d7d2de6 --- /dev/null +++ b/src/SeniorQuestionGenerator.java @@ -0,0 +1,29 @@ +import java.util.Random; + +/** + * 高中题目生成器实现 + * 生成适合高中生的数学题目,包含三角函数运算 + */ +public class SeniorQuestionGenerator implements QuestionGenerator { + @Override + public String generateQuestion(StringBuilder question, Random random) { + // 确保所有高中题目都包含至少一个sin、cos或tan的运算符 + String[] functions = {"sin(", "cos(", "tan("}; + String func = functions[random.nextInt(functions.length)]; + int angle = random.nextInt(180); + + question.append(func).append(angle).append(")"); + + // 添加一些其他运算符使题目更复杂 + int complexity = random.nextInt(3); + for (int i = 0; i < complexity; i++) { + String[] operators = {"+", "-", "*", "/"}; + String op = operators[random.nextInt(operators.length)]; + int num = random.nextInt(10) + 1; + question.append(" ").append(op).append(" " ).append(num); + } + + question.append(" = ?"); + return question.toString(); + } +} \ No newline at end of file diff --git a/src/UserInfo.class b/src/UserInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..08202448dc4a340a26c957637cfac811df8c05d6 GIT binary patch literal 681 zcma)(OG^S_6o%h#yz5w|qg~9d8yzbbxrwAr5Cl?z)_&AUMs$=>i~dzX613S1K1286Tp^0aM(8;+vu1A@p8*} zFbZwMZWby7$FiHJ%=e6b|FP>de$eVukEp+7+1B7p;3PX=^q)xXPQZKKZBT2uY}w}3 zuv0Ugs!?k*5^0))+v!+ZHaD;6LO0XdCME88k-jV7zLE=Ol>Nh%?$D{57nbZ9l?^ZL z`|goEf(jMeDuM{92ul+|hzFQ30eZX~OwSXs^yTdN8?1w-A9w<_V|3Z;U zV^1-9AM+}rv`c)InD^3a`Wu9vA3@O%M)2r|BY0mJ=bdO%tO8;rSEvzZWrCl^Y>W|C zDMK$v`Se#P&(l&l4v?meFGM}F=swZJLex8p=80-Z(#lo#xQasWmuvhPK0J;dbA=+w I6bS{Z-xv{jasU7T literal 0 HcmV?d00001 diff --git a/src/UserInfo.java b/src/UserInfo.java new file mode 100644 index 0000000..0abbd06 --- /dev/null +++ b/src/UserInfo.java @@ -0,0 +1,53 @@ +/** + * 用户信息类 + * 存储用户的基本信息,包括用户名、密码和用户类型 + */ +public class UserInfo implements Info { + private String username; + private String password; + private String userType; + + /** + * 构造函数 + * @param username 用户名 + * @param password 密码 + * @param userType 用户类型(小学/初中/高中) + */ + public UserInfo(String username, String password, String userType) { + this.username = username; + this.password = password; + this.userType = userType; + } + + /** + * 获取用户名 + * @return 用户名 + */ + public String getUsername() { + return username; + } + + /** + * 获取密码 + * @return 密码 + */ + public String getPassword() { + return password; + } + + /** + * 获取用户类型 + * @return 用户类型 + */ + public String getUserType() { + return userType; + } + + /** + * 设置用户类型 + * @param userType 用户类型 + */ + public void setUserType(String userType) { + this.userType = userType; + } +} \ No newline at end of file diff --git a/src/张三2/2025-09-24-12-24-30.txt b/src/张三2/2025-09-24-12-24-30.txt new file mode 100644 index 0000000..5112caa --- /dev/null +++ b/src/张三2/2025-09-24-12-24-30.txt @@ -0,0 +1,39 @@ +1. 1 * 34 = ? + +2. 30 + 93 = ? + +3. 82 * 33 = ? + +4. 98 * 97 = ? + +5. 58 * 77 = ? + +6. 97 - 96 = ? + +7. 86 - 27 = ? + +8. 73 - 22 = ? + +9. 52 + 5 = ? + +10. 42 - 6 = ? + +11. 72 * 62 = ? + +12. 60 - 23 = ? + +13. 43 - 37 = ? + +14. 198 / 99 = ? + +15. 4 / 1 = ? + +16. 42 + 57 = ? + +17. 356 / 89 = ? + +18. 144 / 36 = ? + +19. 189 / 21 = ? + +20. 74 + 43 = ?