zoukankan      html  css  js  c++  java
  • 软工第四次作业

    第四次作业-结对编程

    1.结对伙伴与仓库地址

    git仓库地址 https://github.com/Tracerlyh/WordCount.git
    结对伙伴 学号 201831061215
    好友博客地址 https://blog.csdn.net/qq_39277137/article/details/102518153

    2.psp表格开发时间

    在这里插入图片描述

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

    在这里插入图片描述
    开始我使用的是file来写文件(c风格的类型),但伙伴使用的是fstream,因此经过商讨和对接。最终改为了c++风格的文件类型,通过定义两个结构体来构建最基本的类型。定义1个转化函数来转化大小写,1个函数用来判断是否为单词,剩下5个函数分别实现4个基本功能和一个附加功能。我所负责的是统计字符数以及单词数。
    功能1的代码:
    在这里插入图片描述
    功能2的代码:
    在这里插入图片描述

    4.代码复审

    在复审过程中,我们发现了如下问题和要改进的细节
    1、在使用文件之后要关闭文件。
    在这里插入图片描述
    2、主要的功能函数的参数中要有一个参数为文件类型。
    在这里插入图片描述
    3、在函数中打开和关闭文件。
    在这里插入图片描述
    4、在声明函数时在函数声明后面添加注释说明函数的功能。
    在这里插入图片描述
    5、在主函数中调用写的功能函数时添加注释说明函数得功能。
    在这里插入图片描述
    6、主函数中只进行与用户交互的提示信息的输出到屏幕。
    在这里插入图片描述
    7、各个功能的运行结果的输出都在相应的函数中输出到屏幕。
    在这里插入图片描述

    5.计算机接口部分性能改进

    写完程序后我们使用了vs2017自带的性能分析器来进行效率分析
    在这里插入图片描述
    发现除了主函数外,统计字符频次的函数耗时最多,因此做了如下的修改:

    void GetNumCUM(fstream &fp,Wordlist &W,string objectf)//反映文件中单词出现的频率,并将出现频率前10的单词输出到屏幕
    {
    	fp.open(objectf, ios::in);
    	string word;
    	int i = 0;
    	W.wordlist = new Word[2000];
    	W.NumofWord = 0;
    	W.SumofWord = 0;
    	W.Max = 100;
    	while (!fp.eof())
    	{
    		if (W.NumofWord >= W.Max)//内存空间已满0
    		{
    			/*Word *tf=new Word[Maxsize+20];
    			Wordlistcopy(tf,W.wordlist,Maxsize);
    			W.wordlist = NULL;
    			W.wordlist = new Word[Maxsize + 20];
    			Wordlistcopy(W.wordlist,tf,Maxsize);
    			tf = NULL;
    			W.Max += 20;*/
    			cout << "存储空间已满"<<endl;
    		}
    		fp >> word;
    		/*if (!fp)
    		break;*/
    		if (Judgeword(word))//判断是否是一个单词
    		{
    			Togglecase(word);
    			if (CFDuplicates(word, W) != -1)//如果有重复
    			{
    				W.wordlist[CFDuplicates(word, W)].Soo++;//对应的单词的频率加1
    				W.SumofWord++;
    			}
    			else
    			{
    				W.wordlist[i].Soo = 0;
    				if ((word[word.length() - 1] >= '!'&&word[word.length() - 1] <= '/') || (word[word.length() - 1] >= ':'&&word[word.length() - 1] <= '@') || (word[word.length() - 1] >= '['&&word[word.length() - 1] <= 96) || (word[word.length() - 1] >= 123 && word[word.length() - 1] <= 126))
    				{
    					W.wordlist[i].spelling = word.substr(0, word.length() - 1);
    					W.wordlist[i].Soo++;
    					W.NumofWord++;
    					W.SumofWord++;
    					i++;
    				}
    				else
    				{
    					W.wordlist[i].spelling = word;
    					W.wordlist[i].Soo++;
    					W.NumofWord++;
    					W.SumofWord++;
    					i++;
    				}
    			}
    		}
    	}
    	int j = 0;
    	int k = 0;
    	for (i = 0; i < W.NumofWord; ++i)//将前十排出来
    	{
    		for (j = 0; j < W.NumofWord; ++j)
    		{
    			if (W.wordlist[j].Soo < W.wordlist[j + 1].Soo)
    			{
    				word = W.wordlist[j].spelling;
    				k = W.wordlist[j].Soo;
    				W.wordlist[j].spelling = W.wordlist[j + 1].spelling;
    				W.wordlist[j].Soo = W.wordlist[j + 1].Soo;
    				W.wordlist[j + 1].spelling=word;
    				W.wordlist[j + 1].Soo=k;
    			}
    			if (W.wordlist[j].Soo == W.wordlist[j + 1].Soo&&W.wordlist[j].spelling > W.wordlist[j + 1].spelling)
    			{
    				word = W.wordlist[j].spelling;
    				k = W.wordlist[j].Soo;
    				W.wordlist[j].spelling = W.wordlist[j + 1].spelling;
    				W.wordlist[j].Soo = W.wordlist[j + 1].Soo;
    				W.wordlist[j + 1].spelling = word;
    				W.wordlist[j + 1].Soo = k;
    			}
    		}
    	}
    	cout << "词汇数量(不计重复单词):" << W.NumofWord<<endl;
    	cout << "词汇数量(计重复单词):" << W.SumofWord << endl;
    	i = 1;
    	cout << "频次前十的单词:" << endl;
    	while (i<=10)
    	{
    		if (i > W.NumofWord)
    		{
    			break;
    		}
    		else
    		{
    			cout <<i <<"、 "<<W.wordlist[i - 1].spelling <<" 出现频次:"<<W.wordlist[i-1].Soo<< endl;
    		}
    		i++;
    	}
    	fp.close();
    }
    

    利用结构体就可以有效的降低代码的重复率,增加程序的效率。

    6.单元测试

    我所负责的功能1测试:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我负责的功能2测试:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    7.计算模块处理异常

    在编写程序时,曾经遇到内存不够的情况,并且在多次尝试之后并无结果。后来与同伴商讨后得出了结论,并且加入了测试单元,详情请见伙伴的博客关于异常的处理。

    8.描述结对的过程

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/lqk0216/p/11681993.html
Copyright © 2011-2022 走看看