第四次结对编程作业

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

解题思路

思路描述
1.细分题目,划分成一个个小任务如下图所示

2.因为c++还没有学到文件操作,所以我就先看了教材,大致学了下文件基本操作,再在网上查了文件操作的教程。
3.此次代码涉及到了排序,我就翻了数据结构关于排序方面的知识,以及如何写代码。

设计过程

1.规划出大致方法

2.归纳整理函数,类及之间的关系
我们经过协商大致把每一个功能都设计成一个函数,这样比较整洁且比较有归纳性,在调试过程也比较容易找到错处。然后是划分类,我们把最基础的统计字符方面划分为一个类,再把关于单词的划分为一个类,最后把行数统计划分为一个类。函数与类之间最重要的是类中包含函数,因为我们在设计的时候把每一个需要实现的功能都设计成了一个函数,所以在类里面可以很容易想到把函数划分进去。

代码规范

由于这是我俩第一次用c++完成一个项目,所以我们参考了网上的c++代码规范知否,知否

代码复审

审查模块名
coutword_1

1.主要问题

1.发现同伴在设计过程出现了一个功能上的遗漏,在限制单词条件时,遗漏了“以数字开头"不是单词这一条件

2.第二个问题是我在统计单词数所用的循环结构中,由于逻辑表达不当造成了死循环。
修改前:

void word_count2::read_str()
{
    char ch;//收集每一个文件中字符
    string str_1;//记录每一个规定的字符
    long pos;//记录f_in的位置
    int fir = 0;//判断第一个字符是否为字母
    f_in.clear();
    f_in.seekg(0, ios::beg);

    while (!f_in.eof())
    {
                int read=0;
        f_in.get(ch);
        
                
    
                read++;
                int k;
                f_in.seekg(pos);
                //f_in.get(ch);
                
                for ( k = 1; k < 4; k++)
                    {
                        read++;
                        f_in.get(ch);
                        if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break;
                    }
                if (k == 4)
                {
                    f_in.get(ch);
                    while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9'))
                    {
                        f_in.get(ch);
                        read++;
                    }
                    pos = f_in.tellg();
                    f_in.seekg(pos - read);
                    getline(f_in, str_1, ch);
                    store_str(str_1);
                    f_in.seekg(pos);

                }
        

            }
        
    }
}

修改后:

void word_count2::read_str()
{
    char ch;//收集每一个文件中字符
    string str_1;//记录每一个规定的字符
    long pos;//记录f_in的位置
    int fir = 0;//判断第一个字符是否为字母
    f_in.clear();
    f_in.seekg(0, ios::beg);

    while (!f_in.eof())
    {
        f_in.get(ch);
        fir++;
        if (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch))
        {
            
            int read=1;//记录规定字符创的长度。
                        //-------------------------------------------------->增加代码
            if (fir == 1)
            {
                pos = f_in.tellg();
                
            }
            else
            {

                pos = f_in.tellg();
                f_in.seekg(pos-1);//得到上一个字符
                f_in.get(ch);
            }
            
            if (('0' <= ch && ch <= '9') || ch== '" ')
            {
                f_in.seekg(pos);
                f_in.get(ch);
                while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch) || ('0' <= ch && ch <= '9'))
                {
                    f_in.get(ch);
                }
            }//-------------------------------------------------------------------------------------------------------------------
            else
            {
                read++;
                int k;
                f_in.seekg(pos);
                //f_in.get(ch);
                
                for ( k = 1; k < 4; k++)
                    {
                        read++;
                        f_in.get(ch);
                        if ( ch<'A' || (ch > 'Z'&& ch < 'a') || ch>'z' ) break;
                    }
                if (k == 4)
                {
                    f_in.get(ch);
                    while (('a' <= ch && 'z' >= ch) || ('A' <= ch && 'Z' >= ch)|| ( '0' <= ch && ch <= '9'))
                    {
                        f_in.get(ch);
                        read++;
                    }
                    pos = f_in.tellg();
                    f_in.seekg(pos - read);
                    getline(f_in, str_1, ch);
                    store_str(str_1);
                    f_in.seekg(pos);

                }
        }

            }
        
    }
}

2.复审感悟

在写代码时,对于重要部分我们一定要注释,不然会对代码复审造成很大的影响。甚至要重新想代码的思路.

性能改进

性能改进时间花费
大致是120分钟
改进思路

性能分析图

单元测试

结队照片

猜你喜欢

转载自www.cnblogs.com/crystalalamama/p/11631804.html
今日推荐