201671030112 李曉雪 《英文文本統計分析》結對項目報告

項目 內容
做業所屬課程 http://www.cnblogs.com/nwnu-daizh/
做業要求 http://www.javashuo.com/article/p-bjcswxqf-ma.html
課程學習目標 體驗軟件項目開發中的兩人合做,練習結對編程(Pair programming)。掌握Github上增量發佈軟件的操做方法。
在哪一個具體方面幫助咱們實現目標 可以在同窗之間更好的進行合做與交流
本次項目源代碼 https://github.com/Lxiaoxue/Work

任務一

項目 內容
點評做業的博客 http://www.javashuo.com/article/p-thsjdlbp-gx.html
github連接地址 https://github.com/SHL0/Word-Count
博文評論內容: 總體來講寫的挺好,功能方面也都基本實現了。在按字典排序寫入result.txt文件功能實現的不錯,寫入的很整齊。可是在查詢單詞這個功上還能夠進行優化,連續輸入不一樣的單詞一次性查詢。還有就是能夠學習一下在博文中如何使用表格。繼續努力! 在代碼方面,代碼寫的很規範,能容易理解,每一個類和函數都有註釋,是值得學習的地方。但願繼續努力。
點評心得: 在看了她的博文以後,相比與本身在有些方面仍是頗有學習的地方,好比在寫入result文件中,寫入的很整齊。應該學習。 在看了她的代碼以後,相比與本身 還有學習的地方,有些代碼寫註釋很重要,方便之後的學習。

任務二

結對項目源代碼html

a.需求分析

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

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

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

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

(5)可處理任意用戶導入的任意英文文本;函數

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

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

b.軟件設計

1.首先輸入任意正確的文件名。進入功能選擇,點擊每一個功能進行測試。

  2.本次項目須要用到圖形用戶界面。在Mianclass類中編寫,設置面板,動做監聽。

  3.在柱狀圖和排序編寫到不一樣的類中進行調用。

c.核心功能代碼展現

界面按鈕監聽及輸入文件名進行獲取時間。測試

surebt.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event){
         if(event.getSource()==surebt){
        JOptionPane.showConfirmDialog(null, "是否退出程序?","查找結果",JOptionPane.DEFAULT_OPTION);
        frame1.dispose();//銷燬當前界面
        }
     }
    });
   okbt.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
              if(e.getSource()==okbt) {
             String src = t1.getText();
              File file =new File(src);
             FileReader reader = null;
             try {
                    reader = new FileReader(src);
                  } catch (FileNotFoundException e1) {
                     // TODO Auto-generated catch block
                     e1.printStackTrace();
                    }
                      if(!file.exists())
                        {
                          JOptionPane.showConfirmDialog(null, "請輸入正確的文件名","查找結果",JOptionPane.DEFAULT_OPTION);
                        }
                      BufferedReader br = new BufferedReader(reader);
                      String readline = null;
                        int row=0;
                        int wordnumber=0;
                        long startTime = System.currentTimeMillis();    //獲取開始時間    
                        ArrayList<String> lists = new ArrayList<String>(); 
                        try {
                            while ((readline = br.readLine()) != null)
                            {
                                String[] wordsArray=readline.split("[^a-zA-Z]");
                                for(String word :wordsArray) 
                                {
                                    if(word.length() != 0)
                                    {  
                                        word=word.toLowerCase();
                                        lists.add(word);  
                                    }
                                }
                                row++;  
                            }
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                          System.out.println(row); 
                        try {
                            br.close();
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                                               wordMap=new HashMap<String,Integer>();
                              for (String l : lists) 
                              {  
                                if(wordMap.get(l) != null)
                                {  
                                    wordMap.put(l,wordMap.get(l) + 1);  
                                }else
                                {  
                                    wordMap.put(l,1);  
                                }  
                                wordnumber++;
                            }
                              long endTime = System.currentTimeMillis();    //獲取結束時間  
                              JOptionPane.showConfirmDialog(t1, "文本統計完成!"+"\n 文本統計所消耗時間:"+ (endTime - startTime)+"\n 文本行數有:"+row+" 單詞數:"+wordnumber,"結果",JOptionPane.DEFAULT_OPTION);
                  }
              }
          });

