说明文档 #9

Merged
p95fco63j merged 2 commits from develop into main 3 months ago

@ -1,2 +0,0 @@
# student_studying

@ -0,0 +1,159 @@
# 🧮 数学出题系统说明文档
> **课程项目名称**:中小学数学卷子自动生成程序
> **作者**:曹峻茂、周竞由
> **版本**V2.5(多文件结构 + 异步邮件 + 注册防重 + 页面跳转优化)
> **日期**2025-10-11
---
## 一、项目概述
本项目是一个基于 **Java Swing 图形界面** 的数学出题系统,面向小学、初中、高中数学教师。
系统支持 **用户注册登录、邮箱验证码验证、试题自动生成与保存、难度选择切换** 等功能。
用户可通过图形界面生成随机不重复的数学题目卷子,并以时间命名的文件形式保存。
---
## 二、环境依赖
- Oracle OpenJDK23
- jakarta.activation-2.0.1.jar
- jakarta.mail-2.0.1.jar
---
## 三、系统功能结构
### 1. 登录模块
- 用户输入邮箱与密码登录
- 若登录信息错误,提示重试
- 登录成功后自动进入 **难度选择页面**
### 2. 注册模块
- 支持邮箱验证码验证
- 密码要求:**610 位,包含大小写字母和数字**
- 新增用户名输入框,**防止重复用户名注册**
- 邮件发送使用异步线程,避免界面"未响应"
- 验证码通过 **腾讯云邮件推送** 或控制台调试输出
### 3. 出题模块
- 支持小学 / 初中 / 高中三种难度
- 每次生成题目数量在 1030 之间
- 同一用户新生成题目与已有文件不重复
- 出题过程采用异步执行并带有进度提示(防止卡死)
### 4. 界面模块
| 界面类 | 功能说明 |
|--------|-----------|
| `LoginPanel` | 用户登录 |
| `RegisterPanel` | 用户注册 |
| `DifficultyPanel` | 难度选择 |
| `QuizPanel` | 出题界面 |
| `AppController` | 控制界面切换 |
| `EmailUtil` | 邮件验证码发送 |
| `UserManager` | 用户文件管理 |
---
## 四、项目结构说明
- student_studying/
- ├── controller/
- │ ├── AppController.java # 主控制器,负责界面切换与业务调度
- │ └── UserManager.java # 用户管理(注册、登录、重复校验)
- │
- ├── model/
- │ └── User.java # 用户实体类(邮箱、密码、用户名)
- │
- ├── ui/
- │ ├── LoginPanel.java # 登录界面
- │ ├── RegisterPanel.java # 注册界面
- │ ├── DifficultyPanel.java # 难度选择界面
- │ └── QuizPanel.java # 出题界面
- │
- └── util/
- └── EmailUtil.java # 邮件发送工具类(异步执行)
---
## 五、关键功能实现
### 1异步邮件发送
`EmailUtil` 中,使用线程池异步执行邮件发送任务:
```java
ExecutorService executor = Executors.newSingleThreadExecutor();
public static String sendVerificationCode(String email) {
String code = generateCode();
executor.submit(() -> {
try {
// 调用腾讯云邮件推送API或JakartaMail发送
sendMail(email, code);
} catch (Exception e) {
e.printStackTrace();
}
});
return code;
}
```
- 这样不会阻塞主线程,界面不会出现"未响应"状态。
### 2注册防重复用户名
- 在 UserManager 中添加:
```java
public boolean isUsernameExists(String username) {
return users.values().stream()
.anyMatch(u -> u.getUsername().equalsIgnoreCase(username));
}
```
- 在注册按钮事件中调用:
```java
if (controller.getUserManager().isUsernameExists(username)) {
JOptionPane.showMessageDialog(this, "用户名已存在,请更换!");
return;
}
```
- 确保用户名全局唯一
### 3页面跳转逻辑优化
- 原逻辑:
- "再做一次" 按钮 → 返回登录界面
- 新逻辑:
- "再做一次" 按钮 → 直接跳转回 难度选择页面
- 修改如下:
```java
retryButton.addActionListener(e -> controller.showDifficultyPanel());
```
- 在 AppController 中新增:
```java
public void showDifficultyPanel() {
frame.setContentPane(new DifficultyPanel(this));
frame.revalidate();
}
```
---
## 六、用户数据管理
- 所有注册用户信息保存在本地 users.txt 文件中,结构如下:
- email,password,username
- teacher1@xx.com,Abc123,张三
- teacher2@xx.com,Def456,李四
---
## 七、项目运行说明
- 运行 AppController.main() 启动程序
- 首次运行点击"注册"创建账户
- 邮箱验证码可通过腾讯云邮件推送或控制台输出
- 登录后选择难度并输入题目数量
- 点击"再做一次"可返回难度选择页面重新生成
- 点击退出退出程序
---
## 八、总结
- 本系统成功实现了:
- 用户注册与登录
- 邮箱验证码验证
- 防止用户名重复
- 题目自动生成
- 多界面跳转与交互优化
Loading…
Cancel
Save