# MathGenerator - 中小学数学学习软件 `MathGenerator` 是一个使用 JavaFX 构建的桌面应用程序,旨在为中小学生提供一个有趣且富有挑战性的数学练习平台。用户可以注册登录,选择不同难度(小学、初中、高中),生成定制数量的数学测验卷,并在完成后立即获得分数反馈。 ## 核心功能 - **完整的用户系统**: 支持新用户注册、邮箱验证、登录以及密码修改功能。 - **三级难度递进**: - **小学**: “安全”的四则运算,确保运算过程和结果不为负数。 - **初中**: 在小学基础上,增加了平方和开方运算。 - **高中**: 在初中基础上,增加了基础的三角函数运算 (sin, cos, tan)。 - **动态试卷生成**: 用户可自定义每套试卷的题目数量(10-30题),程序会根据所选难度动态生成不重复的题目。 - **即时反馈与评分**: 完成答题后,系统会立刻计算分数,并根据分数高低给出不同的鼓励性评语。 - **试卷存档**: 每次生成的试卷都会自动以 `.txt` 格式保存在本地,方便用户随时回顾和复习。 - **精美的用户界面**: 使用 JavaFX 和 CSS精心设计了所有界面,包含自定义的背景图片和玻璃拟态效果,提升了用户体验。 ## 技术栈 - **核心框架**: Java 17, JavaFX 17 - **JSON 处理**: Google Gson (用于持久化用户数据) - **邮件服务**: Apache Commons Mail (用于发送注册验证码) - **表达式计算**: Mozilla Rhino (用于动态计算生成的数学表达式字符串) - **构建工具**: Maven ## 如何运行 #### 1\. 先决条件 - JDK 17 或更高版本 - Apache Maven #### 2\. 配置邮件服务 为了使“邮箱验证码”功能正常工作,您需要在项目根目录下创建一个 `config.properties` 文件,并填入您的 SMTP 服务信息。 同时,在自己的邮箱设置中开通相应服务 **`config.properties` 文件模板:** ```properties # QQ邮箱 SMTP 服务器配置示例 smtp.host=smtp.qq.com smtp.port=465 # 您的发件人邮箱地址 smtp.username=your-email@qq.com # 您的邮箱SMTP授权码 (注意:不是邮箱登录密码) smtp.password=your_email_authorization_code ``` #### 3\. 构建和运行 在项目根目录下,执行以下 Maven 命令: ```bash # 清理并构建项目,生成一个可执行的 fat-jar mvn clean package # 运行生成的 JAR 文件 java -jar MathGenerator-1.0.0.jar ``` *(注意: JAR 文件名可能因 `pom.xml` 配置而异)* ## 项目结构 ``` src ├── main │ ├── java │ │ └── com │ │ └── mathgenerator │ │ ├── controller # FXML视图的控制器类 │ │ ├── generator # 不同难度题目的生成器 │ │ ├── model # 数据模型 (User, Level, ChoiceQuestion) │ │ ├── service # 核心业务逻辑 (用户服务, 试卷服务) │ │ ├── storage # 文件读写管理 │ │ ├── util # 工具类 (验证逻辑) │ │ ├── Launcher.java # 解决 fat-jar 问题的启动器 │ │ └── MainApplication.java # JavaFX主程序入口 │ └── resources │ └── com │ └── mathgenerator │ ├── images # UI图片资源 │ ├── styles # CSS样式表 │ │ │ └── view # FXML界面布局文件 │── users.json # (程序首次运行后生成) 用户数据文件 └── config.properties # 邮箱配置文件 ``` ## 界面概览 - **登录与注册**: 简洁的登录界面,提供注册新用户的入口。注册流程包含邮箱验证,确保用户真实性。 - **主菜单**: 用户登录后,可以看到欢迎信息,并选择“小学”、“初中”、“高中”三种难度。同时可以自定义题目数量。 - **答题界面**: 清晰地展示题目、选项和进度条。用户通过单选按钮作答,并提交答案进入下一题。 - **分数界面**: 所有题目完成后,展示最终得分和鼓励评语,并提供“再做一组”或“退出登录”的选项。 -----