天天看點

軟體工程第1次作業

要求0

作業連接配接:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110】

要求1

git倉庫位址:【https://git.coding.net/Soloversion/wf.git】

要求2

1.PSP階段表格

SP2.1 任務内容 計劃共完成需要的時間(min) 實際完成需要的時間(min)
  Planning 計劃 2000 2240
Estimate 估計這個任務需要多少時間,并規劃大緻工作步驟
  Development 開發 1580 2330
 Analysis 需求分析 (包括學習新技術) 120 150
Design Spec 生成設計文檔 90
Design Review 設計複審 (和同僚稽核設計文檔)
 Coding Standard 代碼規範 (為目前的開發制定合适的規範) 60 100
Design 具體設計 240 500
Coding 具體編碼 920 1220
 Code Review 代碼複審
Test  測試(自我測試,修改代碼,送出修改)
  Reporting 報告 410
Test Report 測試報告 200 230
Size Measurement 計算工作量
Postmortem & Process Improvement Plan 事後總結, 提出過程改進計劃
功能子產品 具體階段 預計時間(min) 實際時間(min)
  功能1 測試完善

20

130

30

25

功能2 140 15
  功能3

40

210

未完成

2.分析預估耗時和實際耗時的差距原因:

•自身能力薄弱。由于自己的程式設計能力比較弱,是以在拿到作業之後花了很長時間去盡力實作其中的部分功能,這個過程中還包含着我對于自己之前不熟悉的語言的重新學習;

•分析不到位。可能是基礎比較差和缺少經驗的原因,我雖然感覺自己學過這種頻率統計,但是實際仔細分析的時候才發現有很大的不同,是以出于一種不斷發現問題的循環中;

•細節處理不好。對于代碼的規範和整體架構,我做的并不好,腦子中沒有一個outline,這是我欠缺的一種能力。

要求3

1.解題思路

先将題目要求實作的功能大緻分為以下三大塊:(1)讀取txt文本(2)統計其中單詞個數(3)将單詞(按照某種順序)輸出。

對功能一進行分析:要求統計文本中不重複的單詞個數,同時将大寫全部轉化為小寫輸出。

多功能而進行分析:在功能一的基礎上增加了在路徑下尋找指定文本,在調用功能一即可。

然而,理想很豐滿,現實很骨感。分析起來好像很簡單,實際上真正做起來自己完成的部分少之又少,還是在借鑒了其他部落客思路的情況下。

2.部分代碼展示

1)首先利用函數判斷該單詞是否符合規定的單詞格式,進而進行第一道篩選

bool islegal( char a[] ) /* 判斷是否是一個合法單詞 */
{
    int i = 0;
    for ( i = 0; a[i] != '\0'; i++ )
        if ( (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= '0' && a[i] <= '9') )
            return(true);
        else
            return(false);
}      

 2)将找到的單詞的字母進行大小寫的轉換,再将轉換後所得結果result存入數組中

int j = 0; /* 大寫轉為小寫 */
    while ( result[j] != '/0' && result[j + 1] != '/0' )
    {
        if ( result[j] >= 'A' && result[j] <= 'Z' )
        {
            result[j] = result[j] +32;/*單個字母的大小寫轉換*/
            j++;
        }
    }
    cout << result;
    char *sep = " ";      

3)掃描要求路徑下的所有txt檔案,同時標明在字典順序中最靠前的檔案,進而實作功能2.

這一部分代碼是借鑒于其他部落客的,引用自:https://www.cnblogs.com/tgyf/p/3839894.html

/*-------擷取特定格式的檔案名-------*/
void GetAllFormatFiles( string path, vector<string>& files,string format)
{

    long   hFile = 0;//檔案句柄
    struct _finddata_t fileinfo; //檔案資訊
    string p;
    if((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(),&fileinfo)) !=  -1)
    {
        do
        {
            if((fileinfo.attrib &  _A_SUBDIR))
            {
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
                {
                    GetAllFormatFiles( p.assign(path).append("\\").append(fileinfo.name), files,format);
                }
            }
            else
            {
                files.push_back(p.assign(fileinfo.name));
            }
        }while(_findnext(hFile, &fileinfo)  == 0);

        _findclose(hFile);
    }
}      

 4)處理輸入的檔案名,即隻有當控制台輸入“”wf -c 檔案名”時,才能夠對相應的.txt檔案進行讀取

此處對字元串的處理我引用自:http://blog.sina.com.cn/s/blog_5cef35c50100dqy5.html

bool filename()/*處理輸入的檔案名*/
{
     bool exist=false;
    string::size_type index1 = inputstr.find("-c");/*确定輸入的為-c*/
        if(index1!=string::npos)
        {
            exist=true;
            index1=index1+3;
            while(inputstr[index1]!=' '&&inputstr[index1]!='\n')
            {
                file_name=file_name+inputstr[index1];
                index1++;
            }
        }
        return exist;
}      

 5)對單詞的出現頻率進行排序,采用的算法是冒泡排序算法,此處用到資料結構當中的相關排序知識

for(k=1;k<=j-1;k++)/*利用冒泡排序算法*/ 
      for(i=k+1;i<=j;i++)
     {  
          if(number[k]<number[i])
          {  
               int temp=number[k];
               number[k]=number[i];
               number[i]=temp;
               r[0]=(char *)malloc(sizeof(w[k]));/*将對應的單詞也進行交換*/ 
               r[0]=w[k];                                                                             
               w[k]=(char *)malloc(sizeof(w[i]));                                                                                                                     
               w[k]=w[i];                                                                               
               w[i]=(char *)malloc(sizeof(r[0]));                                               
               w[i]=r[0];
           }
   return 0;
    }      

要求4

由于我自己沒有将各個功能全部完成,是以最後的測試部分借用的是别人的代碼

1)老師樣例測試

軟體工程第1次作業

2)外國名著《飄》

軟體工程第1次作業

3)外國短篇小說《小王子》

軟體工程第1次作業

 總結

其實說句實話,在拿到這個作業之後,我感到無從下手,隻能不斷的查資料,從别的部落客那裡獲得一些相關知識,不僅耗費了大量的時間也耗費了大量的精力,重點是最後還沒有完全寫出來,這也讓我感到迷茫和傷心,我越來越覺得自己可能不适合幹這行,越來越對自己産生懷疑。再看看《建構之法》中作者用诙諧的語言給我們講着軟體工程這門學科,我更加覺得自己的渺小和無知,因為隻有真正懂得的人才能用通俗的語言講給其他人聽,而我沒有也做不到。

上一篇: 第三次作業
下一篇: 第二次作業