1. 程式人生 > >軟工作業(一):WC.exe

軟工作業(一):WC.exe

order 開始 就會 語言 != borde design targe enter

WC.exe(C語言實現)

github傳送門:https://github.com/JJYdesu/WC.git


項目要求

wc.exe 是一個常見的工具,它能統計文本文件的字符數、單詞數和行數。這個項目要求寫一個命令行程序,模仿已有wc.exe 的功能,並加以擴充,給出某程序設計語言源文件的字符數、單詞數和行數。

實現一個統計程序,它能正確統計程序文件中的字符數、單詞數、行數,以及還具備其他擴展功能,並能夠快速地處理多個文件。
具體功能要求:
程序處理用戶需求的模式為:

wc.exe [parameter] [file_name]

基本功能列表:

wc.exe -c file.c //返回文件 file.c 的字符

(實現)

wc.exe -w file.c //返回文件 file.c 的詞的數目 (實現)

wc.exe -l file.c //返回文件 file.c 的行數 (實現)

擴展功能:
-s 遞歸處理目錄下符合條件的文件(實現)
-a 返回更復雜的數據 (未實現)


PSP

PSP2.1

Personal Software Process Stages

預估耗時(分鐘)

實際耗時(分鐘)

Planning

計劃

60

· Estimate

· 估計這個任務需要多少時間

Development

開發

1000

· Analysis

· 需求分析 (包括學習新技術)

300

· Design Spec

· 生成設計文檔

40

· Design Review

· 設計復審 (和同事審核設計文檔)

40

· Coding Standard

· 代碼規範 (為目前的開發制定合適的規範)

60

· Design

· 具體設計

60

· Coding

· 具體編碼

360

· Code Review

· 代碼復審

60

· Test

· 測試(自我測試,修改代碼,提交修改)

180

Reporting

報告

60

· Test Report

· 測試報告

60

· Size Measurement

· 計算工作量

20

· Postmortem & Process Improvement Plan

· 事後總結, 並提出過程改進計劃

30

合計


解題思路

拿到題目後首先考慮的是用什麽編寫,由於我只會JAVA和C,因此給我的選項也不多,最後考慮到C的基礎比較紮實,就選擇了用C語言來實現。看完項目要求後,自然就會想到通過主函數調用幾個功能函數來實現相關要求。


設計實現過程

功能函數分別是字符數統計,詞數統計,行數統計以及處理目錄下符合條件的文件,最後再通過主函數調用實現其功能,其中詞數統計中調用了字符數統計函數,主要用於判斷文件中有無字符,有字符則開始統計詞數,無字符則直接輸出0。


代碼說明

頭文件

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "io.h"

字符統計

int charcalculate(char *file) /*字符統計*/
{
     int c=0;
     FILE *fp;
     char a;
     fp=fopen(file,"r");
     while(!feof(fp))
     {
         a=fgetc(fp);
            if(a!= &&a!=\n&&a!=\t)
               c++;
            
     }
     fclose(fp); 
     c--;
     return c;
}

詞數統計

int wordcalculate(char *file)   /*詞數統計*/
{
     int w=0;
     FILE *fp;
     char a;
     fp=fopen(file,"r");
     if (charcalculate(file)==0)
         w=0;  
     else
     {
         while(!feof(fp))
     {
         a=fgetc(fp);
            if(a== ||a==\n||a==\t)
               w++;
     }
     w++;
     }
     fclose(fp);
     return w;
}

行數統計

int linecalculate(char *file)  /*行數統計*/
{
     int l=0;
     FILE *fp;
     fp=fopen(file,"r");
     char a;
     while(!feof(fp))
     {
         a=fgetc(fp);
            if(a==\n||a==\t)
               l++;
     }
     l++;
     fclose(fp); 
     return l;
}

處理目錄下符合條件的文件

int searchfile(void)    /*尋找目錄下txt文件*/
{
    //文件存儲信息結構體
    struct _finddata_t fileinfo;
    //保存文件句柄 
    long fHandle;
    //文件數記錄器
    int t=0;
    
       if( (fHandle=_findfirst( "F:\\Microsoft Visual Studio\\MyProjects\\WordCount\\Debug\\*txt", &fileinfo )) == -1L ) 
        {
        printf( "當前目錄下沒有txt文件\n");
        }
    else
    do{
         t++;
        printf("找到文件:%s\n", fileinfo.name);
    }while (_findnext(fHandle,&fileinfo)==0);

    _findclose(fHandle);

    printf("txt文件數量:%d\n",t);
    return 0;
}

主函數

int main (int argc, char *argv[])   /*主函數*/
{
       
    
       if(!strcmp(argv[1],"-c"))
    {
        printf("charnumber:%d\n",charcalculate(argv[2]));
    }

       else if(!strcmp(argv[1],"-w"))
    {
        printf("wordnumber:%d\n",wordcalculate(argv[2]));
    }

       else if (!strcmp(argv[1],"-l"))
    {
        printf("linenumber:%d\n",linecalculate(argv[2]));
    }
      
       else if(!strcmp(argv[1],"-s"))
       {
           searchfile();
       }

    return 0;
}

測試運行

測試文件與測試文件夾

技術分享圖片

技術分享圖片

程序運行結果技術分享圖片


項目小結

軟工作業(一):WC.exe