|
|
|
|
@ -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. 注册模块
|
|
|
|
|
- 支持邮箱验证码验证
|
|
|
|
|
- 密码要求:**6–10 位,包含大小写字母和数字**
|
|
|
|
|
- 新增用户名输入框,**防止重复用户名注册**
|
|
|
|
|
- 邮件发送使用异步线程,避免界面"未响应"
|
|
|
|
|
- 验证码通过 **腾讯云邮件推送** 或控制台调试输出
|
|
|
|
|
|
|
|
|
|
### 3. 出题模块
|
|
|
|
|
- 支持小学 / 初中 / 高中三种难度
|
|
|
|
|
- 每次生成题目数量在 10–30 之间
|
|
|
|
|
- 同一用户新生成题目与已有文件不重复
|
|
|
|
|
- 出题过程采用异步执行并带有进度提示(防止卡死)
|
|
|
|
|
|
|
|
|
|
### 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() 启动程序
|
|
|
|
|
- 首次运行点击"注册"创建账户
|
|
|
|
|
- 邮箱验证码可通过腾讯云邮件推送或控制台输出
|
|
|
|
|
- 登录后选择难度并输入题目数量
|
|
|
|
|
- 点击"再做一次"可返回难度选择页面重新生成
|
|
|
|
|
- 点击退出退出程序
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
## 八、总结
|
|
|
|
|
- 本系统成功实现了:
|
|
|
|
|
|
|
|
|
|
- 用户注册与登录
|
|
|
|
|
|
|
|
|
|
- 邮箱验证码验证
|
|
|
|
|
|
|
|
|
|
- 防止用户名重复
|
|
|
|
|
|
|
|
|
|
- 题目自动生成
|
|
|
|
|
|
|
|
|
|
- 多界面跳转与交互优化
|