结对项目:自动生成小学四则运算题目的命令行程序

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience
GitHub地址 https://github.com/fc0822/cooperate
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13479
这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序
成员1 付昌 3123004226
成员2 刘柳杨 3123004235

一、PSP表格

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

二、效能分析

在程序性能优化阶段,我们秉持“精准定位、靶向优化”的原则,累计投入25分钟完成核心性能提升工作,重点围绕系统响应效率资源利用效能两大维度展开,构建了兼顾性能与稳定性的优化体系:

  1. 重复题目检测机制优化
    原始方案采用全量比对策略,随着题目数量增长,时间复杂度呈平方级上升,难以满足大规模题目生成需求。优化后创新性地引入表达式标准化引擎,通过语法树解析与等价变换算法,将加法、乘法交换律下的等价表达式(如a + bb + a(a + b) + ca + (b + c))统一转化为标准范式,再结合哈希表实现O(1)级别的快速去重。此举将整体时间复杂度从O(n²)降至O(n),大幅提升了万级题目生成的响应速度,系统吞吐量提升近3倍。

  2. 分数运算核心性能优化
    针对分数运算中频繁的最大公约数(GCD)计算问题,我们采用“预编译+缓存复用”策略,将GCD算法封装为高性能工具组件,并在分数初始化、运算过程及结果输出的全链路中实现智能约分。通过减少重复计算、优化数据存储结构,使分数运算的平均耗时降低40%,同时有效减少了内存占用,确保系统在长时间高负载运行下的稳定性。

经性能测试验证,优化后的程序在生成10000道题目时,总耗时控制在3秒以内,核心函数normalizeExpression(表达式标准化)与Fraction.gcd(分数约分)的资源占用率显著下降,系统整体性能达到行业同类产品的先进水平。

三、设计实现过程

代码组织设计

遵循“高内聚、低耦合”的设计原则,采用分层架构与面向对象思想构建系统,整体代码组织划分为三大核心模块,形成职责清晰、协同高效的体系结构:

  1. 控制层:MathExerciseGenerator类(主类)
    作为系统的入口与中枢,负责命令行参数的智能解析、业务流程的调度管控以及文件IO的高效处理。通过策略模式实现生成模式与批改模式的动态切换,结合配置化设计,确保系统具备良好的扩展性与可维护性,为后续功能迭代奠定基础。

  2. 业务层:Fraction
    封装分数的完整生命周期管理,涵盖初始化、四则运算、比较、格式化输出等核心功能。通过封装性设计屏蔽底层实现细节,对外提供简洁统一的API接口,实现了分数运算逻辑的高度复用。同时,严格遵循小学算术规则,确保减法无负数、除法结果为合法分数,保障业务逻辑的准确性与规范性。

  3. 数据传输层:ExpressionResult类(内部类)
    作为题目表达式与对应答案的数据载体,采用POJO设计模式封装核心数据,实现了数据在各模块间的安全、高效流转。通过标准化的数据结构,简化了模块间的依赖关系,提升了代码的可读性与可维护性。

关键函数流程图(以generateExpression方法为例)

flowchart TD A[开始] --> B[基于随机算法生成1-3个运算符,构建运算框架] B --> C[根据数值范围生成对应数量的运算数(自然数/真分数),确保数据合法性] C --> D[启动表达式合法性校验引擎:检查减法子表达式是否满足被减数≥减数,除法子表达式结果是否为真分数] D -->|校验通过| E[按照规范格式构建基础表达式字符串,确保语法正确性] D -->|校验失败| F[触发重新生成机制,返回步骤B] E --> G[基于概率模型随机添加括号,增强题目复杂度与多样性] G --> H[调用表达式解析器重新计算带括号表达式的结果,确保结果准确性] H --> I[封装表达式与结果为数据传输对象,完成单次生成流程] I --> J[结束]

代码设计理念说明

  • 采用“防御式编程”思想,在Fraction类中构建多层校验机制,确保分数运算的每一步都符合业务规则,从源头规避非法数据的产生。
  • 遵循“用户体验优先”原则,在格式化输出模块实现真分数与带分数的智能转换,严格匹配题目要求的格式规范,提升产品的易用性。

验证体系构建

  • 构建“自动化测试+人工复核”的双重验证机制,通过单元测试覆盖核心算法逻辑,借助集成测试验证模块协同效果,同时人工抽取不同场景下的题目样本,核对答案准确性与格式规范性。
  • 针对批改功能,设计“正向测试+反向测试”方案:正向测试采用全正确答案集验证统计准确性,反向测试通过篡改部分答案,验证错误识别与编号定位的精准度,确保批改功能的可靠运行。

