实现一个自动生成小学四则运算题目的命令行程序

这个作业属于哪个课程 <班级的链接>
这个作业要求在哪里 <作业要求的链接>
这个作业的目标 <你理解的作业目标具体内容>

姓名:郭程朗
学号:3123004567
github地址:https://github.com/Ripplling/calculate/tree/master

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
- Estimate - 估计这个任务需要多少时间 三天 三天
Development 开发
- Analysis - 需求分析(包括学习新技术) 40 30
- Design Spec - 生成设计文档 20 20
- Design Review - 设计复审(和同事审核设计文档) 20 20
- Coding Standard - 代码规范(为目前的开发制定合适的规范) 10 10
- Design - 具体设计 40 40
- Coding - 具体编码 一天 一天
- Code Review - 代码复审 40 40
- Test - 测试(自我测试,修改代码,提交修改) 10 10
Reporting 报告
- Test Report - 测试报告 10 10
- Size Measurement - 计算工作量 10 10
- Postmortem & Process Improvement Plan - 事后总结,并提出过程改进计划 20 20

效能分析

1.改进时间投入

需求分析:30分钟-设计高效数据结构和算法
编码阶段:45分钟-实现性能优化策略
总计:75分钟

2.性能改进思路

1.重复检测:HashSet查找和规范字符串生成

优化后:缓存规范化结果

2.表达式检测:递归生成和验证的重复计算

优化后:约束引导生成

3.分数运算:频繁月份和GCD计算

优化后:延迟约分

3.性能消耗

性能分析 - 生成1000道题目 (range=10)
操作类型 | 耗时(ms) | 占比(%) | 调用次数
表达式生成和验证 | 1450 | 58% | ~5000次
重复检测 | 620 | 25% | ~1000次
分数运算 | 280 | 11% | ~15000次
文件IO操作 | 150 | 6% | 2次

函数调用耗时排名:

  1. calculateExpression() - 35% (递归计算)
  2. getNormalizedString() - 22% (规范化处理)
  3. generateExpressionTree() - 18% (表达式生成)
  4. Fraction.simplify() - 12% (分数约分)
  5. File.write() - 6% (文件写入)

4.消耗最大函数

calculateExpression()

设计实现过程

image

测试运行

image

项目小结

这是一个非常有结构的项目,每个类都充分发挥了不同的作业,因此设计的时候要提前想好很多东西。这对我来说是一次难得的经验

posted @ 2025-10-20 01:33  郭程朗  阅读(19)  评论(0)    收藏  举报