(一)需求分析html
根據實驗二 軟件工程我的項目的要求該軟件項目的基本功能要求以下:java
1.程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。git
2.程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。github
3.指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。編程
4.高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。模塊化
5.統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。函數
(二)功能設計測試
1.讀寫文件功能:對文件進行讀取和存放,這是第一條、第二條、第四條和第五條需求所須要的一部分功能;編碼
2.用戶輸入功能:用戶能夠輸入想要查詢的單詞,查詢高頻單詞的個數以及想進行何種操做,這個是對於第三條和第四條需求所須要的一部分功能;設計
3.詞頻統計功能:這個是對於第三條、第四條和第五條需求所須要的一部分功能;
4.排序功能:降序排序和按字典順序排序,這個是針對第四條、第五條需求所須要的一部分功能;
5.顯示功能:顯示柱狀圖,顯示前k個高頻單詞的詞頻,顯示指定單詞出現的次數,這個是對於第三條和第四條需求所須要的一部分功能
(三)設計實現
該程序共有三個類:
(四)測試運行
指定單詞詞頻統計的顯示:
前k個單詞詞頻及單詞的顯示:
將單詞按字典順序輸出到文件result.txt的顯示:
(五)優秀代碼片斷
在本次試驗中,我最大的收穫是學會了用柱狀圖來顯示單詞出現的次數,起初我認爲這個可能沒法實現,但後來查找資料,而且借鑑了其餘人的經驗後,我才知道柱狀圖竟然能夠這樣顯示,因此之後要儘可能多動手,這樣纔會學到更多的東西。
public void wordofnumber(ArrayList<Map.Entry<String, Integer>> list) { Scanner sc1 = new Scanner(System.in); System.out.println("各單詞的數量以及柱狀圖以下(一個█表明每一個單詞出現400次,注:文章中不存在的單詞不會出現)"); System.out.println("請輸入你要查詢的單詞用逗號隔開"); String wordss = sc1.nextLine(); String words[] = wordss.split(","); for (String word : words) { for (Map.Entry<String, Integer> entry : list) { if (word.equals(entry.getKey())) { int number = entry.getValue(); System.out.print(entry.getKey()+" numbers "+entry.getValue()+": "); for (int i = 0; i < number / 400; i++) { System.out.print("█"); } System.out.println(); System.out.println(); break; } } } }
(六)總結
在作本次項目時,我先進行了需求分析,知道了本次項目要進行文件的讀寫操做,要對文件中的單詞進行詞頻統計和柱狀圖的顯示以及將統計結果輸出到文件result.txt中,因此在本次項目中,我建立了三個類,將所要實現的具體功能寫入不一樣的類中,主類:Driver.java用於菜單欄的顯示,讀入要統計單詞的文本文件和對單詞進行排序;定義功能的抽象類Functions.java用於定義功能,具體的實如今Function類,體現面向對象中的多態思想;功能的實現類Function.java用於柱狀圖的顯示,前k個高頻單詞詞頻的顯示,將單詞及詞頻數按字典順序輸出到result.txt文件中。在整個項目中,每一個類都負責各自的一部分功能,實現了軟件的模塊化設計。
(七)PSP
任務內容 | 計劃完成須要的時間(min) | 實際完成須要的時間(min) |
---|---|---|
計劃 | 8 | 5 |
開發 | 80 | 86 |
需求分析 | 10 | 15 |
生成設計文檔 | 4 | 5 |
設計複審 | 5 | 7 |
具體設計 | 16 | 20 |
具體編碼 | 100 | 120 |
代碼複審 | 7 | 6 |
測試 | 15 | 20 |
報告 | 18 | 16 |
過後總結 | 6 | 7 |
從表中能夠看出,在具體代碼的編寫時,我花費了較多的時間,一方面是因爲對java編程有些遺忘,另外一方面是因爲本身剛開始不會使用柱狀圖來進行單詞的統計,因此花費了較多的時間。
點擊源碼,查看所有代碼