201671030112 李晓雪 《英文文本统计分析》结对项目报告

项目 内容
作业所属课程 http://www.cnblogs.com/nwnu-daizh/
作业要求 https://www.cnblogs.com/nwnu-daizh/p/10569690.html
课程学习目标 体验软件项目开发中的两人合作,练习结对编程(Pair programming)。掌握Github上增量发布软件的操作方法。
在哪个具体方面帮助我们实现目标 能够在同学之间更好的进行合作与交流
本次项目源代码 https://github.com/Lxiaoxue/Work

任务一

项目 内容
点评作业的博客 https://www.cnblogs.com/shl0/p/10556765.html
github链接地址 https://github.com/SHL0/Word-Count
博文评论内容: 整体来说写的挺好,功能方面也都基本实现了。在按字典排序写入result.txt文件功能实现的不错,写入的很整齐。但是在查询单词这个功上还可以进行优化,连续输入不同的单词一次性查询。还有就是可以学习一下在博文中如何使用表格。继续努力! 在代码方面,代码写的很规范,能容易理解,每个类和函数都有注释,是值得学习的地方。希望继续努力。
点评心得: 在看了她的博文之后,相比与自己在有些方面还是很有学习的地方,比如在写入result文件中,写入的很整齐。应该学习。 在看了她的代码之后,相比与自己 还有学习的地方,有些代码写注释很重要,方便以后的学习。

任务二

结对项目源代码

a.需求分析

(1)实验2要求的功能;

(2)单词频数可视化柱状图要求是以下样式:

(3)统计该文本行数及字符数;

(4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);

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

   本次项目的重难点就是图形用户界面,在功能部分我们实现的还算是顺利。但是到了做界面的时候就遇到了很大的困难,虽然之前学习过,大部分方法都忘记了,在编写代码的过程中查阅了书籍。这次项目是结对完成的完成的还可以,在两个人的合作中也体会到了交流的重要性,我们合作的很顺利。希望可以在编程方面更进一步。
posted @ 2019-04-02 23:53  若沐_XX  阅读(193)  评论(1编辑  收藏  举报