软工第四次作业

软工第四次作业

GIT地址 https://github.com/xzx63321/WordCount
结对伙伴 向天强
伙伴学号 201831061328
伙伴博客地址 https://www.cnblogs.com/a1290389465/

一、PSP表格

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

二、程序实现

1、解题思路

​ 项目要求:

​ 1.统计有效行数

​ 2.字符个数num(英文字母,换行符,空格,水平制表符均为字符,)

​ 3.统计单词个数(要求单词以四个英文字母开头),并把单词按字典序输出到文件中,输出频率最高的10个单词

​ 思路:首先在主程序中写入打开文件的程序,建立一个文件指针指向打开的文件,然后将指针传入编写字符统计函数,单词统计函数,行数统计函数,单词输出函数,文件写入函数来完成项目要求

2、实现过程

​ 主函数中编写键盘输入文件名的读入的文件,并调用各编写的函数:

int main()
{
	ifstream in;
	string filename;                   //声明变量 存储文件名 
	cout << "Please input filename to Open:" << endl;    //提示输入文件名 
	getline(cin, filename, '\n');                              //接收输入文件名 
	in.open(filename);
	if (!in)
	{
		cout << "error" << endl;
		exit(0);
	}
		wordnumber(in);
		linesnumber(in);
		wordsnumber(in);
		in.close();
	return  0;
}

​ 单词统计函数:

void wordsnumber(ifstream &ch)
{
	ch.clear();
	ch.seekg(0, ios::beg);
	char word[30] = {0},st;
	int i = 0,num=0,j=0,flag=0;
	while (!ch.eof())      /*统计文件中有多少个单词*/
	{
		ch.read(&st, 1);
			word[i] = st;
			i++;
			if(st==' '||st=='\t'||st=='\n')
			{
				if (word[i - 1] != ' ' || word[i - 1] != '\t' || word[i - 1] != '\n')
				{
					if (i >= 3)
					{
						for (j = 0; j < 4; j++)
						{
							if (word[j] > 'a'&&word[j]<'z' || word[j]>'A'&&word[j] < 'Z')

								flag++;
							if (flag >= 4)
							{
								num++;
								for (j = 0; j < i; j++)
									word[j] = 0;
								i = 0;
							}

						}
						for (j = 0; j < i; j++)
							word[j] = 0;
						i = 0;
					
					}

				}
				
			}
			
	}

行数统计函数:

void linesnumber(ifstream &ch)//行数统计
{
	ch.clear();
	ch.seekg(0, ios::beg);
	char d ;
	int num=1;
	while (!ch.eof())
	{
		ch.read(&d, 1);
		if (d == '\n')
			num++;
	}
	cout << "有效行数为:" << num << endl;
}

字符统计函数:

void  wordnumber(ifstream &ch) //字符统计
{
	
	string d;
	int num = 0;
	while (getline(ch, d)) //以行为单位读入文件
		if(d > "a"&&d<"z" || d>"A"&&d < "Z" || d>"0"&& d <"9"||d==" ")
		num += d.size(); //累计字符数

	cout << "字符数: "<< num << endl;

}

3、运行截图

三.代码复审

1.这一次编程中负责的程序中的文件部分,我的队友负责函数部分,在两人代码合成的过程中出现了很多错误(例如两人讨论不够充分导致函数类型不同而引起的合并问题)。

2.由于两人代码量不高,所以此项目中的很多部分两人合作都不能完成,这是代码出现很大漏洞。

四.总结分析

1.结对

​ 1.面对这个项目,我选择了室友作为队友,我负责函数部分,他负责文件部分,这让我第一次体会到结对编程的魅力。

​ 2.在过程中两个人的函数都出现了一些问题,但通过两人的商讨,很多问题都被解决。

2.总结

​ 1.本次结对编程发现自己在编写代码的过程中还是很吃力,尤其是在结对任务中,我完全是拖了队友的后腿。

​ 2.这次作业还是让我学到了很多东西,也让我认识到了自己的水平还是不行,以后要更加努力。

posted @ 2019-10-16 00:20  xzx63321  阅读(112)  评论(1编辑  收藏  举报