WC軟體工程項目JAVA實現博客 github地址:https://github.com/liudaohu/myrepository.git 功能實現 · -w 統計單詞數 -c 統計字元數 -l 統計行數 -a 統計複雜數據 -s 遞歸處理 -v 可視化視窗 ...
WC軟體工程項目JAVA實現博客
github地址:https://github.com/liudaohu/myrepository.git
功能實現
· -w 統計單詞數
-c 統計字元數
-l 統計行數
-a 統計複雜數據
-s 遞歸處理
-v 可視化視窗
項目相關要求
· 【編程語言】不限
· 【項目設計】分析並理解題目要求,獨立完成整個項目,並將最新項目發佈在Github上。
· 【項目測試】使用單元測試對項目進行測試,並使用插件查看測試分支覆蓋率等指標。
· 【源代碼管理】在項目實踐過程中需要使用Github管理源代碼,代碼有進展即簽入Github。簽入記錄不合理的項目會被助教抽查詢問項目細節。
- 【博客發佈】按照要求發佈博客,利用在構建之法中學習到的相關內容,結合個人項目的實踐經歷,撰寫解決項目的心路歷程與收穫。博客與Github項目明顯不符的作業將取消作業成績。
遇到的困難及解決方法
- 對於項目要求的不理解,例如在命令行的實現等問題
- 向經驗豐富的同學請教
- 已解決
- 大體明白需求
-
- 實現-w功能時,原想使用read()方法,但返回參數是int,不方便判斷
- 改用readline()方法,並使用正則表達式實現
- 已解決
- 對正則表達式的使用更加熟悉
-
- 仍希望挑戰用read()方法實現-w功能
- 強行把read()方法返回的int值轉成char,再加到string裡面
- 已解決
- 能用多種方法解決問題
-
- 遞歸實現時發現前面搭建的框架不合理
- 重新構思框架
- 已解決
- 剛開始搭建框架時考慮不周,下次註意
-
- 報錯時找不到錯誤源
- 對不同報錯區別處理
- 已解決
- 下次註意對不同報錯區別處理
-
- 計算註釋行時,無法處理同行多個塊註釋的特殊情況
- 嘗試構思各種方法,包括設sign,包括數塊註釋起始和塊註釋結束的個數等
- 未解決,目前認為堆棧方法可行,但最後沒執行
- 挫敗感
-
- 計算代碼行
- 沒有
- 未解決
- 註釋行都沒計算,代碼行就算了
-
- 計算空白行統計結果錯誤
- 用了多種方法最後定位bug原因在於字元串後是否有空格
- 已解決
- 無法理解,但懂得了妥協的辦法,反正字元串後面加個空格就行了
-
- 想把文本框設為只讀
- 百度
- 未解決
- 百度不是萬能的
-
- 遞歸執行時覆蓋了原結果
- 延時
- 未解決
- 尚未搞懂延時的效果,不過傳參部分本來有問題,延時解決不了
-
- 重啟電腦後,視窗類無法打開
- 各種嘗試,就剩把電腦砸了
- 新建一個項目,把原來代碼一個不差地剪過去,已解決
- eclipse文件關聯的問題,並非我代碼內問題,至今未搞懂
-
關鍵代碼or設計說明
貼出你認為的關鍵代碼或者設計圖,併進行解釋
1 public static int countl(File file) throws IOException {//數行數 2 BufferedReader br = new BufferedReader(new FileReader(file)); 3 int ln=0; 4 while((br.readLine())!=null) { 5 ln++; 6 } 7 br.close(); 8 return ln; 9 } 10 public static int countc(File file) throws IOException {//數字元數 11 BufferedReader br = new BufferedReader(new FileReader(file)); 12 int cn=0; 13 while((br.read())!=-1) { 14 cn++; 15 } 16 br.close(); 17 return cn; 18 } 19 public static int countw(File file) throws IOException {//數單詞數第一種方法 20 BufferedReader br = new BufferedReader(new FileReader(file)); 21 String c; 22 int wn=0; 23 while((c=br.readLine())!=null) { 24 String[] s = c.split("\\W");//按行正則匹配按非詞字元拆分成數組 25 wn+=s.length;//數組元素數即為單詞數 26 } 27 br.close(); 28 return wn; 29 } 30 public static int countw2(File file) throws IOException {//第二種 31 BufferedReader br = new BufferedReader(new FileReader(file)); 32 String c; 33 int cc; 34 int s=0;//這個sign是關鍵,表示上一個是否為空 35 int wn=1; 36 while((cc=br.read())!=-1) {//正則只能匹配字元串 37 c=(char)cc+"";//所以把讀到的int強行轉為char 38 //System.out.println(c); 39 if(c.matches("\\S")&s==0) {s=1;wn++;} 40 if(c.matches("\\s")&s==1) {s=0;}; 41 } 42 br.close(); 43 return wn; 44 } 45 public static int counta(File file) throws IOException {//數空白行 46 BufferedReader br = new BufferedReader(new FileReader(file)); 47 String c; 48 int ccca = 0; 49 while((c=br.readLine())!=null) { 50 c+=" ";//這個原理我也不懂,反正實測不加空格的話會數錯 51 String[] s = c.split("\\S"); //就算兩個相鄰字元也分開,中間為空集 52 if(s.length<=2) {ccca++;}//按需求,一行內只有單一字元算空行 53 } 54 br.close(); 55 return ccca; 56 } 57 public static void scan(File file) throws IOException{ 58 if(file!=null){ 59 if(file.isDirectory()){ 60 File[] fileArray=file.listFiles();//列出裡面的文件目錄 61 if(fileArray!=null){ 62 for (int i = 0; i < fileArray.length; i++) { 63 //遞歸調用 64 scan(fileArray[i]); 65 } 66 } 67 } 68 else{ 69 all(file);//這個方法沒貼上來,內容很簡單的,就是分別調用前面的wcl方法 70 } 71 } 72 } 73 void run(File file) throws IOException {//這個是視窗界面裡面的執行實現 74 int ww=Method.countw2(file); 75 int wc=Method.countc(file); 76 int wl=Method.countl(file); 77 int wa=Method.counta(file); 78 wordArea.setText("代碼文件路徑:"+path+"\n單詞數目為:"+ww+"\n字元數目為:"+wc+"\n總行數為:"+wl+ 79 "\n空白行數為:"+wa); 80 }
【註意】不得貼項目無關代碼,一經發現,算抄襲。
例:
void selection_sort(int* array, int n) {
for (int i = 0; i < n; ++i) {
int min_idx = n - 1;
for (int j = n - 2; j >= i; --j) {
if (array[j] < array[min_idx])
min_idx = j;
}
if (min_idx != i)
swap(array, min_idx, i);
}
}
PSP
- 實現之前先在PSP中預估時間
- 實施後各個環節實際花費多少時間也請做記錄
- 表中有一項: Estimate 指的“預估”這個活動,“預估時間”也是一項任務。
- 例如:我估計自己需要花30分鐘來估算出整個項目需要多少時間完成,結果我花了20分鐘估算出整個項目需要6個小時完成。Estimate這一項應該在“預估耗時”填寫30分鐘,實際耗時填寫“20”分鐘。
- 一級和二級活動的包含關係:
- Planning 這個一級活動包含了1個二級活動(Estimate)
- Development 這個一級活動包含了8個二級活動
- Reporting 這個一級活動包含了3個二級活動
- 大家在記錄時間的時候, 只用記錄二級活動, 然後把總數加了, 就是相應的一級活動的時間
- 這個時間的長短並不會對分數有直接影響,這是為了大家自己總結。
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | ||
· Estimate | · 估計這個任務需要多少時間 | 5 | 2 |
Development | 開發 | ||
· Analysis | · 需求分析 (包括學習新技術) | 120 | 240 |
· Design Spec | · 生成設計文檔 | 60 | 0 |
· Design Review | · 設計覆審 (和同事審核設計文檔) | 60 | 0 |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 60 | 0 |
· Design | · 具體設計 | 60 | 120 |
· Coding | · 具體編碼 | 180 | 720 |
· Code Review | · 代碼覆審 | 60 | 120 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 60 | 60 |
Reporting | 報告 | ||
· Test Report | · 測試報告 | 60 | 120 |
· Size Measurement | · 計算工作量 | 60 | 10 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 60 | 60 |
合計 | 865 | 1452 |
PSP2.1 Markdown Source
| PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
|-----------------------------------------|-----------------------------------------|------------------|------------------|
| Planning | 計劃 | | |
| · Estimate | · 估計這個任務需要多少時間 | | |
| Development | 開發 | | |
| · Analysis | · 需求分析 (包括學習新技術) | | |
| · Design Spec | · 生成設計文檔 | | |
| · Design Review | · 設計覆審 (和同事審核設計文檔) | | |
| · Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | | |
| · Design | · 具體設計 | | |
| · Coding | · 具體編碼 | | |
| · Code Review | · 代碼覆審 | | |
| · Test | · 測試(自我測試,修改代碼,提交修改) | | |
| Reporting | 報告 | | |
| · Test Report | · 測試報告 | | |
| · Size Measurement | · 計算工作量 | | |
| · Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | | |
| 合計 | | | |
記錄自己的學習進度條(每周追加)
第N周 | 新增代碼(行) | 累計代碼(行) | 本周學習耗時(小時) | 累計學習耗時(小時) | 重要成長 |
---|---|---|---|---|---|
1 | 500 | 500 | 5 | 5 | 熟悉x語言1、2、3特性 |
2 | 1000 | 1500 | 12 | 17 | 通過練習xxx,掌握了xxx用法 |
… |
參考
- 項目博客模板:http://www.cnblogs.com/vertextao/p/7469789.html
- 別人的博文工
- http://www.cnblogs.com/pramy/p/9607743.html
- https://www.jb51.net/article/102424.htm
- https://www.cnblogs.com/LFBlog/p/6240906.html
- https://blog.csdn.net/lxasmall_white/article/details/78649747
- https://blog.csdn.net/Rookie_Or_Veteran/article/details/78151513