软件工程基础第四次作业:结对编程

软件工程基础第四次作业:结对编程

课程 https://edu.cnblogs.com/campus/xnsy/Autumn2019SoftwareEngineeringFoundation
作业要求 https://www.cnblogs.com/harry240/p/11524113.html
GitHub地址 https://github.com/ITBuilting/mytestgit/tree/master
伙伴学号 201831061201
伙伴博客地址 https://www.cnblogs.com/mxrroy/

1.本课程Fork仓库的Github项目地址

https://github.com/ITBuilting/mytestgit

2.PSP表格

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

3.需求分析:

实现一个命令行程序,输入文件名以命令行参数传入。
则会统计input.txt中的以下几个指标
1.统计文件的字符数:
2.统计文件的单词总数,单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
3.统计文件的有效行数:任何包含非空白字符的行,都需要统计。
4.统计文件中各单词的出现次数,最终只输出频率最高的10个。频率相同的单词,优先输出字典序靠前的单词
5.按照字典序输出到文件txt:
输出的格式为
characters: number
words: number
lines: number
: number
: number
图示:
软件工程基础第四次作业:结对编程_第1张图片

4.实现计划

1.实现的准备工作

使用语言:因为学习c/c++较多,选择使用C++语言编写程序
使用工具:vs2017
制定编码规范:
1.代码缩进:通用vs2017的代码缩进格式
2.注释:使用C/C++标准的代码或者文档注释,且每条代码后加上注释说明
3.命名规范:采用”驼峰式“命名规则,自己命名内部使用的变量+my
4.判断语句的条件不能复杂超过三个
5.bool类型判断使用is+形式定义

2.具体设计

从需求分析得出需要使用文件读取,经过反复考证,使用最简单的开发方式——使用库函数。
图示:
软件工程基础第四次作业:结对编程_第2张图片

3.具体实现代码

#include "pch.h"

#include 
#include 
#include 
using namespace std;

bool isdigit(char ch)
{
    return (ch >= ' '&&ch <= '9');
}



int main(void)
{
    
    
        map words;  //转int类型
        ifstream fin("input.txt");//要统计的文件
        ofstream fout("output.txt");//结果存放在output中
         //------------
        string str;
        int wordCount = 0;
        string d;
        int charCount = 0;
        //------------

        if (!fin || !fout)
        {

            exit(1);
        }
        while (fin.good())
        {
            fin >> str;
            words[str]++;
        }
        fin.close();
        fin.open("input.txt");
        while (getline(fin, d)) //以行为单位读入文件
            charCount += d.size(); //累计字符数
        fin.close();

        for (map::iterator mit = words.begin(); mit != words.end(); ++mit)
        {
            if (!isdigit((mit->first)[0]))
            {
                fout << "<" << mit->first << ">" << ": " << mit->second << endl;
                ++wordCount;
            }
        }
        fout << "wordTotal: " << wordCount << endl;  // 文件输出单词个数
        fout << "charTotal: " << charCount << endl;   //文件输出字符个数
        fout.close();
    
    return 0;

}

运行截图1:
软件工程基础第四次作业:结对编程_第3张图片
运行截图2:
软件工程基础第四次作业:结对编程_第4张图片

运行截图3:
软件工程基础第四次作业:结对编程_第5张图片

4.测试

测试截图:
软件工程基础第四次作业:结对编程_第6张图片
回归测试截图:
软件工程基础第四次作业:结对编程_第7张图片

5.代码复审和性能改进

通过与伙伴的多次交流改进,对代码进行了复审。对读入字符代码实现部分进行了改进:统一使用系统库的有关文件的函数,对代码量达到了控制,简便明了。
软件工程基础第四次作业:结对编程_第8张图片
在改进后的代码性能方面得到了大大提升,减少使用指针带来的代码混乱和指向不明难以审查的困境,使用库函数,使性能有所提高,但是由于系统的差异不大,无法显示出较大差距的性能提高。
软件工程基础第四次作业:结对编程_第9张图片

6.提交github

图示:
以下是本人提交github的心路历程,由于第二次作业完成情况太差,导致不会使用git提交代码,本次与伙伴进行了深刻的学习,提交上了,但是本次命名还是未完成好。
软件工程基础第四次作业:结对编程_第10张图片

软件工程基础第四次作业:结对编程_第11张图片

软件工程基础第四次作业:结对编程_第12张图片

软件工程基础第四次作业:结对编程_第13张图片

软件工程基础第四次作业:结对编程_第14张图片

软件工程基础第四次作业:结对编程_第15张图片
软件工程基础第四次作业:结对编程_第16张图片

7.结对编程

图示:
软件工程基础第四次作业:结对编程_第17张图片软件工程基础第四次作业:结对编程_第18张图片

你可能感兴趣的:(软件工程基础第四次作业:结对编程)