项目网址
结对伙伴地址
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++文件操作的换行符问题,也有一遍复习了相关工具与流程