You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
5 months ago | |
|---|---|---|
| .. | ||
| README.md | 5 months ago | |
| 个人项目使用大模型后人工修改代码一览表.docx | 5 months ago | |
README.md
MyMathQuiz_New
软4_李瑜清_个人项目
1. 项目简介
本项目是一个基于 Java 实现的中小学数学卷子自动生成程序。程序通过命令行与用户交互,可以根据不同用户类型(小学、初中、高中)的教师账号,生成符合特定难度要求的数学题目,并将生成的卷子保存为 .txt 文件。
本项目严格按照《软件工程导论-个人项目需求-2025》文档的要求进行开发。
2. 已实现功能
- 用户登录:支持小学、初中、高中各3个预设账号登录,并进行身份验证。
- 题目生成:
- 小学难度:生成包含
+,-,*,/和()的四则运算题目。 - 初中难度:生成的题目中至少包含一个平方或开根号运算。
- 高中难度:生成的题目中至少包含一个
sin,cos或tan三角函数运算。
- 小学难度:生成包含
- 题目格式:所有生成的题目末尾都以
=结尾,方便作答。 - 数量控制:支持用户输入10-30之间的整数,用于指定生成题目的数量。
- 题目查重:确保为同一位老师生成的卷子中,不会出现与历史卷子(该老师文件夹下已存在的文件)重复的题目。
- 类型切换:登录后,用户可以通过
切换为XX命令动态改变当前要生成的题目类型。 - 文件保存:生成的卷子会自动保存在以用户名命名的文件夹下,文件名格式为
年-月-日-时-分-秒.txt。 - 用户退出:支持输入
-1退出当前登录,返回登录界面。
3. 如何运行
本项目最终交付的可执行文件位于 src 目录下。请按照以下步骤运行程序:
-
检查Java环境 确保您的计算机已安装 Java 8 (JDK 1.8) 或更高版本的 JRE。您可以在命令行工具中执行
java -version来进行验证。 -
启动程序 打开您的命令行工具(如 Windows 的 CMD 或 PowerShell,macOS/Linux 的 Terminal),然后执行以下两个步骤:
第一步:进入
.jar文件所在的src目录。 您需要使用cd命令切换到src文件夹。例如,如果您的整个项目文件夹在桌面上,命令可能如下:# 这是一个示例路径,请根据您的实际情况修改 cd C:\Users\YourName\Desktop\MyMathQuiz_New\src第二步:执行 .jar 文件。 在
src目录下,运行以下命令来启动数学卷子生成程序:java -jar MyMathQuiz_New.jar(注意:
MyMathQuiz_New.jar是我们项目默认的打包文件名,如果您的文件名不同,请相应修改)成功执行后,您将在命令行看到程序的欢迎界面和登录提示。
4. 代码结构
.
├── doc/ # 存放说明文档
│ └── README.md
└── src/ # 存放所有 Java 源代码
└── com/
└── student/
└── mathquiz/
├── Main.java # 程序主入口和用户交互逻辑
├── UserType.java # 用户类型枚举 (小学, 初中, 高中)
├── UserDatabase.java # 模拟数据库,负责用户账户管理与验证
├── QuestionGenerator.java # 核心题目生成器,负责各难度题目创建
└── QuizManager.java # 文件管理器,负责卷子保存与历史题目
5. 开发环境
-
操作系统: Windows
-
IDE: IntelliJ IDEA
-
JDK: Java 1.8 (Amazon Corretto 8)
-
代码规范: Google Java Style Guide
-
版本控制: Git
6. 项目目标与设计思路
本项目的核心目标是创建一个稳定、可靠且易于扩展的命令行数学题目生成工具。在设计上,主要遵循了以下原则:
- 单一职责原则 (SRP):将不同的功能严格划分到不同的类中。例如,
QuestionGenerator只负责生成题目,QuizManager只负责文件I/O,UserDatabase只负责用户数据管理。这种分离使得代码更易于理解、测试和维护。 - 面向对象设计:通过
UserType枚举来管理用户类型,避免了使用“魔法字符串”(如直接用 "小学" 字符串),增强了代码的健壮性。 - 可扩展性:项目的结构设计考虑了未来的功能扩展。例如,若要支持新的学科(如物理),只需在
UserType中添加新的枚举值,并在QuestionGenerator中实现新的题目生成逻辑,而无需大规模改动现有代码。