From 04db1481b9f8753a3d46c0a52baad51acdb41b0b Mon Sep 17 00:00:00 2001 From: chen <3602749708@qq.com> Date: Sat, 11 Oct 2025 11:18:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/说明文档.MD | 87 +++++++++++++++++++++++++++++++++++++++++++ doc/说明文档.pdf | Bin 0 -> 133009 bytes 2 files changed, 87 insertions(+) create mode 100644 doc/说明文档.MD create mode 100644 doc/说明文档.pdf diff --git a/doc/说明文档.MD b/doc/说明文档.MD new file mode 100644 index 0000000..40dd3f3 --- /dev/null +++ b/doc/说明文档.MD @@ -0,0 +1,87 @@ +# 学习软件项目文档 + +## 项目概述 +该学习软件是一个基于Java Swing的应用程序,提供数学题目练习和考试功能。项目采用MVC架构,包含用户管理、题目生成、考试系统等核心模块,用户注册账号,登录后选择难度进行数学考试,软件会给出考试的正确率和得分率。 + +## 运行环境 +编码环境是Java的1.8.0版本,运行jar包没有问题,打包成exe文件后,在Windows系统x64下可以直接运行,功能正常 + +## 使用流程 +初始界面可以选择登录或者注册,选择注册,输入用户名和邮箱,根据收到的注册码确认密码完成注册。输入用户名和密码登录,进入主功能界面,初始小学难度,可切换,题目数限制在10-30,按开始考试进入答题。下方有修改密码和退出登录选项,退出登录会回到初始界面。 + +## 目录结构 +src/ +├── controller/ 控制器层 +├── model/ 数据模型层 +├── view/ 视图层 +├── utils/ 工具类 +└── MathLearningApp.java 应用入口 + +## 核心功能模块 +### 1. 用户管理模块 +用户注册:邮箱验证码注册机制 +用户登录:用户名密码登录 +密码管理:修改密码功能 +用户状态:注册状态管理 + +### 2. 题目管理模块 +题目生成:根据难度自动生成数学题目 +难度分级:小学、初中、高中三个难度级别 +题目类型:四则运算、平方平方根、三角函数等 +选项生成:自动生成干扰选项 + +### 3. 考试系统模块 +试卷生成:按难度和题目数量生成试卷 +答题界面:友好的用户交互界面 +进度管理:题目导航和进度显示 +成绩统计:自动评分和正确率计算 + +### 4. 界面导航模块 +视图管理:统一的界面切换控制 +用户状态保持:登录用户信息管理 + + +## 核心类说明 +### 控制器层 (Controller) +BaseController: 抽象基类,提供验证、日志、消息提示等通用功能 + +UserController: 用户业务逻辑,实现UserService接口 + +QuestionController: 题目业务逻辑,实现QuestionService接口 + +NavigationController: 界面导航控制,实现NavigationService接口 + +### 服务接口 (Service Interfaces) +UserService: 用户相关业务方法契约 + +QuestionService: 题目相关业务方法契约 + +NavigationService: 界面导航方法契约 + +### 数据模型 (Model) +User: 用户数据模型 + +Question: 题目数据模型 + +QuestionGenerator: 题目生成器 + +### 视图层 (View) +LoginView: 用户登录界面 + +RegisterView: 用户注册界面 + +MainView: 主功能界面 + +ExamView: 考试答题界面 + +ResultView: 成绩显示界面 + +ChangePasswordDialog: 修改密码对话框 + +### 工具类 (Utils) +EmailUtil: 邮件发送功能 + +FileUtil: 文件读写操作 + +ValidationUtil: 数据验证工具 + diff --git a/doc/说明文档.pdf b/doc/说明文档.pdf new file mode 100644 index 0000000000000000000000000000000000000000..42ca7c0f11509feab41c89376ceb3643a1d41b96 GIT binary patch literal 133009 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 literal 0 HcmV?d00001 -- 2.34.1 From 1dd4e633324916e905e5d4f438ae6d247ea3fa06 Mon Sep 17 00:00:00 2001 From: chen <3602749708@qq.com> Date: Sat, 11 Oct 2025 11:24:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/BaseController.java | 41 ++++ src/controller/NavigationController.java | 127 ++++++++++ src/controller/NavigationService.java | 14 ++ src/controller/QuestionController.java | 117 ++++++++++ src/controller/QuestionService.java | 17 ++ src/controller/UserController.java | 156 +++++++++++++ src/controller/UserService.java | 11 + src/model/Question.java | 36 +++ src/model/QuestionGenerator.java | 282 +++++++++++++++++++++++ src/model/User.java | 30 +++ 10 files changed, 831 insertions(+) create mode 100644 src/controller/BaseController.java create mode 100644 src/controller/NavigationController.java create mode 100644 src/controller/NavigationService.java create mode 100644 src/controller/QuestionController.java create mode 100644 src/controller/QuestionService.java create mode 100644 src/controller/UserController.java create mode 100644 src/controller/UserService.java create mode 100644 src/model/Question.java create mode 100644 src/model/QuestionGenerator.java create mode 100644 src/model/User.java diff --git a/src/controller/BaseController.java b/src/controller/BaseController.java new file mode 100644 index 0000000..8f73b70 --- /dev/null +++ b/src/controller/BaseController.java @@ -0,0 +1,41 @@ +package controller; + +import javax.swing.JOptionPane; + +public abstract class BaseController { + + protected void validateNotNull(Object obj, String fieldName) { + if (obj == null) { + throw new IllegalArgumentException(fieldName + "不能为空"); + } + } + + protected void validateStringNotEmpty(String str, String fieldName) { + if (str == null || str.trim().isEmpty()) { + throw new IllegalArgumentException(fieldName + "不能为空"); + } + } + + protected void validateStringLength(String str, String fieldName, int min, int max) { + validateStringNotEmpty(str, fieldName); + if (str.length() < min || str.length() > max) { + throw new IllegalArgumentException(fieldName + "长度应在" + min + "-" + max + "之间"); + } + } + + protected void showError(String message) { + JOptionPane.showMessageDialog(null, message, "错误", JOptionPane.ERROR_MESSAGE); + } + + protected void showSuccess(String message) { + JOptionPane.showMessageDialog(null, message, "成功", JOptionPane.INFORMATION_MESSAGE); + } + + protected void logInfo(String message) { + //System.out.println("ℹ️ " + message); + } + + protected void logError(String message) { + System.err.println("❌ " + message); + } +} diff --git a/src/controller/NavigationController.java b/src/controller/NavigationController.java new file mode 100644 index 0000000..eb5c3fb --- /dev/null +++ b/src/controller/NavigationController.java @@ -0,0 +1,127 @@ +package controller; + +import model.User; +import view.LoginView; +import view.RegisterView; +import view.MainView; +import view.ExamView; +import view.ResultView; + +public class NavigationController extends BaseController implements NavigationService { + private static NavigationController instance; + private LoginView loginView; + private RegisterView registerView; + private MainView mainView; + private ExamView examView; + private ResultView resultView; + private User currentUser; + + // 单例模式 + public static NavigationController getInstance() { + if (instance == null) { + instance = new NavigationController(); + } + return instance; + } + + private NavigationController() { + // 私有构造函数 + } + + @Override + public void showLoginView() { + if (loginView == null) { + loginView = new LoginView(); + } + loginView.setVisible(true); + hideAllExcept(loginView); + logInfo("显示登录界面"); + } + + @Override + public void showRegisterView() { + if (registerView == null) { + registerView = new RegisterView(); + } + registerView.setVisible(true); + hideAllExcept(registerView); + logInfo("显示注册界面"); + } + + @Override + public void showMainView(User user) { + setCurrentUser(user); + if (mainView != null) { + mainView.dispose(); + } + mainView = new MainView(user); + mainView.setVisible(true); + hideAllExcept(mainView); + logInfo("显示主界面 - 用户: " + user.getUsername()); + } + + @Override + public void showMainView() { + if (currentUser != null) { + showMainView(currentUser); + } else { + showLoginView(); + } + } + + @Override + public void showExamView(String difficulty, int questionCount) { + try { + validateStringNotEmpty(difficulty, "难度"); + if (questionCount <= 0) { + throw new IllegalArgumentException("题目数量必须大于0"); + } + + if (examView == null) { + examView = new ExamView(); + } + examView.startNewExam(difficulty, questionCount); + examView.setVisible(true); + hideAllExcept(examView); + logInfo("显示考试界面 - " + difficulty + "难度, " + questionCount + "道题"); + } catch (Exception e) { + logError("显示考试界面异常: " + e.getMessage()); + showError("无法开始考试: " + e.getMessage()); + } + } + + @Override + public void showResultView(int score, int total, double percentage) { + try { + if (resultView == null) { + resultView = new ResultView(); + } + resultView.setResults(score, total, percentage); + resultView.setVisible(true); + hideAllExcept(resultView); + logInfo("显示成绩界面 - 得分: " + score + "/" + total); + } catch (Exception e) { + logError("显示成绩界面异常: " + e.getMessage()); + } + } + + @Override + public void setCurrentUser(User user) { + this.currentUser = user; + logInfo("设置当前用户: " + (user != null ? user.getUsername() : "null")); + } + + @Override + public User getCurrentUser() { + return currentUser; + } + + private void hideAllExcept(javax.swing.JFrame visibleFrame) { + javax.swing.JFrame[] frames = {loginView, registerView, mainView, examView, resultView}; + for (javax.swing.JFrame frame : frames) { + if (frame != null && frame != visibleFrame) { + frame.setVisible(false); + } + } + } +} \ No newline at end of file diff --git a/src/controller/NavigationService.java b/src/controller/NavigationService.java new file mode 100644 index 0000000..53adf3a --- /dev/null +++ b/src/controller/NavigationService.java @@ -0,0 +1,14 @@ +package controller; + +import model.User; + +public interface NavigationService { + void showLoginView(); + void showRegisterView(); + void showMainView(User user); + void showMainView(); + void showExamView(String difficulty, int questionCount); + void showResultView(int score, int total, double percentage); + void setCurrentUser(User user); + User getCurrentUser(); +} diff --git a/src/controller/QuestionController.java b/src/controller/QuestionController.java new file mode 100644 index 0000000..026081e --- /dev/null +++ b/src/controller/QuestionController.java @@ -0,0 +1,117 @@ +package controller; + +import model.Question; +import model.QuestionGenerator; +import utils.FileUtil; +import java.util.List; +import java.util.Arrays; + +public class QuestionController extends BaseController implements QuestionService { + private QuestionGenerator generator = new QuestionGenerator(); + private List currentQuestions; + private int currentQuestionIndex = 0; + private int score = 0; + private int[] userAnswers; + private String currentDifficulty; + private int currentQuestionCount; + + @Override + public void startNewExam(String difficulty, int questionCount) { + try { + validateStringNotEmpty(difficulty, "难度"); + if (questionCount <= 0 || questionCount > 100) { + throw new IllegalArgumentException("题目数量必须在1-100之间"); + } + + currentQuestions = generator.generateQuestions(questionCount, difficulty); + currentQuestionIndex = 0; + score = 0; + userAnswers = new int[questionCount]; + Arrays.fill(userAnswers, -1); + currentDifficulty = difficulty; + currentQuestionCount = questionCount; + + FileUtil.saveCurrentExam(currentQuestions, difficulty, questionCount); + logInfo("生成新试卷: " + difficulty + " 难度, " + questionCount + " 道题"); + } catch (Exception e) { + logError("开始新考试异常: " + e.getMessage()); + throw e; + } + } + + @Override + public String getCurrentExamInfo() { + if (currentDifficulty != null && currentQuestionCount > 0) { + return currentDifficulty + "难度 - " + currentQuestionCount + "道题"; + } + return "暂无试卷"; + } + + @Override + public Question getCurrentQuestion() { + if (currentQuestions == null || currentQuestionIndex >= currentQuestions.size()) { + return null; + } + return currentQuestions.get(currentQuestionIndex); + } + + @Override + public void submitAnswer(int answer) { + if (currentQuestionIndex < userAnswers.length) { + userAnswers[currentQuestionIndex] = answer; + logInfo("提交答案: 第" + getCurrentQuestionNumber() + "题, 答案: " + answer); + } + } + + @Override + public boolean nextQuestion() { + currentQuestionIndex++; + boolean hasNext = currentQuestionIndex < currentQuestions.size(); + logInfo("下一题: " + (hasNext ? "有" : "无")); + return hasNext; + } + + @Override + public boolean previousQuestion() { + if (currentQuestionIndex > 0) { + currentQuestionIndex--; + logInfo("上一题: 第" + getCurrentQuestionNumber() + "题"); + return true; + } + return false; + } + + @Override + public int calculateScore() { + score = 0; + for (int i = 0; i < currentQuestions.size(); i++) { + if (userAnswers[i] != -1 && currentQuestions.get(i).isCorrect(userAnswers[i])) { + score++; + } + } + logInfo("计算得分: " + score + "/" + currentQuestions.size()); + return score; + } + + @Override + public double getPercentage() { + double percentage = (double) score / currentQuestions.size() * 100; + logInfo("正确率: " + String.format("%.1f%%", percentage)); + return percentage; + } + + @Override + public int getCurrentQuestionNumber() { + return currentQuestionIndex + 1; + } + + @Override + public int getTotalQuestions() { + return currentQuestions != null ? currentQuestions.size() : 0; + } + + @Override + public int getUserAnswerForCurrentQuestion() { + return userAnswers[currentQuestionIndex]; + } +} \ No newline at end of file diff --git a/src/controller/QuestionService.java b/src/controller/QuestionService.java new file mode 100644 index 0000000..a509ca9 --- /dev/null +++ b/src/controller/QuestionService.java @@ -0,0 +1,17 @@ +package controller; + +import model.Question; + +public interface QuestionService { + void startNewExam(String difficulty, int questionCount); + Question getCurrentQuestion(); + void submitAnswer(int answer); + boolean nextQuestion(); + boolean previousQuestion(); + int calculateScore(); + double getPercentage(); + int getCurrentQuestionNumber(); + int getTotalQuestions(); + int getUserAnswerForCurrentQuestion(); + String getCurrentExamInfo(); +} diff --git a/src/controller/UserController.java b/src/controller/UserController.java new file mode 100644 index 0000000..e1bc1e2 --- /dev/null +++ b/src/controller/UserController.java @@ -0,0 +1,156 @@ +package controller; + +import model.User; +import utils.FileUtil; +import utils.ValidationUtil; +import utils.EmailUtil; + +public class UserController extends BaseController implements UserService { + + @Override + public String registerUser(String username, String email) { + try { + validateStringLength(username, "用户名", 2, 20); + validateStringNotEmpty(email, "邮箱"); + + if (!ValidationUtil.isValidEmail(email)) { + return "邮箱格式不正确"; + } + + if (FileUtil.usernameExists(username)) { + return "用户名已被使用"; + } + + if (FileUtil.emailExists(email)) { + return "该邮箱已被注册"; + } + + String registrationCode = EmailUtil.generateRegistrationCode(); + User user = new User(username, email, registrationCode); + + boolean sendSuccess = EmailUtil.sendRegistrationCode(email, username, registrationCode); + + if (sendSuccess) { + FileUtil.saveUser(user); + logInfo("用户注册成功: " + username); + return "注册码已发送到您的邮箱,请查收!"; + } else { + return "邮件发送失败,请检查邮箱地址或稍后重试"; + } + } catch (IllegalArgumentException e) { + return e.getMessage(); + } catch (Exception e) { + logError("用户注册异常: " + e.getMessage()); + return "系统错误,请稍后重试"; + } + } + + @Override + public String completeRegistration(String username, String code, String password, String confirmPassword) { + try { + validateStringNotEmpty(username, "用户名"); + validateStringNotEmpty(code, "注册码"); + validateStringNotEmpty(password, "密码"); + validateStringNotEmpty(confirmPassword, "确认密码"); + + User user = FileUtil.loadUserByUsername(username); + if (user == null) { + return "用户不存在或注册码未发送"; + } + + if (!user.getRegistrationCode().equals(code)) { + return "注册码不正确"; + } + + if (!password.equals(confirmPassword)) { + return "两次输入的密码不一致"; + } + + if (!ValidationUtil.isValidPassword(password)) { + return "密码必须为6-10位,且包含大小写字母和数字"; + } + + user.setPassword(password); + user.setRegistered(true); + FileUtil.saveUser(user); + + logInfo("用户完成注册: " + username); + return "注册成功!"; + } catch (Exception e) { + logError("完成注册异常: " + e.getMessage()); + return "系统错误,请稍后重试"; + } + } + + @Override + public User login(String loginId, String password) { + try { + validateStringNotEmpty(loginId, "登录ID"); + validateStringNotEmpty(password, "密码"); + + User user; + if (loginId.contains("@")) { + user = FileUtil.loadUserByEmail(loginId); + } else { + user = FileUtil.loadUserByUsername(loginId); + } + + if (user == null) { + logInfo("登录失败: 用户不存在 - " + loginId); + return null; + } + + if (user.getPassword() == null || !user.getPassword().equals(password)) { + logInfo("登录失败: 密码错误 - " + loginId); + return null; + } + + logInfo("登录成功: " + user.getUsername()); + return user; + } catch (Exception e) { + logError("登录异常: " + e.getMessage()); + return null; + } + } + + @Override + public String changePassword(User user, String oldPassword, String newPassword, String confirmPassword) { + try { + validateNotNull(user, "用户"); + validateStringNotEmpty(oldPassword, "原密码"); + validateStringNotEmpty(newPassword, "新密码"); + validateStringNotEmpty(confirmPassword, "确认密码"); + + if (!user.getPassword().equals(oldPassword)) { + return "原密码不正确"; + } + + if (!newPassword.equals(confirmPassword)) { + return "两次输入的新密码不一致"; + } + + if (!ValidationUtil.isValidPassword(newPassword)) { + return "新密码必须为6-10位,且包含大小写字母和数字"; + } + + user.setPassword(newPassword); + FileUtil.saveUser(user); + + logInfo("密码修改成功: " + user.getUsername()); + return "密码修改成功"; + } catch (Exception e) { + logError("修改密码异常: " + e.getMessage()); + return "系统错误,请稍后重试"; + } + } + + @Override + public void cleanupUnregisteredUsers() { + try { + FileUtil.cleanupUnregisteredUsers(); + logInfo("执行未注册用户清理"); + } catch (Exception e) { + logError("清理未注册用户异常: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/controller/UserService.java b/src/controller/UserService.java new file mode 100644 index 0000000..75f7f01 --- /dev/null +++ b/src/controller/UserService.java @@ -0,0 +1,11 @@ +package controller; + +import model.User; + +public interface UserService { + String registerUser(String username, String email); + String completeRegistration(String username, String code, String password, String confirmPassword); + User login(String loginId, String password); + String changePassword(User user, String oldPassword, String newPassword, String confirmPassword); + void cleanupUnregisteredUsers(); +} \ No newline at end of file diff --git a/src/model/Question.java b/src/model/Question.java new file mode 100644 index 0000000..09e3faa --- /dev/null +++ b/src/model/Question.java @@ -0,0 +1,36 @@ +package model; + +import java.io.Serializable; + +public class Question implements Serializable { + private static final long serialVersionUID = 1L; + + private String question; + private String[] options; + private int correctAnswer; + private String difficulty; + + public Question(String question, String[] options, int correctAnswer, String difficulty) { + this.question = question; + this.options = options; + this.correctAnswer = correctAnswer; + this.difficulty = difficulty; + } + + // Getters + public String getQuestion() { return question; } + public String[] getOptions() { return options; } + + + public boolean isCorrect(int selectedAnswer) { + return selectedAnswer == correctAnswer; + } + + @Override + public String toString() { + return "Question{" + + "question='" + question + '\'' + + ", difficulty='" + difficulty + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/src/model/QuestionGenerator.java b/src/model/QuestionGenerator.java new file mode 100644 index 0000000..442751c --- /dev/null +++ b/src/model/QuestionGenerator.java @@ -0,0 +1,282 @@ +package model; + +import java.util.List; +import java.util.ArrayList; +import java.util.Set; +import java.util.HashSet; +import java.util.Arrays; +import java.util.Random; +import java.text.DecimalFormat; + +public class QuestionGenerator { + private Random random = new Random(); + private DecimalFormat df = new DecimalFormat("#.##"); // 保留两位小数的格式化器 + public List generateQuestions(int count, String difficulty) { + List questions = new ArrayList<>(); + Set existingQuestions = new HashSet<>(); + + while (questions.size() < count) { + Question question = generateQuestion(difficulty); + String questionKey = question.getQuestion() + Arrays.toString(question.getOptions()); + + if (!existingQuestions.contains(questionKey)) { + questions.add(question); + existingQuestions.add(questionKey); + } + } + + return questions; + } + + private Question generateQuestion(String difficulty) { + switch (difficulty) { + case "小学": + return generatePrimaryQuestion(); + case "初中": + return generateMiddleSchoolQuestion(); + case "高中": + return generateHighSchoolQuestion(); + default: + return generatePrimaryQuestion(); + } + } + + private Question generatePrimaryQuestion() { + int num1 = random.nextInt(50) + 1; + int num2 = random.nextInt(50) + 1; + int num3 = random.nextInt(50) + 1; + char[] operators = {'+', '-', '*', '/'}; + char operator1 = operators[random.nextInt(operators.length)]; + char operator2 = operators[random.nextInt(operators.length)]; + String question; + double correctAnswer; + // 随机决定是否使用括号 + if (random.nextBoolean()) { + // 有括号的情况 + switch (random.nextInt(3)) { + case 0: // (a op b) op c + correctAnswer = calculate(calculate(num1, num2, operator1), num3, operator2); + question = "(" + num1 + " " + getOperatorSymbol(operator1) + " " + num2 + ") " + + getOperatorSymbol(operator2) + " " + num3 + " = ?"; + break; + case 1: // a op (b op c) + correctAnswer = calculate(num1, calculate(num2, num3, operator2), operator1); + question = num1 + " " + getOperatorSymbol(operator1) + " (" + num2 + " " + + getOperatorSymbol(operator2) + " " + num3 + ") = ?"; + break; + default: // 无括号 + correctAnswer = calculate(calculate(num1, num2, operator1), num3, operator2); + question = num1 + " " + getOperatorSymbol(operator1) + " " + num2 + " " + + getOperatorSymbol(operator2) + " " + num3 + " = ?"; + break; + } + } else { + if (operator1 == '/') { + num2 = random.nextInt(10) + 1; // 避免除零 + } + correctAnswer = calculate(num1, num2, operator1); + question = num1 + " " + getOperatorSymbol(operator1) + " " + num2 + " = ?"; + } + correctAnswer = Double.parseDouble(df.format(correctAnswer)); + String[] options = generateOptions(correctAnswer); + return new Question(question, options, getCorrectOptionIndex(options, correctAnswer), "小学"); + } + + private Question generateMiddleSchoolQuestion() { + String question; + double correctAnswer; + + if (random.nextBoolean()) { + // 平方或平方根题目 + int num = random.nextInt(20) + 1; + if (random.nextBoolean()) { + correctAnswer = Math.pow(num, 2); + question = num + "² = ?"; + } else { + int squared = num * num; + correctAnswer = num; + question = "√" + squared + " = ?"; + } + } else { + // 带加减乘除的题目 + int num1 = random.nextInt(50) + 1; + int num2 = random.nextInt(50) + 1; + int num3 = random.nextInt(20) + 1; + char[] operators = {'+', '-', '*', '/'}; + char operator1 = operators[random.nextInt(operators.length)]; + char operator2 = operators[random.nextInt(operators.length)]; + + // 随机组合平方、平方根和基本运算 + if (random.nextBoolean()) { + // 平方与基本运算组合 + correctAnswer = calculate(Math.pow(num1, 2), num2, operator1); + question = num1 + "² " + getOperatorSymbol(operator1) + " " + num2 + " = ?"; + } else { + // 平方根与基本运算组合 + int squared = num3 * num3; + correctAnswer = calculate(num3, num2, operator1); + question = "√" + squared + " " + getOperatorSymbol(operator1) + " " + num2 + " = ?"; + } + } + correctAnswer = Double.parseDouble(df.format(correctAnswer)); + String[] options = generateOptions(correctAnswer); + return new Question(question, options, getCorrectOptionIndex(options, correctAnswer), "初中"); + } + + private Question generateHighSchoolQuestion() { + + if (random.nextBoolean()) { + return HighSchoolQuestionOne(); + } else { + // 三角函数与基本运算组合 + return HighSchoolQuestionTwo(); + } + + } + + private Question HighSchoolQuestionOne() { + String question; + double correctAnswer; + double angle = random.nextInt(360); + String[] trigFunctions = {"sin", "cos", "tan"}; + String trigFunction = trigFunctions[random.nextInt(trigFunctions.length)]; + + switch (trigFunction) { + case "sin": + correctAnswer = Math.sin(Math.toRadians(angle)); + question = "sin(" + angle + "°) = ?"; + break; + case "cos": + correctAnswer = Math.cos(Math.toRadians(angle)); + question = "cos(" + angle + "°) = ?"; + break; + case "tan": + angle = getSafeTanAngle(); + correctAnswer = Math.tan(Math.toRadians(angle)); + question = "tan(" + angle + "°) = ?"; + break; + default: + correctAnswer = 0; + question = ""; + } + correctAnswer = Double.parseDouble(df.format(correctAnswer)); + String[] options = generateOptions(correctAnswer); + return new Question(question, options, getCorrectOptionIndex(options, correctAnswer), "高中"); + } + private Question HighSchoolQuestionTwo() { + String question; + double correctAnswer; + double angle = random.nextInt(360); + int num = random.nextInt(20) + 1; + char[] operators = {'+', '-', '*', '/'}; + char operator = operators[random.nextInt(operators.length)]; + String[] trigFunctions = {"sin", "cos", "tan"}; + String trigFunction = trigFunctions[random.nextInt(trigFunctions.length)]; + + double trigValue; + switch (trigFunction) { + case "sin": + trigValue = Math.sin(Math.toRadians(angle)); + question = "sin(" + angle + "°) " + getOperatorSymbol(operator) + " " + num + " = ?"; + break; + case "cos": + trigValue = Math.cos(Math.toRadians(angle)); + question = "cos(" + angle + "°) " + getOperatorSymbol(operator) + " " + num + " = ?"; + break; + case "tan": + angle = getSafeTanAngle(); + trigValue = Math.tan(Math.toRadians(angle)); + question = "tan(" + angle + "°) " + getOperatorSymbol(operator) + " " + num + " = ?"; + break; + default: + trigValue = 0; + question = ""; + } + trigValue = Double.parseDouble(df.format(trigValue)); + correctAnswer = calculate(trigValue, num, operator); + String[] options = generateOptions(correctAnswer); + return new Question(question, options, getCorrectOptionIndex(options, correctAnswer), "高中"); + } + // 获取安全的tan角度(更严格的范围) + private double getSafeTanAngle() { + // 为tan函数提供更安全的角度范围,避免无限大的值 + // 排除:85°-95°, 265°-275° 等接近90°和270°的角度 + List safeTanAngles = new ArrayList<>(); + for (int i = 0; i < 360; i++) { + if (isSafeForTan(i)) { + safeTanAngles.add((double) i); + } + } + return safeTanAngles.get(random.nextInt(safeTanAngles.size())); + } + // 检查角度是否对tan函数安全(更严格的条件) + private boolean isSafeForTan(double angle) { + // 排除接近90°、270°的角度,以及排除tan值过大的角度 + return !((angle >= 80 && angle <= 100) || + (angle >= 260 && angle <= 280) || + (angle >= 170 && angle <= 190) || + (angle >= 350 || angle <= 10)); + } + + // 计算方法 + private double calculate(double a, double b, char operator) { + switch (operator) { + case '+': + return a + b; + case '-': + return a - b; + case '*': + return a * b; + case '/': + return b != 0 ? a / b : a; // 避免除零 + default: + return 0; + } + } + + // 获取运算符符号 + private String getOperatorSymbol(char operator) { + switch (operator) { + case '+': + return "+"; + case '-': + return "-"; + case '*': + return "×"; + case '/': + return "÷"; + default: + return ""; + } + } + + private String[] generateOptions(double correctAnswer) { + String[] options = new String[4]; + int correctIndex = random.nextInt(4); + + for (int i = 0; i < 4; i++) { + if (i == correctIndex) { + options[i] = df.format(correctAnswer); + } else { + double wrongAnswer; + do { + double variation = (random.nextDouble() - 0.5) * 10; + wrongAnswer = correctAnswer + variation; + wrongAnswer = Double.parseDouble(df.format(wrongAnswer)); + } while (Math.abs(wrongAnswer - correctAnswer) < 0.1); + options[i] = String.valueOf(wrongAnswer); + } + } + + return options; + } + + private int getCorrectOptionIndex(String[] options, double correctAnswer) { + for (int i = 0; i < options.length; i++) { + if (Double.parseDouble(options[i]) == correctAnswer) { + return i; + } + } + return 0; + } +} \ No newline at end of file diff --git a/src/model/User.java b/src/model/User.java new file mode 100644 index 0000000..ade2948 --- /dev/null +++ b/src/model/User.java @@ -0,0 +1,30 @@ +package model; + +public class User { + private String username; // 新增:用户名 + private String email; + private String password; + private String registrationCode; + private boolean isRegistered; + + public User(String username, String email, String registrationCode) { + this.username = username; + this.email = email; + this.registrationCode = registrationCode; + this.isRegistered = false; + } + + // Getters and Setters + public String getUsername() { return username; } + public void setUsername(String username) { this.username = username; } + + public String getEmail() { return email; } + + public String getPassword() { return password; } + public void setPassword(String password) { this.password = password; } + + public String getRegistrationCode() { return registrationCode; } + + public boolean isRegistered() { return isRegistered; } + public void setRegistered(boolean registered) { isRegistered = registered; } +} \ No newline at end of file -- 2.34.1