項目 | 內容 |
---|---|
這個做業屬於哪一個課程? | 2016級計算機科學與工程學院軟件工程(西北師範大學) |
這個做業的要求在哪裏? | 實驗二 軟件工程我的項目 |
我在這個課程的目標是? | 按時完成老師給的任務,複習JAVA相關知識,掌握軟件項目我的開發流程,掌握Github上發佈軟件項目的操做方法 |
Github相關代碼 | 連接 |
按照《構建之法》第2章中2.3所述PSP流程,使用JAVA編程語言,獨立完成一個英文文本詞頻統計的軟件開發。軟件基本功能要求以下:html
-程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。 -程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。 -指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。 -高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。 -統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
1.輸入要讀取的文件,選擇你想進行的功能
2.選擇1:顯示查找的單詞詞頻,單詞間用「/」隔開
3.選擇2:輸出詞頻最高的前N個單詞,按降序輸出
4.選擇3:按字典順序輸出單詞及詞頻到result.txt
5.選擇0:退出git
一共分爲兩個類,一個主函數Main,一個負責排序的sort類。
Main類中main函數實現讀取文件、計算詞頻及顯示菜單,word函數實現顯示輸入須要查詢的單詞並輸出單詞出現次數和柱狀圖。print函數實現調用sort類中的降序排列方法輸出前n個出現頻率最大的單詞及次數。Write函數實現調用sort類中的按字典順序方法將單詞及出現次數輸出到result.txt文件中。
sort類中實現排序的功能,按照選項進行降序排列或者字典順序排列。
程序流程圖:
github
4個選項運行結果顯示:
按字典順序排列輸出到文檔:
編程
BufferedReader a = new BufferedReader(new FileReader(src)); //計算詞頻 Map<String, Integer> map = new TreeMap<String, Integer>(); String value= a.readLine(); while (value!= null) { String[] words = value.split("[^a-zA-Z]"); //處理標點符號 for (int i = 0; i < words.length; i++) { String key = words[i].toLowerCase(); //大寫轉換小寫 if (key.length() > 0) { if (!map.containsKey(key)) { map.put(key, 1); } else { int k = map.get(key)+1;// 若是不是第一次出現,就把k值++ map.put(key, k); } } } value = a.readLine(); }
模塊化程序設計即模塊化設計,屬於計算機編程,簡單地說就是程序的編寫不是開始就逐條錄入計算機語句和指令,而是首先用主程序、子程序、子過程等框架把軟件的主要結構和流程描述出來,並定義和調試好各個框架之間的輸入、輸出連接關係。模塊化設計是綠色設計方法之一,它已經從理念轉變爲較成熟的設計方法。將綠色設計思想與模塊化設計方法結合起來,能夠同時知足產品的功能屬性和環境屬性,一方面能夠縮短產品研發與製造週期,增長產品系列,提升產品質量,快速應對市場變化;另外一方面,能夠減小或消除對環境的不利影響,方便重用、升級、維修和產品廢棄後的拆卸、回收和處理。
其基本思想是將一個大的程序按功能分解成爲一些功能單1、結構清晰、接口簡單、容易理解的功能模塊。在本次項目中要實現的功能大體有四個:排序、計算詞頻輸出相應單詞的次數及柱狀圖、降序輸出詞頻最高的前N個單詞及次數、按字典順序輸出到文檔。若一開始就逐條錄入計算機語句和指令,沒有劃分模塊,後面很容易程序錯亂。因此我按照功能分爲四個模塊,定義好之間的鏈接關係,分別實現後整合起來就方便得多。後續要添加刪除功能也不會牽扯太多。框架
PSP2.1 | 任務內容 | 計劃完成時間(min) | 實際完成時間(min) |
---|---|---|---|
Planning | 計劃 | 15 | 10 |
Estimate | 規劃工做步驟 | 10 | 7 |
Development | 開發 | 120 | 150 |
Analysis | 需求分析 | 10 | 15 |
Design Spec | 生成文檔 | 5 | 10 |
Design Review | 設計複審 | 10 | 5 |
Coding Standard | 代碼規範 | 20 | 15 |
Design | 具體設計 | 15 | 20 |
Coding | 具體編碼 | 120 | 240 |
Code Review | 代碼複審 | 10 | 5 |
Test | 測試 | 20 | 40 |
Reporting | 報告 | 30 | 30 |
Test Report | 測試報告 | 5 | 7 |
Size Measurement | 計算報告量 | 5 | 2 |
Postmortem & Process Improvement Plan | 過後總結 | 8 | 5 |
在實施此次項目的過程當中,實際完成和個人預期設想相差仍是挺大的,具體編碼花費了預期兩倍的時間,仍是由於對JAVA語言掌握不熟練,上機練習不夠,這點在後續實驗中會努力改善。此次試驗我還掌握軟件項目我的開發流程,以及Github上發佈軟件項目的操做方法。感受仍是團隊合做開發項目比較好,遇到問題和不懂的地方能夠幾我的互相探討商量完成,能夠省下不少時間在項目的優化和完善上。編程語言