第四作业-结对编程

[Welcome to My Blog]

第四次作业结对编程

Github项目地址 Github地址
结对伙伴 黄天兵201831061126的博客

一.PSP表格

第四作业-结对编程_第1张图片

二. 计算模块接口的设计与实现过程

①代码结构:
程序由一个 wordsCount 类, main() 主函数和 Getop(string cmd) 获取命令参数函数构成。其中 wordCount 类成员中含 Char_num() 、 Lines_num() 等函数。思维导图如下:
第四作业-结对编程_第2张图片
②.关键函数实现:
int wordsCount::Char_num() :获取ascii数

获取输入文件路径后,通过对文件内容逐个读取,并只对ASCII码进行计数。

int wordsCount::Lines_num():获取文件行数

使用 getline() 函数获取文件的每一行对行数进行计数。

void wordsCount::GetWords()、int wordsCount::Words_num() 、void wordsCount::Sort_words_rate()

由于对单词时有额外的要求:单词计数,按照出现频率和字典排序,以小写输出。所以使用多个函数实现:
(1) void wordsCount::GetWords() :逐个读取文件字符,将所有符合要求的“单词”提取出来,转为小写形式后(使用 algorithm 头文件中的 transform() 函数 ),存放在一个 vector< string > 容器中。
(2) void wordsCount::Sort_words_rate():对于统计词频首先想到的是用 pair 记录词频,排序则使用algorithm头文件下的 sort() 函数。于是乎为了方便统计词频,先排序,使相同的单词在一块儿,再统计词频,统计好的词频存放在 vector> 中,再对其词频进行排序。(sort()函数中第三个参数提供了自定义排序标准)
__main(int argc, char *argv[])__ :主函数

main()函数主要接受用户从操作系统传入的参数,参数通过Getop()函数解析后执行不同的输出。

③.编程思想体现
Interface Design:

对于接口的设计,我们将wordCount这个类中所有属性和成员函数的定义与实现分开

Information Hiding:

信息隐藏,简单地说就是是否可见是否与可用。
不可见不可用:
我们将类的属性和成员定义放在wordCount.h的头文件中,实现部分放在wordCount.cpp中,使类中内容对外部而全然隐藏。
可见不可用:
通过使用private、protect对类中成员和属性进行修饰。包含头文件后,即使能看到这些属性,却无法使用它们
④效果展示
第四作业-结对编程_第3张图片
第四作业-结对编程_第4张图片
第四作业-结对编程_第5张图片
第四作业-结对编程_第6张图片

三.代码复审

①编码规范:
我们采用的是Google的C++编码规范
中文版
Google C++编码规范
②复审过程:
Vs2017具备强大的努力的复审功能,可以进行智能缩进,大大提高了规范性。vs2017是真的功能强大。

第四作业-结对编程_第7张图片

四. 性能分析

性能分析参考文献Part6

根据参考文献我们对代码稍微做改动,使它陷入循环,VS2017自带的“性能探查器"真的好用

第四作业-结对编程_第8张图片
性能分析报告:
第四作业-结对编程_第9张图片
第四作业-结对编程_第10张图片

五. 单元测试

单元测试参考文献Part3
①出现问题:在按照上面文献的步骤流程做完以后,发现测试还是没有通过
第四作业-结对编程_第11张图片

②解决问题:测试代码也肯定没有问题。经过不断的摸索,发现原来是测试用的文件应该放在这里头

第四作业-结对编程_第12张图片
③总结:测试中的待打开的文件不能与代码放在一起,需要放在与后缀为“.exe”相同的路径下。
④测试结果:由于水平有限,只测试了几个函数,并且经过长时间摸索还是解决了问题。通过了测试。
测试的几个函数:Char_num(),int Lines_num(),int Words_num();终于还是通过了测试

第四作业-结对编程_第13张图片

六.异常处理(参考队友)

1.抛出异常:
·文件打开失败:

·用户未输入参数、参数个数错误、参数不包含“-i”和“-o”:
第四作业-结对编程_第14张图片
第四作业-结对编程_第15张图片
·检查“-n”和“-m”后面的参数是否为数字:
在程序中使用了stoi()函数实现字符串转整型,若转换失败则会自动抛出异常。

2.捕获异常:
使用try-catch对异常进行捕获
第四作业-结对编程_第16张图片
3.测试结果:
①错误输入
第四作业-结对编程_第17张图片
②正确输入
第四作业-结对编程_第18张图片

七.结对的过程

①感受:
我和我室友黄天兵同学进行结对编程,两个人相互讨论的模式其实以前也有用到,不过这次的更加全面完善,我们确实感觉到了1+1>2的效果。队友的代码量大大高于我,能力也强。我更多的时间花在了代码的单元测试上。但是通过这次结对编程确实也感觉到了自己和大佬的差距,也复习了以前没搞清楚的有关字符的知识点。伙伴的坚持精神也深深感染了我。还是那句老话“革命还未成功,同志还需努力。最后感谢”
②照片:
第四作业-结对编程_第19张图片

你可能感兴趣的:(第四作业-结对编程)