軟件工程第四次做業

結對編程


git地址 https://github.com/ITBuilting/mytestgit
結對成員 譚鎔
結對成員學號 201831061204
Fork倉庫的Github項目地址 https://github.com/ITBuilting/mytestgit




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  

需求分析:

實現一個命令行程序,輸入文件名以命令行參數傳入。

git

則會統計input.txt中的如下幾個指標
1.統計文件的字符數:github

  • 只須要統計Ascii碼,漢字不需考慮
  • 空格,水平製表符,換行符,均算字符

2.統計文件的單詞總數,單詞:至少以4個英文字母開頭,跟上字母數字符號,單詞以分隔符分割,不區分大小寫。編程

  • 英文字母:A-Z,a-z
  • 字母數字符號:A-Z,a-z,0-9
  • 分割符:空格,非字母數字符號

3.統計文件的有效行數:任何包含非空白字符的行,都須要統計。

函數

4.統計文件中各單詞的出現次數,最終只輸出頻率最高的10個。頻率相同的單詞,優先輸出字典序靠前的單詞。

單元測試

5.按照字典序輸出到文件txt:學習

  • 輸出的單詞統一爲小寫格式
    輸出的格式爲
    characters: number
    words: number
    lines: number
    : number
    : number
    ...



計算接口與設計實現


1.在思考打開文件的讀取的時候,咱們使用了庫函數ftream和map。 ifstream來讀入須要的文件,ofstream來實現結果輸出進文件output.txt中,用fout和fin來實現向文件中進行寫操做和從文件的內容中進行讀操做。
2.使用bool isdigit函數來判斷是不是個十進制數字。
3.使用map的迭代器來遍歷訪問這個文件裏面的元素 ,咱們學習而且使用了許多新函數。

測試

具體代碼:ui

#include "pch.h"

#include <fstream>
#include <map>
#include <string>
using namespace std;

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

int main(void)
{
        map<string, int> 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<string, int>::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;

}


運行截圖:


編碼


代碼複審和改進過程:


每寫一部分代碼就會相應的進行必定的審查,在過程當中有不少不明白的地方,就會一塊兒查閱知識,不少知識也是個人結對夥伴教給個人。最後經過討論咱們對讀入字符代碼實現部分進行了改進:統一使用系統庫的有關文件的函數,對代碼量達到了控制,簡便明瞭。spa



計算模塊部分單元測試展現



計算模塊部分異常處理說明


咱們一直在遇到問題,也相應的一直在網上查找,咱們因爲第二次做業完成狀況不是很良好,因此在git提交上浪費了不少時間。




描述結對的過程


心路歷程與收穫

整個做業對於我來講難度仍是很大的,遇到了不少問題,可是幸虧個人小夥伴很優秀。也很感謝個人結對小夥伴從頭至尾的幫助。雖然整個做業過程仍是有一點艱辛的,可是也開心從中學到了一些東西,好比文件讀取等,還了解了許多函數,還有關於map的許許多多的東西,之後仍是要多向大佬學習,一點一點的積累知識,嘿嘿。

相關文章
相關標籤/搜索