结对项目

这个作业属于哪个课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 <和同伴探讨学习共同完成一个四则运算的项目>

结对人:
3119005331 凌龙
3119005327 梁力恒
Github项目地址

1.PSP表格

Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
计划 590 275
估计这个任务需要多少时间 1205 1330
开发 495 915
需求分析 (包括学习新技术) 180 120
生成设计文档 60 15
设计复审 (和同事审核设计文档) 30 10
代码规范 (为目前的开发制定合适的规范) 20 10
具体设计 300 120
具体编码 360 600
代码复审 15 15
测试(自我测试,修改代码,提交修改) 120 300
报告 60 120
测试报告 60 20
计算工作量 20 10
事后总结, 并提出过程改进计划 30 10
合计 1255 1350

2.效能分析

在函数使用图中可以看到byte数组,String类使用了较多此,使用时间较长。byte数组是因为在读取和写出文件的过程中使用其来进行读写;
而String类则是因为在判断一个新表达式是否与已产生的表达式重复的算法中使用String类型来存储数据,且使用了循环来实现。

3.设计实现过程

在出题模块中,通过读取命令行参数中的出题数目和数值范围,通过随机函数生成中缀表达式。在生成过程中判断是否出现负值以及出现假分数的情况,
然后将其和之前生成的式子进行比较判断是否存在重复的表达式。计算题目答案时,将生成的中缀表达式转换成逆波兰式进行运算,因为逆波兰式更符合
计算机的运算习惯。
在阅卷模式中,读取命令行参数中的文件名,然后根据文件名读取相应目录中的文件,以及在指定目录中输出阅卷结果。在阅卷中,把答案文件和
标准答案文件读取并拆分成字符串数组,一一进行对比并同时记录正确的和错误的题即可。

代码结构:

  1. Main类
  • main方法,识别命令行参数,判断调用出题模块还是阅卷模块。
  • 出题方法,对给定的题目数量和数值范围出题。
  • 阅卷方法,对给定的两个文件进行比对,计算阅卷结果。
  1. Product类
  • 主要方法为生成中缀表达式的方法,调用工具包中的随机函数实现。
  1. Calculate类(核心)
  • 有对字符判断成分的方法,以及基本加减乘除运算的方法。
  • 逆波兰式转换方法,将中缀表达式转换成便于计算的逆波兰式。
  • 计算逆波兰式方法,对逆波兰式计算出表达式的结果。
  1. Fraction类
  • 用于将计算结果从double类型转换成为分数类型。
  1. IO类
  • 通过输入输出流进行读取和写出文件。
  1. Judge类
  • 主要用于判断两个表达式是否为重复。
  1. MyExection类
  • 自定义一个异常,用于当输出题目数或者数值范围为空时报错。

4.代码说明

一些主要的代码展示:
main方法,判断命令行参数的类型用于选择相应的模块。

生成中缀表达式的方法,该过程中进行了负值和假分数的判断,采用了递归的方法对不合格的表达式进行重新生成。

将中缀表达式转换成逆波兰式的方法,使用了数组当做栈来临时存储表达式中的字符。

计算逆波兰式的方法,使用栈的结构来存储数字,最后会在栈顶产生最后的结果。

5.测试运行

生成10个题目,范围为10时,并进行阅卷的结果:

当阅卷结果为全对时:

当阅卷结果为全错时:

生成10000个题目:

6.项目小结

凌龙:在本次的结对项目中,学习到了很多在该实验中需要了解的算法,例如对逆波兰式的运用等。在编完完成进行测试的过程中,由于频繁地使用数组和集合,
因此遇到了很多的异常出现,例如角标越界,空指针,空栈等异常。过程中发现了很多代码不够严谨的情况,通过对一个一个异常的修补,更加完善了代码。对我
以后的编码起到了很好的帮助。在项目的完成过程中,一起对一个难点进行思考,最终得到解决的感觉鼓舞人心。
梁力恒:通过这次项目,我学会了很多。起初以为项目十分简单,上手才发现有很多需要研究的地方,比如算式的生成,括号的运算等等。重点在于算式的查重,需要投入大量时间来研究。完成项目后,感觉自己对结对项目更加熟悉了。

posted @ 2021-10-26 01:20  Lofreeop  阅读(33)  评论(0编辑  收藏  举报