201671010428沙沙:詞頻統計軟件項目報告

課程名稱 2016級計算機科學與工程學院軟件工程(西北師範大學)
做業要求 實驗二 軟件工程我的項目
課程目標 經過學習這門課程,深刻了解軟件開發的標準過程,從軟件生命週期的8個階段分析各個階段的開發任務,摒棄以往開發軟件的方法。
做業意義 這次做業能幫助我掌握軟件項目我的開發流程和Github上發佈軟件項目的操做方法


需求分析(根據做業要求中給出的進行分析)

  •   程序能夠讀入任意英文文本文件,能讀取容納10萬詞以上的文章,程序須要很壯健。
  •   指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,可顯示對應單詞在文本中出現的次數和柱狀圖,由柱狀圖顯示單詞出現的頻率的高低。
  •   高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
  •   統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。

功能設計

  •   讀入讀出文件功能(將文件進行讀取,存放),這個是對於第一條和第四條需求所須要的一部分功能。
  •   用戶輸入功能(用戶輸入想要查詢的單詞,以及查詢高頻單詞的個數),這個是對於第二條和第三條需求所須要的一部分功能。
  •   詞頻統計功能,這個是對於第二條、第三條和第四條需求所須要的一部分功能。
  •   排序功能(降序排序和按字典順序排序),這個是針對第三條、第四條需求和所須要的一部分功能。
  •   顯示功能(顯示柱狀圖,顯示前k個高頻單詞的詞頻,顯示指定單詞出現的次數),這個是對於第二條和第三條需求所須要的一部分功能。


設計實現

該程序共有四個類:

  •   包含主函數main的主類:Test.java,主要就是控制整個程序流程,讀入文本文件,統計單詞出現的次數,而後分別調用不一樣的類的方法去實現功能,對用戶輸入的單詞進行查詢詞頻,而且由查詢出的數據進行柱狀圖的表示。
  •   指定單詞詞頻統計功能類: Wordcount.java,對用戶輸入的單詞進行處理,查詢單詞出現的次數。
  •   高頻詞統計功能類:Highwordcount.java,讀取用戶輸入的k值,對整個文本文件進行降序排序,輸出前k個單詞和詞頻。
  •   單詞及詞頻數按字典順序輸出:Wordout.java,獲取整個文檔,將單詞及詞頻數按字典順序輸出到result.txt中,保存。


測試運行

測試功能一截圖:

測試功能二截圖:

測試功能三截圖:

測試功能四截圖:


代碼

-   我爲何要粘貼這段代碼,由於這段代碼編寫過程當中查閱了不少資料,因爲資料類型繁多,就不一一列舉了。這段代碼是關於柱狀圖這個需求的。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

PSP2.1 任務內容 計劃共完成須要的時間(min) 實際完成須要的時間(min)
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


分享

  •   從表中能夠看出在每一個階段本身預估的時間和實際的時間仍是有必定的差距,對於Java有些內容仍是掌握不夠,基礎不是很紮實,對軟件開發過程的每一個階段還不是很熟悉,致使開發過程較爲困難,可是不論是什麼困難均可以經過不少方式來獲得解決,但願本身能在之後的學習過程當中紮好基礎,在軟件開發過程當中去體會軟件工程的魅力。html

    源代碼能夠點此處查看

相關文章
相關標籤/搜索