• 软件工程基础——第四次作业


    软件工程基础——第四次作业

    结对编程

    git地址 https://github.com/lilyShuangszyzhk/WordCount
    队友 双泽媛
    队友学号 201831074121
    队友博客 https://www.cnblogs.com/szy211/p/11674445.html

    ·PSP表格

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

    设计思路

    主要代码

    1.打开文件并判断是否成功

    ifstream fp(filename, ios::in);
    if (!fp)//判断文件是否打开
        {
            cout << "未能成功打开" << filename << ",请检查文件是否存在";
            getchar();
            exit(1);
        }
    

    2.英文只要字母相同,无论大小写都算作一个单词,所以首先将所有大写字母全部转换为小写

    void change(char a)
    {
        if (a >= 65 && a <= 90) { a += 32; }//大写转为小写
    }
    

    3.判断是否为空行

    if (ch != ' ' && ch != '
    ') { isline = 1; }//标记为非空行
    

    4.词频统计(使用无穷自动机)

    switch (process)
            {
            case 0:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
                else { word = ""; nap = 0; }break;
            case 1:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
                else { word = ""; nap = 0; }break;
            case 2:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
                else { word = ""; nap = 0; }break;
            case 3:if (ch >= 97 && ch <= 122) { word = word + ch; nap++; }
                else { word = ""; nap = 0; }break;
                    //第四位仍是字母则记为单词
            case 4:if (ch != ' ' && ch != '
    ' && ch != '!' && ch != '.' && ch != ',' && ch != ':' && ch != '(' && ch != ')' && ch!='?')
            {
                word = word + ch;
            }
                else { ++word_count[word]; nap = 0; word = ""; words++; }break;
            }
    

    5.统计行数:因为代码中设定为读到换行符才记为行数+1,而文档的最后一行无换行符,所以设定输出结果为(lines+1)

    //非空行且读到换行符则行数+1
    if (ch == '
    ')
            {
                if (isline == 1) { lines++; }
                isline = 0;//判断标记置0
            }
    

    6.构造容器:对于这部分内容完全是全新的知识,学习与应用上都花费了大量时间,map的迭代器起到了很大的作用(我比队友基础要弱一些,在这一部分拖了后腿)

    map<string, int> word_count;
    int nSize = word_count.size(), i = 1;
        multimap<int, string, greater<int> > mapw;
    
        for (map<string, int>::iterator it1 = word_count.begin(); it1 != word_count.end(); ++it1)
        {
            mapw.insert(pair<int, string>(it1->second, it1->first));//将word_count输入到mapw
    

    代码复审

    编程规范源自网络:https://zhuanlan.zhihu.com/p/20326454
    我们的代码可读性不高,规范度不够,在这一阶段进行了完善。

    性能分析

    因为我对性能分析这一技能的掌握较弱,所以这一部分在队友的电脑上完成,截图参见队友博客——https://www.cnblogs.com/szy211/p/11674445.html。

    结对感想

    结对编程给了我一次全新的体验,自己在编程方面的不足也充分的体现了出来,不过队友的支持真的帮助了我很多,尤其是性能分析,从队友那里学到了很多。

  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/ningningning/p/11681139.html
Copyright © 2020-2023  润新知