结对作业

四则运算

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering/homework/12147
这个作业目标 实现一个自动生成小学四则运算题目的命令行程序
成员1 车志鹏
成员2 路人甲

正文

GitHub链接

https://github.com/Czpab/Czp

完成前PSP表格

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

实现功能

  1. 使用 -n 参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目。

  2. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如Myapp.exe -r 10,将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

  3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1− e2的子表达式,那么e1≥ e2。

  4. 生成的题目中如果存在形如e1÷ e2的子表达式,那么其结果应是真分数。

  5. 每道题目中出现的运算符个数不超过3个。

  6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达 式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
    生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:

    1. 四则运算题目1
    2. 四则运算题目2
      ……
      其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。
  7. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

    1.答案1
    2.答案2
    .....
    特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。

  8. 程序应能支持一万道题目的生成。

  9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,输入参数如下:
    Myapp.exe -e .txt -a .txt
    统计结果输出到文件Grade.txt,格式如下:
    Correct: 5 (1, 3, 5, 7, 9)

    Wrong: 5 (2, 4, 6, 8, 10)
    其中“:”后面的数字5表示对/错的题目的数量,括号内的是对/错题目的编号。为简单起见,假
    设输入的题目都是按照顺序编号的符合规范的题目。

项目设计原理

  • 生成操作数:把整数看成是分母为1的分数,从而设计一个分数类,用于对分数的定义,存放,计算以及输出。
  • 生成和计算表达式:设计用于生成操作数以及运算符的方法,随机生成几个操作数和运算符,并将它们按规则组成表达式,因为生成的表达式是中缀表达式,需将它们转换成后缀表达式,然后再进行计算,还要查重表达式生成。
  • 生成题目以及答案的文档:设计生成类用于生成存放练习题以及答案的文档。
  • 批改答案:设计批改程序用于批改提交的答案,并统计正确与错误的题目数量和题号。

程序的类

  • FC类:分数的定义,存放,计算以及输出。
  • Exp类:生成表达式。
  • CL类:将中缀表达式转换成后缀表达式然后计算,以及对表达式的生成进行查重。
  • Create类:生成题目和答案文档。
  • Checkanswer类:批改答案,并统计正确与错误的题目数以及题号。
  • Main类:对输入命令进行处理并调用相应的方法。

关键流程图

关键代码

  • 四则运算设计代码

  • 设计Fraction_create方法以及operator_create方法随机生成分数以及运算符

    1. Fraction_create方法
    2. operator_create方法
  • 将中缀表达式转换成后缀表达式

  • 对后缀表达式进行计算

  • 根据需求,对表达式生成进行查重,查重算法如下

  • 在当前目录下生成练习题和答案,并将练习题和答案各自存放于“Exercises.txt”以及“Answers.txt” 文档中

  • 对提交的作业进行批改,并将结果存入“Grade.txt”中

性能测试

  • 各项总概
  • CPU负载
  • 各方法对象调用实时内存

    注:从性能分析图来看,程序各项指标均正常,性能测试结果较好,符合预期。

测试运行

编写十个测试用例

  1. 测试批改函数
  2. 测试题目与答案的生成
  3. 测试随机生成数的fraction_create方法
  4. 测试随机生成运算符的operator_create方法
  5. 测试随机生成表达式的getexp函数
  6. 测试getValue函数
  7. 测试判断是否是数字的isfra函数
  8. 测试 BufferedReader方法
  9. 测试对后缀表达式进行计算的calculate方法
  10. 测试查重表达式生成
  • 测试结果

    关于本程序的各项主要功能的各项测试均能通过。

运行结果


  • 题目:


  • 正确答案:


  • 作业:


  • 批改结果:

  • 生成一万道题目成功

异常及处理

  • 当出现输入异常时,会报错,然后提醒重新输入

完成后PSP表格

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

项目小结

这次项目是我和一位朋友一起完成的,这个任务对我们来说都是一次比较有难度的挑战,在挑战困难的过程中我们学习到了很多以前没接触过的知识,虽然在完成项目的过程中,我们有过分歧,但都能认真听取对方意见,最后达成一致意见,互相取长补短,最终完成项目。

posted @ 2021-10-25 22:06  abc&觞  阅读(18)  评论(0编辑  收藏  举报