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.总结

本次项目的重难点就是图形用户界面,在功能部分咱们实现的还算是顺利。可是到了作界面的时候就遇到了很大的困难,虽然以前学习过,大部分方法都忘记了,在编写代码的过程当中查阅了书籍。此次项目是结对完成的完成的还能够,在两我的的合做中也体会到了交流的重要性,咱们合做的很顺利。但愿能够在编程方面更进一步。
相关文章
相关标签/搜索