结对项目
作业信息
课程信息
- 这个作业属于哪个课程:计科22级12班
- 作业要求链接:作业要求
- 代码链接 :https://github.com/Rawven/Software-Work2
作业目标
完成结对项目,合作实现自动生成小学四则运算题目的功能,了解软件开发流程。
学生信息
姓名 | 学号 | GitHub 地址 |
---|---|---|
刘家辉 | 3122004443 | Rawven |
吴硕 | 3122004452 | qicizaijian |
一. PSP表格
PSP2.1 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
Planning | 10 | 15 |
Estimate | 50 | 60 |
Development | 180 | 210 |
Analysis | 15 | 20 |
Design Spec | 40 | 40 |
Design Review | 30 | 30 |
Coding Standard | 10 | 10 |
Design | 25 | 20 |
Coding | 120 | 100 |
Code Review | 40 | 30 |
Test | 20 | 30 |
Reporting | 50 | 60 |
Test Report | 30 | 25 |
Size Measurement | 10 | 10 |
Postmortem & Process Improvement Plan | 30 | 30 |
合计 | 660 | 690 |
二. 效能分析
生成结果
性能概览
三. 具体设计
- ExerciseGenerator类:用于题目生成
设计思路
唯一性管理:使用 Set 来存储已生成的练习题,确保题目不重复,提升用户体验。
随机性:通过 Random 生成随机数和运算符,使得每次生成的题目都具有新颖性,增加练习的趣味性。
文件输出:设计文件写入功能以便于保存和分享生成的练习,符合用户的实际需求。
分离逻辑:将练习题生成和评估逻辑分开,便于未来的维护和扩展(例如可以更换评估方法而不影响题目生成)。 - ExpressionEvaluator类:用于运算式解析并计算答案
设计思路
单一职责原则:该类专注于表达式的解析和计算,符合单一职责原则,使得代码更易于维护和理解。
使用栈结构:栈能够有效处理运算符和操作数的优先级,有助于实现逆波兰表示法(RPN)计算,确保正确的运算顺序。
分离标记化与计算:通过 tokenize 方法将表达式分解为标记,使得计算逻辑清晰且易于调试。这种分离使得未来可能的扩展(例如支持更多操作符)变得简单。 - AnswerEvaluator类:用于题目与答案比较并产出报告
设计思路
集中评估:将答案评估逻辑集中在一个类中,便于管理和扩展(例如未来可以添加更多的评估标准)。
错误跟踪:采用列表存储正确和错误的题目索引,帮助用户快速识别需要改进的地方,提升学习效果。
文件管理:通过读取和写入文件,将评估结果持久化,便于随时查看和分析成绩。 - Starter类:启动类
- Util类:工具类
四. 测试运行
用例运行正常
五. 项目小结
第一次通过结对编程的方式与他人合作完成一个项目,大家一起提供各自的思路并进行思路验证,最后达成了一个折中的方案,也算是圆满完成。