【结对编程】四则运算生成程序
|作业所属课程|https://edu.cnblogs.com/campus/gdgy/Networkengineering1834|
|---|---|---|
|作业要求|https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11148|
|作业目标|实现一个自动生成小学四则运算题目的命令行程序|
结对项目成员
谭嘉明 3118005290
林振中 3118005283
一、github仓库
https://github.com/Jammillk/arithmeticProject/tree/master
二、PSP表格
(未修改)
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 25 |
| Estimate | 估计这个任务需要多少时间 | 5 | 10 |
| Development | 开发 | 450 | 615 |
| Analysis | 需求分析 (包括学习新技术) | 40 | 60 |
| Design Spec | 生成设计文档 | 10 | 20 |
| Design Review | 设计复审 | 10 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| Design | 具体设计 | 40 | 45 |
| Coding | 具体编码 | 300 | 400 |
| Code Review | 代码复审 | 20 | 20 |
| Test | 测试(自我测试,修改代码,提交修改) | 20 | 40 |
| Reporting | 报告 | 60 | 70 |
| Test Repor | 测试报告 | 20 | 20 |
| Size Measurement | 计算工作量 | 5 | 8 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 30 |
| 合计 | 590 | 778 |
三、设计思路
可以把程序的实现简单地分为几个部分:生成表达式、计算表达式、输出结果
对于生成表达式,因为题目要求符号数最多不超过三个,可以随机生成加减乘除运算符,然后再在合适的位置插入数字和括号。
对于计算表达式,其实如何计算这是一个算法问题,github上有很多可靠的开源代码,可以以此为参考。
本程序中,使用逆波兰表达式(RPN:Reverse Polish notation)可以解决计算表达式的问题,同时还增添一个分数Fraction类,用于处理分数的计算。
其实计算式子的算法在学习栈的时候就可以尝试做做,比如在leecode里面也有类似的计算算法,但是对于除法的运算,它是截断多余部分只保留整数,与题目保留分数相违背。因此这部分的难点之一在于如何解决分数的计算。
最后输出结果的部分只是文件的操作,比较简单,熟悉IO流的操作即可。
四、类关系图
各个类
由于程序规模不大,功能划分明确,所以没有进行分包操作。
下面介绍一下各类的功能:
Main:运行程序的入口。
CreateFormula:生成四则运算的式子。
Calculation:计算四则运算的式子,得到结果。
CheckAnswers:检测用户给的答案与习题的答案是否一致,并给出正确/错误的题目序号。
FileUtil:文件操作的工具类,用于将结果输出,写出到文件中。

各类间关系

五、能效分析


六、运行结果
生成一万条四则运算的式子,并且范围在0~100之间

结果:确实生成了习题(Exercises.txt)和答案文件(Answers.txt)。

查看内容,发现没问题

重新生成一份100道题的习题和答案,并复制一份答案文件Answers1.txt,并修改里面第10、20、30题的答案,模拟用户作答,查看是否正确地检测出正误。

成功检测出第10、20、30题有错误,并正确标注。
七、收获与感想
这次项目让我们体会到结对编程的优点,可以两个人一起编程,提升思路的清晰度,并且这样做还能减少bug的产生,使得编程的效率提高。
从这个项目来说,生成四则运算的式子还是有点挑战的,从算法上,这需要对栈的运用特别熟悉,因为这个四则运算要对分数进行处理,最后的运算结果也要是保留分数的形式,而不是截断多余部分。
浙公网安备 33010602011771号