201671030101白龍飛《英文文本統計分析》結對項目報告

項目 內容
這個做業屬於哪一個課程 http://www.cnblogs.com/nwnu-daizh/
這個做業的要求在哪裏 http://www.javashuo.com/article/p-bjcswxqf-ma.html
課程學習目標 熟悉軟件開發總體流程,提高自身能力
本次做業在哪一個具體方面幫助咱們實現目標 第一次體驗一個完整的工程

任務1:兩兩自由結對,對結對方的《實驗二 軟件工程我的項目》的項目成果進行評價,具體要求以下:

對項目博文做業進行閱讀並進行評論,評論要點包括:博文結構、博文內容、博文結構與PSP中「任務內容」列的關係、PSP中「計劃共完成須要的時間」與「實際完成須要的時間」兩列數據的差別化分析與緣由探究。
克隆結對方項目源碼到本地機器,閱讀並測試運行代碼,結合運行結果評論程序代碼,評論要點包括:軟件結構、代碼規範、功能實現、人機交互等。
嘗試利用github中的Fork、Clone、Push、Pull request、Merge pull request對結對方倉庫中的源碼進行合做修改。html

項目 內容
點評博客地址 http://www.javashuo.com/article/p-kqhmcvay-q.html
GitHub源碼地址 https://github.com/Hanyy2019/test2
點評內容 在讀完你的博文後,首先在博文排版方面,你的結構清晰,內容明瞭,而且使用了博文簡要內容信息表,這點作的很不錯,值得我學習。在博文結構方面,模塊化的劃分讓人讀起來很舒服。在博文內容方面,你作的是英文文本詞頻統計,根據老師所給的要求,你基本實現了查詢指定單詞,查詢前K個高頻單詞,將全部單詞按字典順序輸出到文本中。可是,在繪製柱狀圖方面,你能夠再學習學習,這部分其實很簡單。博文結構與PSP中「任務內容」列的關係:你的博文結構和PSP任務內容列的關係比較緊密,基本按照PSP任務內容列的順序編寫了博文. PSP中「計劃共完成須要的時間」與「實際完成須要的時間」兩列數據的差別化分析與緣由探究:經過對比博文中計劃完成時間和實際完成時間,發現實際完成時間比計劃完成時間超出不少,看到你在下面總結了本身在PSP過程當中的困難,主要在於編程能力不強,在開發過程當中花費了較多的時間。其餘的流程花費時間基本和計劃時間差異不大,可是也超出了一些時間,多是因爲初次按照PSP流程進行軟件開發,因此對時間的把握不充分。最後我在GitHub上下載了你的源碼,編譯運行後,和博文內容貼合,代碼比較規範,基本實現了老師所要求的功能,可是柱狀圖部分沒有實現。
點評心得 經過閱讀點評別人的博文,我瞭解到了別人在編寫代碼和博文的優勢,好比結構化的設計,以及圖片大小的調整。

任務2:採用兩人合做方式,設計開發一個英文文本統計分析軟件,使之具備如下功能:

(1)實驗2要求的功能;git

(2)單詞頻數可視化柱狀圖要求是如下樣式:

(3)統計該文本行數及字符數;github

(4)各類統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);編程

(5)可處理任意用戶導入的任意英文文本;模塊化

(6)人機交互界面要求GUI界面(WEB頁面、APP頁面均可);學習

(7)附加分功能:統計文本中除冠詞、代詞、介詞以外的高頻詞;測試

(8)附加分功能:統計前10個兩個單詞組成的詞組頻率。編碼

GitHub源碼

需求分析

  • 實驗2要求的功能;設計

  • 繪製單詞頻數可視化柱狀圖;3d

  • 統計該文本行數及字符數;

  • 各類統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);

  • 可處理任意用戶導入的任意英文文本;

  • 人機交互界面要求GUI界面(WEB頁面、APP頁面均可);

軟件設計

核心功能代碼展現

柱狀圖的實現

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((30000-1500*i)+"個", 8, topMargin+rulerStep*i);//繪製Y軸上的數據
        }
        g2.setColor(Color.darkGray);
        int m=0;
        for (Entry<String, Integer> entry : map.entrySet()) 
        { 
            int value =entry.getValue();
            int step = (m+1)*40;//設置每隔柱形圖的水平間隔爲40
            g2.fillRoundRect(leftMargin+step*2,Height-value/50-5, 40, value, 40, 10);//繪製每一個柱狀條
            g2.drawString(entry.getKey(), leftMargin+step*2, Height-value/50-5);    //標識每一個柱狀條       
            m++;
         } 
         
    }

輸出到文件

Map<String,Integer> Map = new LinkedHashMap<String, Integer>(); 
     /**按字典順序排序*/
    void Sort(Map<String, Integer> map) 
    {  
       Set<Entry<String,Integer>> m= map.entrySet();   
       LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(m);
    
           Collections.sort(List, new Comparator<Entry<String,Integer>>() 
           {     
               public int compare(Entry<String, Integer> a,  Entry<String, Integer> b) 
               {  
                   return a.getKey().compareTo(b.getKey());  
              }     
           });  
       for (Entry<String,Integer> entry: List) 
       {  
           Map.put(entry.getKey(), entry.getValue());  
       }  
   } 
    /**寫入文件*/
     void PrintToF(Map<String, Integer> map)throws IOException 
     {  
            long start = System.currentTimeMillis();
            Sort(map);
            File file = new File("result.txt");
            FileWriter f = new FileWriter(file.getAbsoluteFile());
            for (Entry<String,Integer> w: Map.entrySet()) 
            {
                f.write(w.getKey() + "/" + w.getValue()+"     ");
            }
            f.close();
            JOptionPane.showConfirmDialog(null,"所用時間:"+(System.currentTimeMillis() - start)+"ms","結果",JOptionPane.DEFAULT_OPTION);
     }

程序運行

主頁面

高頻詞

柱狀圖顯示

單詞、行數

生成result文件

結對過程

PSP

PSP2.1 任務內容 計劃共完成須要的時間(min) 實際完成須要的時間(min)
Planning 計劃 8 12
Estimate 估計這個任務須要多少時間,並規劃大體工做步驟 8 10
Development 開發 120 150
Analysis 需求分析 (包括學習新技術) 10 15
Design Spec 生成設計文檔 5 5
Design Review 設計複審 (和同事審覈設計文檔) 10 10
Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 10 10
Design 具體設計 20 25
Coding 具體編碼 120 150
Code Review 代碼複審 20 30
Test 測試(自我測試,修改代碼,提交修改) 10 20
Reporting 報告 20 20
Test Report 測試報告 10 10
Size Measurement 計算工做量 10 15
Postmortem & Process Improvement Plan 過後總結 ,並提出過程改進計劃 15 30

總結

我認爲兩人合做真的可以帶來1+1>2的效果,首先一我的總有累的時候,這時候出錯的機率就會大大增長,而結對編程就避免了這種低級錯誤。

相關文章
相關標籤/搜索