1.項目位址
https://github.com/namoyuwen/word-count
2.項目相關要求
2.1 項目描述
Word Count 1. 實作一個簡單而完整的軟體工具(源程式特征統計程式)。 2. 進行單元測試、回歸測試、效能測試,在實作上述程式的過程中使用相關的工具。 3. 進行個人軟體過程(PSP)的實踐,逐漸記錄自己在每個軟體工程環節花費的時間。
2.2 WC 項目要求
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 傳回更複雜的資料(代碼行 / 空行 / 注釋行)。
空行:本行全部是空格或格式控制字元,如果包括代碼,則隻有不超過一個可顯示的字元,例如“{”。
代碼行:本行包括多于一個字元的代碼。
注釋行:本行不是代碼行,并且本行包括注釋。一個有趣的例子是有些程式員會在單字元後面加注釋:
} //注釋在這種情況下,這一行屬于注釋行。
[file_name]: 檔案或目錄名,可以處理一般通配符。進階功能:
-x 參數。這個參數單獨使用。如果指令行有這個參數,則程式會顯示圖形界面,使用者可以通過界面選取單個檔案,程式就會顯示檔案的字元數、行數等全部統計資訊。
需求舉例: wc.exe -s -a *.c
傳回目前目錄及子目錄中所有*.c 檔案的代碼行數、空行數、注釋行數。
3.解題思路描述
1.首先拿到這個題目,由于隻對C語言熟悉,故想着用C語言去做,而C語言的使用已經有一段啥時間沒用了,是以在重新熟悉的時間上花費了較多的時間
2.在網上學習這個檔案的操作難點和關鍵點的時候,這個題目的一個重點是對于檔案操作,對于檔案的操作也進行學習
3.這個題目主要分為4個子產品,主函數子產品,和三個基本功能子產品
4.設計實作過程。
1.先寫出三個子函數,統計字數,單詞數和行數
2.主函數調用這三個函數
5.代碼說明。
1.主函數
#include
#include
int charc(char *file);
int wordc(char *file);
int linec(char *file);
int main(){
FILE *fp;
int ch,wo,li;
char file[50];//檔案位址
printf("\n請輸入檔案位址:\n");
scanf("%s",file);
if((fp=fopen(file,"r"))==NULL)
{
printf("不存在這個檔案");
exit(-1);
}
else{
ch=charc(file);
wo=wordc(file);
li=linec(file);
printf("\n該檔案字元數為%d\n單詞數為%d\n行數為%d\n",ch,wo,li);
}
}
2.字元數統計
int charc(char *file) {
FILE *fp = NULL;
int charcount = 0;
if ((fp=fopen(file,"r"))== NULL) {
printf("檔案尋找失敗!\n");
exit(-1);
}
char ch;
ch = fgetc(fp);
while (!feof(fp)) {
ch = fgetc(fp);//讀取檔案中的字元
charcount++;//統計字元數
}
fclose(fp);
return charcount;
}
3.單詞數統計
int wordc(char *file) {
FILE *fp = NULL;
int wordcount = 0;
if ((fp = fopen(file,"r")) == NULL) {
printf("檔案尋找失敗!\n");
exit(-1);
}
char ch;
int word;
while (!feof(fp)) {
ch = fgetc(fp);
if (ch 'Z'&&ch< 'a') || ch>'z')
{
word = 0;
}
else if (word == 0)
{
word = 1;
wordcount++;
}
}
return wordcount;
}
4.行數統計
int linec(char *file){//計算行數
int linecount=0;
char ch,li=0;
FILE *fp;
if ((fp=fopen(file,"r"))==NULL)
{
exit(-1);
}
ch = fgetc(fp);
while (!feof(fp))
{
if(ch=='\n')
linecount++;
li=ch;
}
if (li!='\n')
linecount++;
return linecount;
}
6.測試運作。
1.空檔案
2.一個詞檔案
3.一行檔案
4.一個典型源檔案
7.項目小結。
這次的個人項目,花了較長的時間在複習C語言的過程上,同時也參考了許多人的資料與間接,發現了自己在C語言上還有許多的不足,同時在編碼時想法也很混亂,基本考慮不到重要的點。
這次的項目讓自己意識到了還存在許多的不足,革命尚未完成,同志仍須努力。我還需要每天花費時間在對語言的學習上,掌握更多的知識。而這次PSP表自己的實際耗時也比預估長了許多
,主要是在于對代碼的不熟練以及在學習上花了許多時間。
PSPPersonal Software Process Stages預估耗時(分鐘)實際耗時(分鐘)Planning
計劃
50
75
· Estimate
估計這個任務需要多少時間
20
15
Development
開發
120
150
Analysis
需求分析 (包括學習新技術)
30
120
·Design Spec
生成設計文檔
20
30
·Design Review
設計複審 (和同僚稽核設計文檔)
· Coding Standard
代碼規範 (為目前的開發制定合适的規範)
5
5
·Design
具體設計
30
60
·Coding
具體編碼
100
160
·Code Review
代碼複審
30
45
·Test
測試(自我測試,修改代碼,送出修改)
10
5
Reporting
報告
10
30
·Test Report
測試報告
10
10
·Size Measurement
計算工作量
30
60
·Postmortem & Process Improvement Plan
事後總結, 并提出過程改進計劃
20
30
合計
485
795
來源:https://www.cnblogs.com/wenqinyi/p/12563649.html