软工第三次作业

这个属于那个课程 软件工程
这个作业要求在哪里 带三次作业

基本信息:

项目GitHub地址:https://github.com/pascal5233/Four-Arithmetic-Operations
realease:https://github.com/pascal5233/Four-Arithmetic-Operations/releases/tag/master
袁镇清:3123002353

1.PSP2.1表格:

PSP2.1 预估耗时(分钟) 实际耗时(分钟)
计划 15 20
估计这个任务需要多少时间 20 20
开发 60 60
需求分析 (包括学习新技术) 60 90
生成设计文档 20 30
设计复审 20 20
代码规范 (为目前的开发制定合适的规范) 30 45
具体设计 30 20
具体编码 75 75
代码复审 30 30
测试(自我测试,修改代码,提交修改) 30 30
报告 30 20
测试报告 20 20
计算工作量 5 5
事后总结, 并提出过程改进计划 15 15
合计 460 500

2.设计实现过程:

1. 整体架构设计

类关系图
image

2. 核心类设计

2.1 Fraction 类 - 分数处理

职责:表示和操作分数,支持真分数、带分数格式

关键方法:

  • normalize(): 分数规范化(约分、假分数转带分数)

  • 算术运算符重载:+, -, *, /

  • toString(): 格式化为字符串

  • value(): 转换为数值用于比较

设计特点:

  • 自动处理分数规范化,确保无假分数

  • 支持多种输入格式(整数、真分数、带分数)

  • 重载运算符便于表达式计算

2.2 ExpressionGenerator 类 - 表达式生成

职责:生成不重复的算术表达式

关键方法流程图:
image

表达式构建策略:

  • 左结合:((a op b) op c) op d

  • 右结合:a op (b op (c op d))

  • 混合结合:(a op b) op (c op d)

2.3 ExpressionCalculator 类 - 表达式计算

职责:计算算术表达式的值

关键方法流程图:
image

2.4 AnswerChecker 类 - 答案检查

职责:比较练习答案并统计结果

关键方法流程图:
image

3. 关键算法设计

3.1 表达式生成算法

伪代码:
    生成表达式(运算符数量):
    操作数数量 = 运算符数量 + 1
    操作数列表 = 生成操作数(操作数数量)  // 30%概率为分数
    运算符列表 = 生成运算符(运算符数量)
    选择表达式结构:
        左结合: ((a op b) op c) op d
        右结合: a op (b op (c op d))  
        混合结合: (a op b) op (c op d)
    计算表达式值
    规范化表达式用于去重

3.2 表达式求值算法

 伪代码:
 求值(表达式, 开始位置, 结束位置):
     if 是单个操作数:
         解析为Fraction返回
     
     if 被括号包围且括号匹配:
         去掉外层括号递归求值
     
     查找优先级最低的运算符位置
     左结果 = 求值(左子表达式)
     右结果 = 求值(右子表达式)
    
     return 左结果 op 右结果

3.3 去重机制

规范化表示:去除空格,统一格式

哈希集合:使用unordered_set存储规范化表达式

唯一性检查:确保数学等价的表达式不被重复生成

4. 文件处理设计

输入文件格式:
text
1. (3 + 4) * 2
2. 1/2 + 1/3
3. 2'1/2 * 3
输出文件格式:
Exercises.txt: 生成的题目
Answers.txt: 对应的答案
Grade.txt: 批改结果

text
Correct: 3 (1, 3, 5)
Wrong: 2 (2, 4)

5. 错误处理设计

  • 边界检查:防止vector越界访问

  • 异常捕获:try-catch处理计算异常

  • 输入验证:检查命令行参数合法性

  • 文件操作:检查文件打开状态

6. 设计模式应用

6.1 单一职责原则

  • Fraction: 只负责分数表示和运算

  • ExpressionGenerator: 只负责表达式生成

  • ExpressionCalculator: 只负责表达式计算

  • AnswerChecker: 只负责答案比较

6.2 静态方法模式

ExpressionCalculator和AnswerChecker使用静态方法,无需实例化

6.3 策略模式

表达式构建支持多种结合性策略(左结合、右结合、混合结合)

7. 性能考虑

  • 避免重复计算:生成时即计算值,避免重复解析

  • 限制尝试次数:防止无限循环

  • 内存管理:使用智能指针避免内存泄漏

  • 文件流优化:批量写入而非单行写入

这个设计实现了完整的四则运算题目生成和批改系统,具有良好的模块化、可扩展性和健壮性。

3测试样例

生成功能测试命令行参数:
Four Arithmetic Operations.exe -n 10 -r 10
测试结果:
image
生成功能极限情况测试:
Four Arithmetic Operations.exe -n 10000 -r 1000
测试结果:
image
批改功能测试:
Four Arithmetic Operations.exe -e Exercises -a Answers
测试文件:
Exercises.txt:
image
Answers.txt:
image

测试结果:
image
测试结果文件
image

posted @ 2025-10-21 16:41  pascal5233  阅读(6)  评论(0)    收藏  举报