|
|
|
|
@ -0,0 +1,195 @@
|
|
|
|
|
# 数学题目生成器 (Math Quiz Generator)
|
|
|
|
|
|
|
|
|
|
## 项目简介
|
|
|
|
|
|
|
|
|
|
这是一个基于Java开发的数学题目生成器,支持小学、初中、高中三个难度级别的数学题目自动生成。程序采用面向对象设计,具有良好的扩展性和可维护性。
|
|
|
|
|
|
|
|
|
|
## 功能特性
|
|
|
|
|
|
|
|
|
|
- ? **多难度支持** - 支持小学、初中、高中三个难度级别
|
|
|
|
|
- ? **用户认证** - 内置用户登录验证系统
|
|
|
|
|
- ? **智能去重** - 自动检测并避免生成重复题目
|
|
|
|
|
- ? **文件管理** - 自动按用户和日期保存生成的题目
|
|
|
|
|
- ? **动态切换** - 支持运行时切换难度级别
|
|
|
|
|
- ? **灵活数量** - 支持生成10-30道题目
|
|
|
|
|
|
|
|
|
|
## 系统要求
|
|
|
|
|
|
|
|
|
|
- **Java版本**: Java 8 或更高版本
|
|
|
|
|
- **操作系统**: Windows、Linux、macOS
|
|
|
|
|
- **内存**: 至少 128MB 可用内存
|
|
|
|
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
apersonalproject/
|
|
|
|
|
├── src/mathquiz/ # 源代码目录
|
|
|
|
|
│ ├── Main.java # 主程序入口
|
|
|
|
|
│ ├── AccountType.java # 账户类型枚举
|
|
|
|
|
│ ├── AuthService.java # 认证服务
|
|
|
|
|
│ ├── ConsolePrompter.java # 控制台交互
|
|
|
|
|
│ ├── Deduplicator.java # 去重器
|
|
|
|
|
│ ├── GeneratorFactory.java # 生成器工厂
|
|
|
|
|
│ ├── PaperSaver.java # 文件保存器
|
|
|
|
|
│ ├── ProblemGenerator.java # 题目生成器接口
|
|
|
|
|
│ ├── PrimaryGenerator.java # 小学题目生成器
|
|
|
|
|
│ ├── MiddleGenerator.java # 初中题目生成器
|
|
|
|
|
│ ├── HighGenerator.java # 高中题目生成器
|
|
|
|
|
│ └── Validators.java # 输入验证器
|
|
|
|
|
├── out/production/ # 编译输出目录
|
|
|
|
|
├── output/ # 生成的题目保存目录
|
|
|
|
|
├── mathquiz.jar # 可执行JAR文件
|
|
|
|
|
├── run_mathquiz.bat # Windows启动脚本
|
|
|
|
|
└── README.md # 项目说明文档
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
### 方法一:使用批处理文件(推荐)
|
|
|
|
|
|
|
|
|
|
1. 双击 `run_mathquiz.bat` 文件
|
|
|
|
|
2. 程序将自动启动
|
|
|
|
|
|
|
|
|
|
### 方法二:命令行运行
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
java -jar mathquiz.jar
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 使用指南
|
|
|
|
|
|
|
|
|
|
### 1. 用户登录
|
|
|
|
|
|
|
|
|
|
程序启动后,会提示输入用户名和密码:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
请输入用户名和密码(用空格分隔):
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2. 选择难度级别
|
|
|
|
|
|
|
|
|
|
登录成功后,程序会显示当前选择的难度级别:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
当前选择为 小学 出题
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3. 生成题目
|
|
|
|
|
|
|
|
|
|
输入要生成的题目数量(10-30之间):
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
准备生成 小学 数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4. 切换难度级别
|
|
|
|
|
|
|
|
|
|
在输入题目数量时,可以使用以下命令切换难度:
|
|
|
|
|
|
|
|
|
|
- `切换为小学` - 切换到小学难度
|
|
|
|
|
- `切换为初中` - 切换到初中难度
|
|
|
|
|
- `切换为高中` - 切换到高中难度
|
|
|
|
|
|
|
|
|
|
### 5. 查看生成的题目
|
|
|
|
|
|
|
|
|
|
生成的题目会自动保存到 `output/用户名/` 目录下,文件名格式为:
|
|
|
|
|
```
|
|
|
|
|
YYYY-MM-DD-HH-mm-ss.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 技术架构
|
|
|
|
|
|
|
|
|
|
### 核心类说明
|
|
|
|
|
|
|
|
|
|
- **Main**: 程序入口,处理用户交互流程
|
|
|
|
|
- **AuthService**: 用户认证服务,验证用户名密码
|
|
|
|
|
- **GeneratorFactory**: 生成器工厂,根据难度级别创建对应的生成器
|
|
|
|
|
- **ProblemGenerator**: 题目生成器接口,定义生成题目的标准
|
|
|
|
|
- **Deduplicator**: 去重器,确保生成的题目不重复
|
|
|
|
|
- **PaperSaver**: 文件保存器,负责将题目保存到文件
|
|
|
|
|
|
|
|
|
|
### 设计模式
|
|
|
|
|
|
|
|
|
|
- **工厂模式**: `GeneratorFactory` 根据难度级别创建对应的生成器
|
|
|
|
|
- **策略模式**: 不同难度级别使用不同的题目生成策略
|
|
|
|
|
- **单例模式**: 认证服务采用单例模式确保全局唯一
|
|
|
|
|
|
|
|
|
|
## 开发说明
|
|
|
|
|
|
|
|
|
|
### 编译项目
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 编译所有Java文件
|
|
|
|
|
javac -d out/production/apersonalproject src/mathquiz/*.java
|
|
|
|
|
|
|
|
|
|
# 创建JAR文件
|
|
|
|
|
jar cfm mathquiz.jar MANIFEST.MF -C out/production/apersonalproject .
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 添加新的难度级别
|
|
|
|
|
|
|
|
|
|
1. 创建新的生成器类,实现 `ProblemGenerator` 接口
|
|
|
|
|
2. 在 `GeneratorFactory` 中添加对应的创建逻辑
|
|
|
|
|
3. 在 `AccountType` 枚举中添加新的类型
|
|
|
|
|
|
|
|
|
|
## 输出示例
|
|
|
|
|
|
|
|
|
|
### 小学题目示例
|
|
|
|
|
```
|
|
|
|
|
1. 15 + 23 = ?
|
|
|
|
|
2. 67 - 34 = ?
|
|
|
|
|
3. 8 × 7 = ?
|
|
|
|
|
4. 56 ÷ 8 = ?
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 初中题目示例
|
|
|
|
|
```
|
|
|
|
|
1. 解方程:2x + 5 = 13
|
|
|
|
|
2. 计算:(3x + 2)(x - 1)
|
|
|
|
|
3. 求函数 y = 2x + 3 在 x = 4 时的值
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 高中题目示例
|
|
|
|
|
```
|
|
|
|
|
1. 求导数:f(x) = x? + 2x? - 5x + 1
|
|
|
|
|
2. 计算定积分:∫?? (2x + 1) dx
|
|
|
|
|
3. 解不等式:x? - 4x + 3 > 0
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 故障排除
|
|
|
|
|
|
|
|
|
|
### 常见问题
|
|
|
|
|
|
|
|
|
|
1. **"找不到或无法加载主类"**
|
|
|
|
|
- 确保已安装Java运行环境
|
|
|
|
|
- 检查JAR文件是否完整
|
|
|
|
|
|
|
|
|
|
2. **"权限被拒绝"**
|
|
|
|
|
- 确保有写入output目录的权限
|
|
|
|
|
- 检查文件是否被其他程序占用
|
|
|
|
|
|
|
|
|
|
3. **生成的题目重复**
|
|
|
|
|
- 程序内置去重机制,如仍有重复,请检查去重器逻辑
|
|
|
|
|
|
|
|
|
|
## 版本历史
|
|
|
|
|
|
|
|
|
|
- **v1.0** (2025-09-28)
|
|
|
|
|
- 初始版本发布
|
|
|
|
|
- 支持小学、初中、高中三个难度级别
|
|
|
|
|
- 实现用户认证和题目去重功能
|
|
|
|
|
|
|
|
|
|
## 贡献指南
|
|
|
|
|
|
|
|
|
|
欢迎提交Issue和Pull Request来改进这个项目!
|
|
|
|
|
|
|
|
|
|
## 许可证
|
|
|
|
|
|
|
|
|
|
本项目采用 MIT 许可证。
|
|
|
|
|
|
|
|
|
|
## 作者
|
|
|
|
|
|
|
|
|
|
**赵文琪** - 项目开发者
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
*如有问题或建议,请通过Issue联系我们。*
|