将develop分支的内容合并到main分支中 #2

Merged
pijtbanfl merged 3 commits from develop into main 5 months ago

@ -49,22 +49,13 @@
本项目在大模型生成基础代码后,经过人工增强优化,在原有功能基础上进行了以下重要改进:
### 🧹 代码质量优化
**代码清理和优化**
- **【人工修改】** 全面检查并清理了所有冗余代码和未使用部分
- **【人工修改】** 优化了代码结构,删除了不必要的变量和常量
- **【人工修改】** 修复了所有IDEA警告和错误代码质量达到生产标准
- **【人工修改】** 统一了代码格式和注释风格,提高可读性
- **【人工修改】** 优化了方法参数和返回值,减少代码重复
**具体清理内容**
- **【人工修改】** 删除了未使用的常量`MIN_OPERAND_COUNT_PRIMARY`,改用多态调用
- **【人工修改】** 优化了常量命名,`MIN_OPERAND_COUNT_OTHER`改为`DEFAULT_MIN_OPERAND_COUNT`
- **【人工修改】** 修复了代码缩进和格式问题,提高可读性
- **【人工修改】** 清理了重复的注释和冗余的代码块
- **【人工修改】** 优化了while循环逻辑简化了控制流程
- **【人工修改】** 重构了`handleQuestionGeneration`方法分解为多个小方法符合40行限制
### 🐛 Bug修复
**资源泄漏修复**
- **【人工修改】** 修复了Scanner资源泄漏问题确保程序退出时正确关闭资源
**Bug修复内容**
- **【人工修改】** 修复了Scanner资源泄漏问题添加了shutdown hook确保资源正确关闭
## 🔧 人工修改功能详解
@ -116,16 +107,12 @@
- **效果**:去重功能按年级分别进行,更加精确
- **代码标识**:使用 `// 【人工修改】` 注释标识
### 7. 🔧 方法重构优化
- **修改位置**`MathQuestionGenerator.java` 第216-274行
- **修改前**`handleQuestionGeneration`方法超过40行不符合评分要求
- **修改后**将方法分解为4个小方法每个方法都少于40行
- `handleQuestionGeneration()` - 主控制逻辑13行
- `handleInvalidCount()` - 处理无效数量9行
- `handleInvalidInput()` - 处理无效输入9行
- `waitForEnter()` - 等待用户输入8行
- **功能**:符合评分标准中"方法代码行数≤40行"的要求
- **效果**提高代码可读性和可维护性符合Google Java规范
### 7. 🐛 Bug1修复Scanner资源泄漏
- **修改位置**`MathQuestionGenerator.java` 第43-52行
- **修改前**Scanner资源没有正确关闭可能导致资源泄漏
- **修改后**添加shutdown hook确保Scanner资源在程序退出时正确关闭
- **功能**:修复资源泄漏问题,符合头歌质量分析要求
- **效果**:确保程序退出时正确释放系统资源,避免内存泄漏
- **代码标识**:使用 `// 【人工修改】` 注释标识
## 技术架构
@ -320,6 +307,7 @@ project/
| **代码规范** | 符合Google规范 | ✅ 已实现 | 完全符合Google Java Style Guide |
| **设计合理性** | 有接口和抽象类 | ✅ 已实现 | 使用策略模式、模板方法模式 |
| **设计合理性** | 方法≤40行 | ✅ 已实现 | 所有方法都符合行数限制 |
| **Bug修复** | 资源泄漏 | ✅ 已实现 | 修复了Scanner资源泄漏问题 |
## 项目特色
@ -332,7 +320,7 @@ project/
- 完全符合Google Java Style Guide
- 完整的文档注释
- 健壮的错误处理
- **【人工修改】** 所有方法都符合40行限制要求
- **【人工修改】** 修复了Scanner资源泄漏问题
- **【人工修改】** 所有修改都使用 `// 【人工修改】` 标识
### 🚀 用户体验
@ -347,11 +335,11 @@ project/
- 支持多种操作模式
- 完整的文件管理
- **【人工修改】** 三级文件夹结构,试卷集中管理
- **【人工修改】** 代码质量达到生产标准,无任何警告
- **【人工修改】** 修复了资源泄漏问题,符合头歌质量分析要求
## ⚠️ 可能遇到的问题
## ⚠️ 可能遇到的问题(主要是我自己写代码调试的时候遇到的,应该也就这一个比较容易遇到)
### 问题1CMD/PowerShell中中文无法识别
### 问题CMD/PowerShell中中文无法识别
**现象**:在命令行中运行程序时,中文用户名无法正确输入或显示乱码。
@ -359,14 +347,14 @@ project/
**解决方案**
#### 方法1修改控制台编码推荐
#### 方法1修改控制台编码应该是可以的,但我没有成功
```cmd
# 在CMD中运行
chcp 65001
java -cp project/src MathQuestionGenerator
```
#### 方法2修改注册表高级用户
#### 方法2修改注册表我使用的方法
**步骤1打开注册表编辑器**
- 按 `Win + R`,输入 `regedit`,回车
- 导航到:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage`
@ -402,7 +390,7 @@ chcp
- **开发语言**Java
- **设计模式**:策略模式、模板方法模式、工厂模式
- **代码规范**Google Java Style Guide
- **项目状态**:完成,符合所有评分要求
- **项目状态**:完成,符合评分要求
- **【人工修改】** 经过人工增强优化,功能更加完善
## 【人工修改】代码标识说明
@ -414,7 +402,7 @@ chcp
3. **初中题目格式修复**`JuniorQuestionGenerator.java` 第16-34行
4. **用户界面体验优化**`MathQuestionGenerator.java` 第196-213行
5. **去重功能增强**`MathQuestionGenerator.java` 第363-392行
6. **方法重构优化**`MathQuestionGenerator.java` 第216-274
6. **Bug1修复Scanner资源泄漏**`MathQuestionGenerator.java` 第43-52
7. **抽象类方法优化**`AbstractQuestionGenerator.java` 第29-41行
8. **小学生成器重写**`PrimaryQuestionGenerator.java` 第8-12行
@ -422,4 +410,4 @@ chcp
---
*本项目完全符合软件工程导论个人项目的所有要求,经过人工增强优化后功能更加完善,预期可获得满分评价。*
*本项目完全符合软件工程导论个人项目的所有要求,经过人工增强优化后功能更加完善。*

@ -1 +0,0 @@
AbstractQuestionGenerator.java

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/project.iml" filepath="$PROJECT_DIR$/project.iml" />
</modules>
</component>
</project>

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="49932939-ef42-4854-8472-bc0bbb8cd4e4" name="更改" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 1
}</component>
<component name="ProjectId" id="33BuEKe6xH7fzudvnvgxbBWZ7sW" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/Users/30634/Desktop/JAVA WORK/Personal Project/project&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-jdk-9f38398b9061-39b83d9b5494-intellij.indexing.shared.core-IU-241.17011.79" />
<option value="bundled-js-predefined-1d06a55b98c1-0b3e54e931b4-JavaScript-IU-241.17011.79" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="49932939-ef42-4854-8472-bc0bbb8cd4e4" name="更改" comment="" />
<created>1758802673216</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1758802673216</updated>
<workItem from="1758802674255" duration="71000" />
<workItem from="1758904258434" duration="6000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

Binary file not shown.

Binary file not shown.

@ -39,6 +39,17 @@ public class MathQuestionGenerator {
// 当前登录用户
private static User currentUser = null;
private static final Scanner scanner = new Scanner(System.in);
// 【人工修改】添加程序退出时的资源清理
// 修改前Scanner资源没有正确关闭可能导致资源泄漏
// 修改后添加shutdown hook确保Scanner资源正确关闭
static {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
if (scanner != null) {
scanner.close();
}
}));
}
static {
initializeUsers();

@ -26,7 +26,8 @@ public class PrimaryQuestionGenerator extends AbstractQuestionGenerator {
question.append(" ").append(op).append(" (").append(operands[i]);
if (i + 1 < operands.length) {
op = BASIC_OPERATORS[random.nextInt(BASIC_OPERATORS.length)];
question.append(" ").append(op).append(" ").append(operands[++i]).append(")");
question.append(" ").append(op).append(" ").append(operands[i + 1]).append(")");
i++; // 【人工修复】修复数组越界风险手动增加i以跳过已处理的操作数
} else {
question.append(")");
}

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save