柱狀圖字體

public class Graph extends Wordcount{
    ChartPanel frame1;
    public  Graph(Map<String, Integer> Map1,String s1){

        DefaultCategoryDataset dataset = getDataSet(Map1,s1);
        JFreeChart chart = ChartFactory.createBarChart3D(
                             "單詞頻數", // 圖表標題
                            " ", // 目錄軸的顯示標籤
                          //  "數量", // 數值軸的顯示標籤
                            "單詞表",
                            dataset, // 數據集
                            PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
                            true,           // 是否顯示圖例(對於簡單的柱狀圖必須是false)
                            false,          // 是否生成工具
                            false           // 是否生成URL連接
                            );
        
        //從這裏開始
        CategoryPlot plot=chart.getCategoryPlot();//獲取圖表區域對象
       CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
         domainAxis.setTickLabelFont(new Font("宋體",Font.BOLD,12));  //垂直標題
         ValueAxis rangeAxis=plot.getRangeAxis();//獲取柱狀
         rangeAxis.setLabelFont(new Font("黑體",Font.BOLD,15));
          chart.getLegend().setItemFont(new Font("黑體", Font.BOLD, 15));
          chart.getTitle().setFont(new Font("宋體",Font.BOLD,20));//設置標題字體
         
         frame1=new ChartPanel(chart,true);        //這裏也能夠用chartFrame,能夠直接生成一個獨立的Frame
         
    }     
        
} 
    public DefaultCategoryDataset getDataSet(Map<String, Integer> Map,String s) {

        Map<String,Integer> Map2 = new TreeMap<String, Integer>(); 
        String[] word= s.split(",");
        for(int i=0; i<word.length; i++) {
            for(Entry<String,Integer> entry : Map.entrySet()) { 
                if(word[i].equals(entry.getKey()))
                {
                     Map2.put(entry.getKey(), entry.getValue());
                     break;
                }
            } 
        }
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        Set<Entry<String,Integer>> mapEntrySet = Map2.entrySet();
        for(Entry<String,Integer> entry : Map2.entrySet()) {
            Integer value=entry.getValue();
            dataset.setValue((Number)value,entry.getKey(),entry.getKey());
        }
        return dataset;     
        
    }   
    public ChartPanel getChartPanel(){
        return frame1;
        
    }
}

d.程序運行

1.運行程序

2.輸入任意文本

(若輸入的文件名不正確)

(輸入正確的文件名)

3.輸入任意單詞,查詢詞頻。

4.查詢高頻詞。

5.顯示柱狀圖。

6.按字典排序寫如result.txt中。

7.附加功能1,查詢除代詞介詞冠詞以外的單詞詞頻。

8.退出。

e.結對過程描述

在一塊兒合做的時候也會有不少分歧,須要討論和嘗試不少次話費許多的時間。在遇到困難時咱們會首先進行查閱書籍,而後一塊兒討論解決方法。嘗試各自的方法,選擇最好的方法。

f.PSP展現

任務內容 計劃完成須要的時間(min) 實際完成須要的時間(main)
計劃 30 25
估計這個任務須要多少時間,並規劃大體工做步驟 40 30
開發 240 300
需求分析 30 25
生成設計文檔 60 50
設計複審 (和同窗審覈設計文檔) 20 25
代碼規範 (爲目前的開發制定合適的規範) 10 15
具體設計 30 30
具體編碼 300 350
代碼複審 20 25
測試(自我測試,修改代碼,提交修改) 20 15
報告 30 45
測試報告 30 25
計算工做量 20 15
過後總結 ,並提出過程改進計劃 60 45

g.總結

本次項目的重難點就是圖形用戶界面,在功能部分咱們實現的還算是順利。可是到了作界面的時候就遇到了很大的困難,雖然以前學習過,大部分方法都忘記了,在編寫代碼的過程當中查閱了書籍。此次項目是結對完成的完成的還能夠,在兩我的的合做中也體會到了交流的重要性,咱們合做的很順利。但願能夠在編程方面更進一步。
相關文章
相關標籤/搜索