【结对编程】四则运算生成程序

|作业所属课程|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的产生,使得编程的效率提高。
从这个项目来说,生成四则运算的式子还是有点挑战的,从算法上,这需要对栈的运用特别熟悉,因为这个四则运算要对分数进行处理,最后的运算结果也要是保留分数的形式,而不是截断多余部分。

posted @ 2020-10-12 08:53  ゛魚生  阅读(186)  评论(0)    收藏  举报