做業要求 |
實驗二 軟件工程我的項目 |
課程目標 |
經過學習這門課程,深刻了解軟件開發的標準過程,從軟件生命週期的8個階段分析各個階段的開發任務,摒棄以往開發軟件的方法。 |
做業意義 |
這次做業能幫助我掌握軟件項目我的開發流程和Github上發佈軟件項目的操做方法 |
需求分析(根據做業要求中給出的進行分析)
- 程序能夠讀入任意英文文本文件,能讀取容納10萬詞以上的文章,程序須要很壯健。
- 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,可顯示對應單詞在文本中出現的次數和柱狀圖,由柱狀圖顯示單詞出現的頻率的高低。
- 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
- 統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
功能設計
- 讀入讀出文件功能(將文件進行讀取,存放),這個是對於第一條和第四條需求所須要的一部分功能。
- 用戶輸入功能(用戶輸入想要查詢的單詞,以及查詢高頻單詞的個數),這個是對於第二條和第三條需求所須要的一部分功能。
- 詞頻統計功能,這個是對於第二條、第三條和第四條需求所須要的一部分功能。
- 排序功能(降序排序和按字典順序排序),這個是針對第三條、第四條需求和所須要的一部分功能。
- 顯示功能(顯示柱狀圖,顯示前k個高頻單詞的詞頻,顯示指定單詞出現的次數),這個是對於第二條和第三條需求所須要的一部分功能。
設計實現
該程序共有四個類:
- 包含主函數main的主類:Test.java,主要就是控制整個程序流程,讀入文本文件,統計單詞出現的次數,而後分別調用不一樣的類的方法去實現功能,對用戶輸入的單詞進行查詢詞頻,而且由查詢出的數據進行柱狀圖的表示。
- 指定單詞詞頻統計功能類: Wordcount.java,對用戶輸入的單詞進行處理,查詢單詞出現的次數。
- 高頻詞統計功能類:Highwordcount.java,讀取用戶輸入的k值,對整個文本文件進行降序排序,輸出前k個單詞和詞頻。
- 單詞及詞頻數按字典順序輸出:Wordout.java,獲取整個文檔,將單詞及詞頻數按字典順序輸出到result.txt中,保存。
測試運行
測試功能一截圖:
![](http://static.javashuo.com/static/loading.gif)
測試功能二截圖:
![](http://static.javashuo.com/static/loading.gif)
測試功能三截圖:
![](http://static.javashuo.com/static/loading.gif)
測試功能四截圖:
![](http://static.javashuo.com/static/loading.gif)
代碼
- 我爲何要粘貼這段代碼,由於這段代碼編寫過程當中查閱了不少資料,因爲資料類型繁多,就不一一列舉了。這段代碼是關於柱狀圖這個需求的。Java中柱狀圖的畫法有不少種,能夠在導入jar包的基礎上,調用方法去構造,也能夠經過重寫JFrame中的paint()方法來進行構造,每種方法都是可行的,看你本身的選擇,這段代碼中涉及在Java中咱們可能不經常使用的一些方法,對象,我也經過寫註釋的方法來進行了標註。
public void paint(Graphics g){
int Width = getWidth();
int Height = getHeight();
int leftMargin = 50;//柱形圖左邊界
int topMargin = 50;//柱形圖上邊界
Graphics2D g2 = (Graphics2D) g;
int ruler = Height-topMargin;
int rulerStep = ruler/20;//將當前的高度評分爲20個單位
g2.setColor(Color.WHITE);//繪製白色背景
g2.fillRect(0, 0, Width, Height);//繪製矩形圖
g2.setColor(Color.LIGHT_GRAY);
for(int i=0;i<rulerStep;i++){
g2.drawString((400-20*i)+"個", 8, topMargin+rulerStep*i);//繪製Y軸上的數據
}
g2.setColor(Color.PINK);
int m=0;
for(int i = 0;i<wordCount.length;i++){
int value = wordsCount.get(wordCount[i]);
int step = (m+1)*40;//設置每隔柱形圖的水平間隔爲40
g2.fillRoundRect(leftMargin+step*2,Height-value, 40, value, 40, 10);//繪製每一個柱狀條
g2.drawString(wordCount[i], leftMargin+step*2, Height-value-5); //標識每一個柱狀條
m++;
}
}
總結
- 在進行需求分析時,將整個程序按照功能劃分爲若干小程序模塊,每一個小程序模塊完成一個肯定的功能,並在這些模塊之間創建了必要的聯繫,經過每一個模塊的互相協做完成整個程序功能,其次採用了自頂向下的方法,將問題劃分爲幾個部分,而後再將各個部分再進行細化,直到分解爲較好解決問題爲止。這樣作的目的是爲了下降程序複雜度,使程序設計、調試和維護等操做簡單化,在後期的開發過程當中遇到了不少問題,因爲每一個模塊的功能相對獨立,因此改起來也沒有很麻煩。
PSP
Planning |
計劃 |
15 |
15 |
· Estimate |
· 估計這個任務須要多少時間,並規劃大體工做步驟 |
15 |
15 |
Development |
開發 |
146 |
218 |
·· Analysis |
需求分析 (包括學習新技術) |
15 |
10 |
· Design Spec |
· 生成設計文檔 |
15 |
15 |
· Design Review |
· 設計複審 (和同事審覈設計文檔) |
3 |
5 |
· Coding Standard |
代碼規範 (爲目前的開發制定合適的規範) |
3 |
3 |
· Design |
具體設計 |
20 |
25 |
· Coding |
具體編碼 |
50 |
120 |
· Code Review |
· 代碼複審 |
15 |
20 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
25 |
20 |
Reporting |
報告 |
25 |
30 |
·· Test Report |
· 測試報告 |
10 |
15 |
· Size Measurement |
計算工做量 |
5 |
5 |
· Postmortem & Process Improvement Plan |
· 過後總結 ,並提出過程改進計劃 |
10 |
10 |
分享