做業 | 連接 |
---|---|
做業所屬課程 | 西北師範大學軟件工程 |
做業要求 | 實驗二 |
源代碼 | Github |
功能需求html
(1).程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。
(2).程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。
(3).指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。
(4).高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
(5).統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。git
非功能需求github
用戶暫無界面等其餘需求,不排除後期添加的可能性。算法
基本功能模塊化
(1)讀入任意英文文本文件。
(2)詞頻統計:用戶輸入文本當中單詞,統計輸出單詞出現的次數和柱狀統計圖。
(3)高頻詞頻統計:用戶輸入個數K,按詞頻降序輸出前K個單詞的詞頻及單詞。
(4)統計該文本全部單詞數量及詞頻數,按字典順序輸出單詞及詞頻數到文件result.txt。函數擴展功能測試
無spa
本軟件的實現共有兩個類:Main和Sort。
Main函數中主要是實現了菜單欄和詞頻統計的各個功能函數。.net
4.1根據提示輸入文本,根據菜單欄提示進行選擇,選擇功能1,查詢輸入的單詞。以下爲該單詞不在文本當中時的狀況。
4.2根據菜單欄提示進行選擇,繼續選擇功能1,查詢輸入的單詞。以下爲該單詞在文本當中時的狀況。
4.3根據菜單欄提示進行選擇,選擇功能2,查詢輸入單詞的詞頻。以下爲詞頻爲3時的狀況。
4.4根據菜單欄提示進行選擇,選擇功能3,查詢輸入單詞的詞頻。查詢結果被寫入文件result.txt.
設計
boolean flag = false; for(int i = 0; i < word.length; i++) { for(Map.Entry<String,Integer> w : map.entrySet()) { //int count=w.getValue(); if(word[i].equals(w.getKey())) { flag = true; System.out.println("單詞"+w.getKey() + "出現" + w.getValue()+"次"); sum=(float)(w.getValue())/50; for(int j = 0;j < sum; j++){ System.out.print("▓"); } } } if(!flag) System.out.println("單詞"+word[i] + "不存在,請從新輸入!"); } }
對於軟件開發的模塊化我也是在此次項目的完成過程當中才體會到的,我在網上查閱了相關資料。
模塊化是指:
1. 將大的個體分解成多個小的個體;
實現這一步是我經過需求分析來總結用戶想要的功能,將詞頻統計軟件劃分爲一個一個小的功能來設計。
2. 獨立的、閉合的去分析處理這個個體和其與外界的關係。
實現這一步是將每個功能單獨拿出來分析,爲它進行實現該功能的具體算法設計,除此以外還要有主函數來調用這些函數以實現這些功能。
3.將這些個體組織、集成爲一個新的大的個體;
實現這一步則須要將每個功能函數和主函數相結合,構成一個主體便可。
4. 持續的、迭代的進行這個過程直至解決問題。