201671010409 達選奇 實驗二 軟件工程我的項目

課程名稱 2016級計算機科學與工程學院軟件工程(西北師範大學)
做業要求 實驗二 軟件工程我的項目
課程目標 經過學習這門課程,深刻了解軟件開發的標準過程,從軟件生命週期的8個階段分析各個階段的開發任務,摒棄以往開發軟件的方法。
做業意義 這次做業能幫助我掌握軟件項目我的開發流程和Github上發佈軟件項目的操做方法

需求分析

1.程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。

2.程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。

3.指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。

4.高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。

5.統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。

功能設計

1.能夠讀取指定的英文文本文件。
2.能夠對指定文本進行單詞詞頻統計。
3.對統計的單詞及頻數按字典字母順序打印。
4.採用圖形化界面方便操做。

設計實現

這個程序包含5個函數,包括1個主函數main函數和5個功能函數,分別是main函數、srwj函數、px函數、pv函數、dy函數、menu函數。其中main函數主要負責控制整個程序的運行,而剩下5個函數功能分別以下:

 1.srwj函數用來讀取指定文件,並將相關信息輸入結構體變量wd中;
 2.pv函數用來統計單詞的頻數;
 3.px函數用來對已統計的單詞進行英文字母順序的排序;
 4.dy函數用來輸出單詞的相關統計信息;
 5.menu函數用來進行圖形化界面操做;

測試運行

  • 用戶界面html

  • 程序運行界面
    git

    比較關鍵代碼片斷

  • 主函數main代碼
int main()
{
 srwj();
 px();
 pv();
 menu(); 
}
  • pv函數代碼
void pv(){
    int m,n,flag=1;
    for(m=0;m<cc;m++){
        for(n=0;n<m;n++){
            if(strcmp(wd[n].dc,wd[m].dc)==0){
                flag=0;
                break;
             }
             else flag=1;
         }
         while(flag){
            for(n=m;n<cc;n++){
                if(strcmp(wd[n].dc,wd[m].dc)==0){
                    wd[m].nn++;
                 }
                 flag=0;
             }
         }
     }
 }
  • px函數代碼
void px(){
    int m,n,k;
    char temp[20];
    for(m=0;m<cc-1;m++){
        k=m;
        for(n=m+1;n<cc;n++){
            if(strcmp(wd[k].dc,wd[n].dc)>0){
                k=n;
             }
             if(k!=m){
//              temp=wd[m].dc;
//              wd[m].dc=wd[k].dc;
//              wd[k].dc=temp;
                strcpy(temp,wd[m].dc);
                strcpy(wd[m].dc,wd[k].dc);
                strcpy(wd[k].dc,temp);
             }
         }
     }
 }
  • menu函數代碼
int menu()
{
    int ii;
    printf("\n");
    printf("              *********************************************************\n");
    printf("              #                                                       #\n");
    printf("              #                       詞頻統計                        #\n");
    printf("              #                                                       #\n");
    printf("              *********************************************************\n");
    printf("              #           1.顯示單詞總數、所有單詞及頻數              #\n");
//    printf("              #           2. 顯示高頻詞及頻數                         #\n");
    printf("              #                                                       #\n");
    printf("              #           3.退出系統                                  #\n");
    printf("              *********************************************************\n"); 
    printf("                     請選擇您須要的操做序號(1-3)按回車確認:");
    scanf("%d",&ii);
    printf("\n");
    switch(ii)
  {
      case 1:dy();break;
//        case 2:gpc();break; 
      case 3: break;
      default:printf("請在1-3之間選擇\n");break;
   }
}

總結

- 在此次項目中,我查閱了一些之前看過的c語言書籍,因爲很長時間沒用過c語言,因此編程頗爲費力。
- 在編程過程當中,用到了一些冒泡排序之類的算法,並且採用了文件相關的函數來作。
- 第一次編寫這麼大代碼量的程序,有些手忙腳亂,不過總算把每一個模塊編寫完畢。
- 程序編寫過程當中還有不少沒有實現,好比說高頻詞的顯示,因爲對指針的運用還不熟練,因此相關的代碼實現沒有完成。

PSP

PSP2.1 任務內容 計劃共完成須要
的時間(min)
實際完成須要
的時間(min)
Planning 計劃 20 18
Estimate 估計這個任務須要多少
時間,並規劃大體工做步驟
半天 半天
Development 開發 180 200
Analysis 需求分析 (包括學習新技術) 60 80
Design Spec 生成設計文檔 10 20
Design Review 設計複審 (和同窗審覈設計文檔) 7 8
Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 5 7
Design 具體設計 30 60
Coding 具體編碼 120 240
Code Review 代碼複審 30 60
Test 測試(自我測試,修改代碼,提交修改) 20 30
Reporting 報告 10 10
Test Report 測試報告 5 4
Size Measurement 計算工做量 5 3
Postmortem & Process Improvement Plan 過後總結 ,並提出過程改進計劃 5 5

github 項目查看

github源碼github

相關文章
相關標籤/搜索