软件第四次作业

软工第四次作业

GIT地址 https://github.com/xzx63321/WordCount
结对伙伴 肖子轩
伙伴学号 201831061329
伙伴博客地址 https://www.cnblogs.com/xzx23361/

一、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.总结上自己还是从本次作业中学习到了很多,除了对软件的熟练度,对还没有学习的c++文件操作也有了一定的了解。

猜你喜欢

转载自www.cnblogs.com/a1290389465/p/11682005.html