|
|
# 中小学数学卷子自动生成程序
|
|
|
|
|
|
## 项目简介
|
|
|
|
|
|
这是一个基于Java开发的智能数学试卷自动生成系统,专为中小学数学教师设计。系统能够根据不同学段(小学、初中、高中)自动生成符合教学大纲要求的数学题目,支持用户管理、题目查重、类型切换等功能。
|
|
|
|
|
|
## 功能特点
|
|
|
|
|
|
### 🔐 用户认证系统
|
|
|
- **多用户支持**:预设小学、初中、高中各三个测试账户
|
|
|
- **安全验证**:用户名密码双重验证机制
|
|
|
- **权限管理**:不同学段用户只能生成对应难度的题目
|
|
|
|
|
|
### 📝 智能题目生成
|
|
|
- **小学题目**:加减乘除四则运算,支持括号优先级
|
|
|
- **初中题目**:包含平方、开根号等进阶运算
|
|
|
- **高中题目**:支持三角函数等高等数学运算
|
|
|
- **难度控制**:操作数范围1-100,操作符数量1-5个
|
|
|
- **随机性保证**:基于Java Random类的真随机数生成
|
|
|
|
|
|
### 🔍 智能查重系统
|
|
|
- **历史查重**:自动检查用户历史生成的题目
|
|
|
- **实时去重**:避免在同一份试卷中出现重复题目
|
|
|
- **文件级查重**:基于用户文件夹下的所有历史文件
|
|
|
|
|
|
### 🔄 灵活类型切换
|
|
|
- **动态切换**:登录状态下可随时切换出题类型
|
|
|
- **命令格式**:输入"切换为 XX"(XX为小学、初中、高中)
|
|
|
- **即时生效**:切换后立即应用新的题目生成规则
|
|
|
|
|
|
### 💾 智能文件管理
|
|
|
- **用户隔离**:按用户名创建独立的文件夹
|
|
|
- **时间戳命名**:文件名格式:年-月-日-时-分-秒.txt
|
|
|
- **规范格式**:题目有序号,每题之间空一行,便于阅读
|
|
|
|
|
|
## 预设账户
|
|
|
|
|
|
| 学段 | 用户名 | 密码 | 权限说明 |
|
|
|
|------|--------|------|----------|
|
|
|
| 小学 | 张三1 | 123 | 生成小学难度题目 |
|
|
|
| 小学 | 张三2 | 123 | 生成小学难度题目 |
|
|
|
| 小学 | 张三3 | 123 | 生成小学难度题目 |
|
|
|
| 初中 | 李四1 | 123 | 生成初中难度题目 |
|
|
|
| 初中 | 李四2 | 123 | 生成初中难度题目 |
|
|
|
| 初中 | 李四3 | 123 | 生成初中难度题目 |
|
|
|
| 高中 | 王五1 | 123 | 生成高中难度题目 |
|
|
|
| 高中 | 王五2 | 123 | 生成高中难度题目 |
|
|
|
| 高中 | 王五3 | 123 | 生成高中难度题目 |
|
|
|
|
|
|
## 技术架构
|
|
|
|
|
|
### 项目结构
|
|
|
```
|
|
|
src/
|
|
|
├── App.java # 主程序入口,控制程序流程
|
|
|
├── User.java # 用户实体类,管理用户信息和认证
|
|
|
├── QuestionGenerator.java # 题目生成器抽象类,定义公共接口
|
|
|
├── PrimarySchoolGenerator.java # 小学题目生成器实现
|
|
|
├── MiddleSchoolGenerator.java # 初中题目生成器实现
|
|
|
├── HighSchoolGenerator.java # 高中题目生成器实现
|
|
|
└── FileManager.java # 文件操作工具类
|
|
|
```
|
|
|
|
|
|
### 核心类说明
|
|
|
|
|
|
- **App类**:程序主控制器,负责用户交互和流程调度
|
|
|
- **User类**:用户数据模型,包含用户名、密码和权限信息
|
|
|
- **QuestionGenerator**:抽象工厂模式,定义题目生成规范
|
|
|
- **各学段生成器**:策略模式实现,不同难度采用不同生成策略
|
|
|
- **FileManager**:单例模式,统一管理文件读写操作
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
### 环境要求
|
|
|
|
|
|
#### 系统平台要求
|
|
|
- **操作系统**:Windows 10/11、macOS 10.14+、Linux Ubuntu 18.04+ 或其他支持Java的命令行操作系统
|
|
|
- **Java版本**:Java 17 或更高版本(推荐Java 21或Java 23)
|
|
|
- **磁盘空间**:至少100MB可用磁盘空间
|
|
|
- **内存要求**:至少512MB可用内存
|
|
|
|
|
|
#### 环境配置
|
|
|
1. **Java环境检查**:
|
|
|
```bash
|
|
|
java -version
|
|
|
javac -version
|
|
|
```
|
|
|
确保两个命令都能正确显示版本信息
|
|
|
|
|
|
2. **字符编码设置**(重要):
|
|
|
- 在Windows PowerShell中运行前,必须先设置UTF-8编码:
|
|
|
```powershell
|
|
|
[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
```
|
|
|
- 在CMD中,使用`chcp 65001`设置UTF-8编码
|
|
|
- Linux/macOS系统通常默认支持UTF-8
|
|
|
|
|
|
3. **路径配置**:
|
|
|
- 确保Java的bin目录已添加到系统PATH环境变量中
|
|
|
- 项目路径中不要包含中文或特殊字符
|
|
|
|
|
|
#### 运行参数
|
|
|
- **默认参数**:程序运行无需额外参数
|
|
|
- **内存设置**(可选):如需处理大量题目,可设置JVM内存:
|
|
|
```bash
|
|
|
java -Xmx512m -cp bin App
|
|
|
```
|
|
|
- **编码强制设置**(如遇到乱码):
|
|
|
```bash
|
|
|
java -Dfile.encoding=UTF-8 -cp bin App
|
|
|
```
|
|
|
|
|
|
### 编译项目
|
|
|
|
|
|
#### 终端运行前准备
|
|
|
**重要**:在运行程序前,请先在终端中执行以下命令设置UTF-8编码:
|
|
|
|
|
|
```powershell
|
|
|
# Windows PowerShell(必须执行)
|
|
|
[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
```
|
|
|
|
|
|
```bash
|
|
|
# 进入项目目录
|
|
|
cd 1
|
|
|
|
|
|
# 编译所有Java源文件
|
|
|
javac -d bin src/*.java
|
|
|
|
|
|
# Windows系统也可使用:
|
|
|
javac -d bin src\*.java
|
|
|
```
|
|
|
|
|
|
### 运行程序
|
|
|
|
|
|
```bash
|
|
|
# 运行主程序(确保已执行上述编码设置)
|
|
|
java -cp bin App
|
|
|
|
|
|
# 或者指定类路径
|
|
|
java -classpath bin App
|
|
|
|
|
|
# 完整命令示例(包含编码设置和运行):
|
|
|
[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
|
cd 1
|
|
|
java -cp bin App
|
|
|
```
|
|
|
|
|
|
## 使用指南
|
|
|
|
|
|
### 基本操作流程
|
|
|
|
|
|
1. **启动程序**:运行`java -cp bin App`命令
|
|
|
2. **用户登录**:输入用户名和密码(用空格分隔)
|
|
|
```
|
|
|
请输入用户名和密码(用空格隔开):张三1 123
|
|
|
```
|
|
|
3. **查看权限**:登录成功后显示当前出题类型
|
|
|
```
|
|
|
登录成功!当前出题类型:小学
|
|
|
```
|
|
|
4. **生成题目**:输入要生成的题目数量(10-30)
|
|
|
```
|
|
|
请输入题目数量(10-30):15
|
|
|
```
|
|
|
5. **切换类型**:或输入"切换为 XX"来改变出题类型
|
|
|
```
|
|
|
请输入题目数量或切换类型:切换为初中
|
|
|
```
|
|
|
6. **退出登录**:输入"-1"退出当前用户
|
|
|
|
|
|
### 文件输出示例
|
|
|
|
|
|
生成的试卷文件示例:
|
|
|
```
|
|
|
1. (3 + 5) × 2 - 4 ÷ 2 =
|
|
|
|
|
|
2. 7 × (9 - 3) + 6 ÷ 2 =
|
|
|
|
|
|
3. 12 + 8 ÷ 4 × 3 - 5 =
|
|
|
...
|
|
|
```
|
|
|
|
|
|
## 开发规范
|
|
|
|
|
|
### 代码质量
|
|
|
- **面向对象设计**:采用清晰的类结构和职责分离
|
|
|
- **方法简洁性**:单个方法代码行数控制在40行以内
|
|
|
- **命名规范**:遵循Java驼峰命名法,见名知意
|
|
|
- **注释完整**:关键方法和复杂逻辑有详细注释
|
|
|
|
|
|
### 错误处理
|
|
|
- **输入验证**:对用户输入进行严格的格式和范围检查
|
|
|
- **异常捕获**:使用try-catch处理可能的运行时异常
|
|
|
- **友好提示**:提供清晰易懂的错误信息
|
|
|
|
|
|
## 扩展建议
|
|
|
|
|
|
### 功能扩展
|
|
|
1. **题目难度分级**:在每个学段内设置不同难度级别
|
|
|
2. **题目类型扩展**:增加几何、代数等更多题目类型
|
|
|
3. **批量生成**:支持一次性生成多套试卷
|
|
|
4. **模板定制**:允许教师自定义试卷模板格式
|
|
|
|
|
|
### 技术优化
|
|
|
1. **数据库支持**:使用数据库存储用户和题目数据
|
|
|
2. **Web界面**:开发Web版界面,提升用户体验
|
|
|
3. **算法优化**:改进题目生成算法,提高题目质量
|
|
|
4. **国际化**:支持多语言界面
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
### 系统要求
|
|
|
- 确保Java环境正确安装并配置PATH
|
|
|
- 程序运行目录需要有写权限
|
|
|
- 建议在SSD硬盘上运行以获得更好的文件读写性能
|
|
|
|
|
|
### 数据安全
|
|
|
- 用户密码以明文存储,生产环境建议加密
|
|
|
- 定期备份papers文件夹中的重要数据
|
|
|
- 避免在公共计算机上保存敏感的用户数据
|
|
|
|
|
|
### 性能考虑
|
|
|
- 题目数量较多时,生成时间会相应增加
|
|
|
- 历史文件较多时,查重操作可能影响性能
|
|
|
- 建议定期清理不再需要的历史试卷文件
|
|
|
|
|
|
## 技术支持
|
|
|
|
|
|
如遇到问题,请检查:
|
|
|
1. Java环境是否安装正确
|
|
|
2. 文件路径权限是否足够
|
|
|
3. 输入格式是否符合要求
|
|
|
4. 磁盘空间是否充足
|
|
|
|
|
|
---
|
|
|
|
|
|
*最后更新:2025年9月28日*
|