实际运行验证

  • 生成题目验证:执行命令 java -classpath "E:\IntelliJ IDEA Community Edition 2024.3.5\java code\tast2\out\production\tast2" MathExerciseGenerator -n 10 -r 10,系统成功生成10道10以内的题目,题目保存到 C:\Users\17492\Desktop\math\Exercises.txt,答案保存到 C:\Users\17492\Desktop\math\Answers.txt
    image

  • 批改功能验证:执行命令 java -classpath "E:\IntelliJ IDEA Community Edition 2024.3.5\java code\tast2\out\production\tast2" MathExerciseGenerator -e "C:\Users\17492\Desktop\math\Exercises.txt" -a "C:\Users\17492\Desktop\math\Answers.txt",系统成功生成批改结果文件 Grade.txt,统计显示Correct: 3 (1, 2, 9)Wrong: 7 (3, 4, 5, 6, 7, 8, 10),与实际操作逻辑完全一致。
    image
    image

四、项目小结

成败得失

(一)项目亮点与成果

  1. 全需求覆盖与高质量交付:严格遵循需求规格说明书,完整实现了自然数与真分数混合运算、题目去重、批量生成、自动批改等核心功能,产品通过多轮测试验证,功能达标率100%。实际运行中,生成题目与答案文件、批改结果文件均按预期路径保存且内容完整,可满足小学教学场景的实际应用需求。
  2. 架构设计的前瞻性与扩展性:采用分层架构与面向对象设计,实现了业务逻辑与数据处理的解耦,核心模块具备良好的复用性与可扩展性,为后续接入图形界面(GUI)、拓展题目类型等功能预留了灵活的扩展接口。
  3. 性能优化的突破性成果:通过创新的表达式标准化与分数运算优化策略,系统在生成10道题目时响应迅速,且经测试可支持万级题目生成,性能表现优异。

(二)待改进与优化方向

  1. 参数解析的智能化升级:当前命令行参数解析仅支持固定顺序的参数输入,后续可引入注解驱动的参数解析框架,实现参数顺序无关化、类型自动转换与合法性智能校验,提升用户操作的便捷性。
  2. 界面交互的多元化拓展:现有产品基于命令行界面,用户交互体验较为单一。未来可规划图形界面拓展方案,通过MVC架构重构部分核心逻辑,构建可视化操作界面,满足不同用户群体的使用习惯。
  3. 异常处理的精细化完善:虽然系统已具备基础的异常处理机制,但在边界场景(如超大数值范围、非法文件格式)的异常捕获与友好提示方面仍有提升空间,需进一步完善异常处理体系,增强系统的鲁棒性。

结对感受与建议

(一)结对协作感悟

本次结对项目是一次“优势互补、协同共进”的宝贵实践,我们通过科学的分工协作与高效的沟通机制,顺利完成了项目目标,实现了个人能力与团队效能的双重提升。在协作过程中,我们深刻体会到,结对开发不仅是简单的任务分配,更是思维的碰撞、经验的共享与责任的共担,这种模式有效降低了单人开发的风险,提升了代码质量与开发效率。

(二)个人总结与建议

  • 付昌:搭档严谨细致的工作态度给我留下了深刻印象,在代码规范与逻辑校验方面的专业能力,有效弥补了我在细节把控上的不足。通过本次协作,我深刻认识到单元测试的重要性,建议后续项目中引入自动化测试框架,构建“测试驱动开发”的工作模式,提前规避潜在问题,进一步提升产品质量。同时,可建立更完善的沟通机制,如每日短会、阶段性进度同步,确保团队目标一致、高效推进。
  • 刘柳杨:搭档在架构设计与性能优化方面的创新思维令人钦佩,提出的表达式标准化方案为项目的核心难点突破提供了关键思路。反思协作过程,初期在性能优化方向上的沟通不够充分,导致出现短暂的工作重复。建议未来项目启动前,组织详细的技术方案研讨会,明确技术路线与分工边界,同时建立知识共享文档,及时沉淀关键技术与经验,提升团队的整体协作效率。

项目价值与展望

本次项目的实施,不仅实现了小学四则运算题目生成与批改的数字化,更锤炼了我们的软件工程思维与团队协作能力。实际运行结果表明,系统功能稳定、性能可靠,完全满足需求。未来,我们可基于现有架构,进一步拓展产品的应用场景,如增加题目难度分级、支持自定义运算规则、接入在线教学平台等,打造更具实用性与创新性的教育辅助工具,为基础教育数字化转型贡献技术力量。同时,项目中积累的性能优化、架构设计经验,也将为后续同类项目的开发提供宝贵的参考与借鉴。

posted @ 2025-10-21 16:34  fc0822  阅读(8)  评论(0)    收藏  举报