要求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)老師樣例測試

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