GitHubのします。https://github.com/SInXW/wc.exe
一つ、タイトル説明
1.タイトル説明
1.シンプルかつ完全なソフトウェアツール(ソースプログラムの統計的特性)を達成するために。
2.ユニットテスト、回帰試験、性能試験、上記のプログラムを達成する過程で関連ツールの使用。
3.実践パーソナルソフトウェアプロセス(PSP)、そして徐々にソフトウェアエンジニアリングの各部分で過ごした自分の時間を記録します。
2.WCプロジェクトの要件
wc.exeが一般的なツールである、それはテキストファイル、ワード、行の文字数をカウントすることができます。このプロジェクトは、既存のwc.exeの機能を模倣するために、コマンドラインプログラムを書くために、プログラミング言語のソースファイル、ワード、行の文字数与えられ、拡張することが尋ねました。
統計プログラムを実装し、文字の数は、それが統計プログラムファイル、単語数、行を修正し、また、他の拡張機能があり、かつ迅速に複数のファイルを扱うことができます。
具体的な機能要件:
モードのハンドル、ユーザーのニーズに:
wc.exe [パラメータ] [ファイル名]
機能の基本的なリスト:
wc.exe -c file.cと//は、ファイルfile.cとの文字数を返します。
wc.exe -w FILE.C //の数は、ワードFILE.Cのファイルを返します。
wc.exe -l FILE.C //は、ファイルfile.cとの行数を返します。
拡張機能:
ディレクトリの条件を満たし-s再帰処理ファイル。
-aリターンより複雑なデータ(ライン/スペースライン/コメント行)。
空白行は、次のようなこれ以上表示可能な文字以外のコードを、含まれていない場合銀行は、すべての制御文字やスペースをフォーマット「{。」
ライン:銀行コードは複数の文字を含んでいます。
コメント行:代わりに、銀行のコードの行、および銀行コメントが含まれています。興味深い例は、いくつかのプログラマが単一の文字の後ろにコメントを追加するということです。
} // NOTE
この場合、行はコメント行に属します。
[ファイル名]は:ファイルまたはディレクトリ名は、一般的なワイルドカードを扱うことができます。
第二に、問題解決のためのアイデア
ユーザが命令を入力し、その後、命令に従って、対応する動作を行う検出
統計文字操作:文字、文字の統計情報を読み取るために
統計用語運転:連続読み出し英語の文字、単語数プラス休憩場合
行数プラス改行の場合:列操作の数を数え
第三に、キーコード
統計文字操作:文字、文字の統計情報を読み取るために
// 文字カウント のint countCharacter(FILE * ファイル){ int型の文字= 0、CHNUM = 0 ; しばらく(!FEOF(ファイル)) { 文字 = はfgetc(ファイル); // 改行を除く IFを(文字== " \ N- ' ){ 続行; } CHNUM ++ ; } IF(CHNUM == 0 ){ 戻り 0 ; } リターン - CHNUM。 }
行数プラス改行の場合:列操作の数を数え
// 統計行数 int型 countLine(FILE * ファイル){ int型 LINENUM = 0、ワード= 0 ; int型フラグ= 0 ; // ファイルが空であるかどうかを識別し、空のファイル0行 IF(ファイル=!NULL){ 中(!FEOF(ファイル)) { ワード = fgetc関数(ファイル); // 改行の場合に IF(ワード== ' \ N- ' ){ LINENUM ++ ; } } 戻りLINENUMと、 } }
統計用語運転:連続読み出し英語の文字、単語数プラス休憩場合
// 统计词数 int型 countWord(FILE * ファイル){ int型の文字= 0、単語= 0、isWord = 0 ; しばらく(!feofを(ファイル)) { 文字 = fgetc関数(ファイル); もし((文字> = ' ' &&文字<= ' Z ')||(文字> = ' A ' &&文字<= ' Z ' )) { 場合(isWord == 0 ){ isWord = 1 。 } } 他 { 場合(isWord == 1 ){ ワード ++ 。 isWord = 0 ; } } } 戻りワード; }
拡張機能:
ウェイ:構造_finddata_tを使用して、ファイル情報を取得し、(書式#include <io.h>によって導入されました)
フォルダかどうかを決定するために各ファイルについて、フォルダがこの操作に再帰的であれば、そうでない場合はファイルの基本操作(統計行、単語、文字)を実行;アイデア
// 再帰処理ファイルを下 / * _finddata_t説明した構造の 構造体_finddata_t { 符号なしAttribに; のtime_t time_create; のtime_t time_access; のtime_t time_write; _fsize_tサイズ、 文字名[_MAX_FNAME]; }; 符号なしatrrib:ファイル属性の格納場所。ファイル属性は、次のいくつかありますが、ビット表現である: _A_ARCH(アーカイブ)、_A_HIDDEN(隠された)、_ A_NORMAL(ノーマル)、_ A_RDONLY(読み取り専用)、 _A_SUBDIR(フォルダ)、_ A_SYSTEM(システム) 文字名[_MAX_FNAME]:ファイル名。ここで、一定_MAX_FNAMEマクロは、それが最初にされている ファイル名の最大長さで表される文書で定義されました。 _finddata_t構造のための主な機能: 長い_findfirst(CHAR *ファイル指定、のFileInfo構造体_finddata_t *); 戻り値:検索が成功すれば、それだけで使用する検索のロングタイプのハンドルを返します。このハンドルは_findnext機能に使用されます。失敗したリターン-1。 パラメータ: ファイル指定:文字列のマークされたファイル、サポートワイルドカード。 FileInfo:これはポインタファイル構造情報を格納するために使用されます。 int型_findnext(ロングハンドル、構造体_finddata_t *のFileInfo); 戻り値:0を返す成功した場合、そうでなければ-1。 パラメータ: ハンドル:すなわちバックハンドル_findfirst関数によって返されました。 FileInfo:ポインタファイル構造情報。ファイルが見つかった後、ファイル構造にこの情報の関数。 int型_findclose(ロングハンドル); 戻り値:成功時に0を返し、失敗すると-1。 パラメータ: ハンドル:_findfirst機能が戻って来るためにハンドルを返します。 * / ボイド SHOWALL、(あるCHAR * パス){ _finddata_t FILEDIRは、 ロングハンドル; CHAR DIR [MAXPATH]; strcpyの(DIR、パス); // パスを追加'/' STRCAT(DIR、「/*.*" ); // 临时保存作用 のchar pathTemp [MAXPATH]; CHAR nameTemp [MAXPATH]; FILE * ファイル; のchar * abPath; もし!((ハンドル= _findfirst(DIR、&FILEDIR))= - 1リットル){ しばらく(_findnext(ハンドル、&FILEDIR)== 0 ){ // 是文件夹:fileDir.attrib == _A_SUBDIR 場合(fileDir.attrib == _A_SUBDIR &&のstrcmp(fileDir.name、" ")!= 0 &&のstrcmp(fileDir.name、" .. ")!= 0 ){ strcpyの(DIR、パス); // STRCAT(DIR、 "/"); STRCAT(DIR、fileDir.name); // 再帰フォルダが SHOWALL、(DIR)である; } 他{ // ファイル IF(のstrcmp(FILEDIR。名前、" ")!= 0 &&のstrcmp(fileDir.name、" ... ")!= 0 ){ //はCファイルでのIF(のCFile(fileDir.name)== CFILE){ strcatは(パス、" / " ); strcpyの(pathTemp、パス); strcpyの(nameTemp、fileDir.name)。 abPath = STRCAT(pathTemp、nameTemp)。 printf(" \ nは***************************************** \ N " ) ; printf(" \ T%S%S \ n " 、パス、fileDir.name)。 ファイル =のfopen(abPath、" R " )。 printf(" \ n \ T行数:%D行\ n " 、countLine(ファイル))。 ファイル =のfopen(abPath、" R&LT " ); のprintf(" \ N- \ Tの文字:%D A \ N- " 、countCharacter(ファイル)); ファイル =のfopen(abPath、" R&LT " ); のprintf(" \ N- \トンのワードカウント:%d個の数ヶ月\ N- "countWord(ファイル)); のprintf(" \ n -で*************************** ************** \ N- " ); } } } } } _findclose(ハンドル)。 }
第四に、テスト
(1)コマンドが入力されていません
(2)非Cファイル
(3)空のファイルを
(4)単一文字のファイル
(5)単一ワードファイル
(6)単一行ファイル
(7)一般的なソースファイル
下の(8)---再帰的な処理拡張機能ディレクトリ適格なファイル
ファイブ、PSPテーブル
VIプロジェクト概要
1.私は、プログラミングプロセスにおける優れたデザインをもたらした影響を感じませんでした。彼らは、アカウントに問題のその後の展開をしていないので、再帰的な処理機能を拡張する場合の基本的な機能を実行するため、彼らは基本的な機能を変更するために返す必要がある、拡張を行います。
例えば、スタートは直接出力機能のさまざまな基本的な機能で、さまざまな状況になりますが、再帰的なプロセス、非Cとは、出力用のファイルを必要としないとき、あなたはいくつかの例の出力機能を配置する必要があります。
2.計画はまた、タスク全体を考慮し始めると、自分の能力と実際の時間がかかるとの大きな違いを過大評価する時間の欠如を反映しています。