软工作业——结对编程

项目网址
结对伙伴地址-李天润

PSP表格

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

具体流程(我负责NumEssay和main函数)

实现过程

统计行数

int NumEssay::linenum() // 输出行数
{
	in.open(file_name, std::ios::in);
	int count = 0;
	if (in.is_open()) //检查文件是否打开
	{
		while (!in.eof())
		{
			if (in.good()) ///如果文件流对,就继续运行
			{
				getline(in, buffer);
				if (buffer != "")
					++count;
			}
			else
			{
				std::cout << "Error:读取的文件可能过大内存无法存储" << std::endl;
			}
		}
	}
	else
	{
		std::cout << "Open " << file_name << "failing!!!" << std::endl;
	}
	in.close();
	return count;
}

统计字符数

int NumEssay::charnum()
{
	in.open(file_name, std::ios::in);
	int count = 0;
	if (in.is_open())//检查文件是否打开
	{
		while (!in.eof())
		{
			if (in.good())//如果文件流对,就继续运行
			{
				getline(in, buffer);
				if (buffer != "")
				{
					count += buffer.size();
					if (!in.eof())
						count += 1; //加上换行符
				}
				else if (!in.eof())//buffer为空,但是为换行符, 
				{
					count += 1;
				}
			}
			else
			{
				std::cout << "Error:读取的文件有错误" << std::endl;
			}
		}
	}
	else
	{
		std::cout << "Open " << file_name << "failing!!!" << std::endl;
	}
	in.close();
	return count;
}

mian函数

main函数

#include"pch.h"
#include"NumEssay.h"
#include"myText.h"
#include
#include
#include
#include
#include

using namespace std;
int flag[4] = { 0 }, sum=0;
vector pd(4);

int CheckArgs()
{
if(sum <=0 || sum > 4) {
cout << "请输入正确的参数格式" << endl;
exit(-1);
}
if(!flag[0] || pd[0] != "input.txt")
{
cout << "请输入正确文件名" << endl;
exit(-1);
}
if(!flag[3])
{
cout << "请输入正确输出文件" << endl;
exit(-1);
}
}

int main(int argv, char *args[])
{
char str[][3] = { "-i", "-m", "-n", "-o" };
//参数操作
for (int i = 0; i < 4; i++)
{
for (int j = 1; j < argv; j++)
{
if (!strcmp(str[i], args[j]))
{
flag[i] += 1;
sum++;
try {
j++;
if (j >= argv)
throw -1;
pd[i] = args[j]; //后面下标越界或者是一个错误值
}
catch (int e)
{
cout << "输入的参数有误或者有为空的" << endl;
exit(e);
}
break;
}
}
}
//检查参数是否正确
CheckArgs();
NumEssay Essay;//功能类名
myText T;
int NChar=0, NLin=0;//存储字符数 行数
cout << "======================" << endl;
if (flag[0]) //-i 0 写的多一些 输入文件名, 打印基本信息
{
Essay.read(pd[0]);
NChar = Essay.charnum();
NLin = Essay.linenum();
Essay.print(NLin, NChar);
T.getfile(pd[0]);
T.frequency();
}
if (flag[1]) //-m 1
{
T.nWords(stoi(pd[1]));
}
if (flag[2]) //-n 2
{
T.frequency(stoi(pd[2]));
}
if (flag[3]) //-o 3 打印进文件中
{
Essay.print(pd[3], NLin, NChar);
T.writeToFile(pd[3]);
}
return 0;
}

感悟

这次结对伙伴虽然是第一次组队,但我们对对方能力都是肯定的,在结对过程中难免会遇到参数不符合要求的时候,但我们都能很快解决问题

除此之外,在编码的过程我再一次理解了 c++ 的文件操作,也从队友的代码中看到了不曾了解的操作,增加了知识,以后有空再把他们整理出来发表,主要是关于c++文件操作的换行符问题,也有一遍复习了相关工具与流程

posted @ 2019-10-14 20:31  Dedicate_labors  阅读(121)  评论(2编辑  收藏  举报
……