201671030122杨凡亿《英文文本统计分析》结对项目报告

项目 内容
课程名称 2016级计算机科学与工程学院软件工程(西北师范大学)
作业要求 实验四 软件工程结对项目
课程学习目标 熟悉软件开发整体流程,提升自身能力
具体方面的帮助 第一次体验一个完整的工程


任务一 两两自由结对,对结对方的《实验二 软件工程个人项目》的项目成果进行评价

项目 内容
点评博客 201671030126 赵佳平词频统计软件项目报告
Github github地址
点评内容 博文结构整体很清楚,很简洁。对需求分析做了认真分析,基本完成了各项功能。但在博文排版上有所不足,表格和代码部分尽量不要使用截图;另外可以把所实现功能的截图尽可能详细的写到博文中。在具体代码方面,希望可以把不同的类分开,不要都写在一个java文件里面,这样可以使代码结构更加清晰。希望博主可以不断完善,继续努力。
点评心得 通过阅读结对方的代码,首先感觉到的是我们两个代码风格有很大的不同。其次在思考和解决问题的方法上也有很大的差别。了解了对方的编码习惯,为任务二的开展奠定了一些基础。当然通过阅读也注意的到自己在编码时需要进一步改进的问题。在接下来的结对编程中,会充分听取对方的意见,共同讨论完成本次项目


任务二 采用两人合作方式,设计开发一个英文文本统计分析软件

  • 结对项目源码Github链接地址

  • a.需求分析

    (1)实验2要求的功能;
    
    (2)单词频数可视化柱状图;
    
    (3)统计该文本行数及字符数;
    
    (4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
    
    (5)可处理任意用户导入的任意英文文本;
    
    (6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
    
    (7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
    
  • b.软件设计

    • 类图
    (1) 本次项目主要有三部分构成,登录界面(login)、主界面、主类(Main)。
    
    (2) 高频词的统计在Highword.java中实现,指定单词词频和柱状图在chart.java中实现,其余功能在function.java实现。
    
    (3) 计时功能主要是利用函数System.currentTimeMillis()实现。
    
  • c.核心功能代码展示

    • 单词频数可视化柱状图部分,主要采用外部包jcommon-1.0.23.jar,jfreechart-1.0.19.jar实现。另参考这篇博文完成
       JFreeChart chart = ChartFactory.createBarChart(
               "指定单词的词频柱状图",    //标题
               "",    //x轴名称
               "",    //y轴名称
               dataset,//数据集
               PlotOrientation.VERTICAL,//使用垂直柱状图
               true,//是否使用legend
               false,//是否使用tooltip
               false);   //是否使用url
       
       Font kfont = new Font("宋体", Font.PLAIN, 20);    // 底部   
       Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题   
       // 图片标题   
       chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));   
       // 底部   
       chart.getLegend().setItemFont(kfont);   
       ChartFrame cf = new ChartFrame("词频显示", chart);
       cf.pack();
       cf.setVisible(true);
    
    • 行数和字符数统计。该部分主要是在读入文件的时候进行统计。
    while((temp = br.readLine())!=null)
    {
       stmplength1+=temp.length();//字符数
       String[] str = temp.split("([^a-zA-Z])"); //过滤出只含有字母的
       stmplength++;//行数
       for(int i=0;i<str.length;i++)
       {
    	  String word = str[i].trim();
    	   if(word.length()!=0)    //去除长度为0的行
    	   staff.put(word, staff.getOrDefault(word, 0)+1);
        }
    }
    
    • 除去介词,冠词,代词的高频词汇。该部分的实现是在输出的时候与介词,冠词,代词表进行比对,然后决定是否输出。
    /*该部分主要是通过flag来控制要显示的界面*/
    ok.addActionListener(new ActionListener() {
     		@Override
     		public void actionPerformed(ActionEvent arg0) {
     			// TODO Auto-generated method stub
     			
     			textArea.setText("");
     			
     			long startTime=System.currentTimeMillis();
     			int k=Integer.parseInt(textField.getText().toString());
     			for(int i=0;i<k;i++)//10
     			{
     				boolean ok=false;
     				if(flag)   //flag为true显示正常高频词界面,否则显示除去代词,冠词,介词的界面
     					textArea.append(function.aList.get(i).getKey()+"\t"+function.aList.get(i).getValue()+"\n");
     				else
     				{
     					for(int j=0;j<function.stop.size();j++)
     					{
     						if(function.aList.get(i).getKey().toLowerCase().equals(function.stop.get(j)))
     						{
     							k++;
     							ok=true;
     							break;
     						}
     					}
     					if(!ok)
     						textArea.append(function.aList.get(i).getKey()+"\t"+function.aList.get(i).getValue()+"\n");
     				}
     			}
     			long endTime=System.currentTimeMillis();
     			JOptionPane.showMessageDialog(null, "耗时:"+(endTime-startTime)+"ms");
     		}  
           });
    
  • d.程序运行截图

    • 登录界面:用户名(nwnu),密码(2019)

    • 主界面

    • 点击浏览,选择需要读入的文件,然后点击开始读入

    • 指定单词词频统计及柱状图

    • 前k个高频词统计

    • 前k个高频词统计

    • 统计行数和字符数

    • 附加1:除去代词,介词,冠词的高频词

  • e.结对的过程

    • 在结对过程,我们首先提出自己对某一功能的想法,然后经过讨论决定采用其中的一种实现。采用谁的想法,谁编程。在讨论过程也可能会有新的想法出现,也会很明显的感到自己的有些想法不太好。


  • PSP

任务内容 计划完成时间(min) 实际完成时间(min)
计划 10 8
估计这个任务需要多长时间,并规划大致工作步骤 5 6
开发 110 130
需求分析(包括学习新技术) 8 6
生成设计文档 5 8
设计复审(和同事审核设计文档) 5 4
代码规范(为当前的开发制定合适的规范) 4 3
具体设计 15 10
具体编码 150 200
代码复审 5 6
测试(自我测试、修改代码、提交修改) 15 12
报告 9 5
测试报告 5 3
计算工作量 3 2
事后总结,并提出工程改进计划 5 3


  • 小结

     通过此次项目,体会了结对编程的过程,很大的一个感受是在编码、测试以及复审时能够很容易的发现代码中的一些逻辑错误,相比一个来说编码效率比较高。另外通过这次项目也感受到了编码规范也是很重要的,当对变量随意定义,没有相应注释的时候,读代码非常的耗时。在项目中我们主要是先讨论某个功能怎么实现,充分听取对方的想法,最后用谁的想法,谁编程实现。总之,在此次项目中,彼此配合的还是很友好的,也有很大的收获。在以后的过程中也会注意在此次项目中遇到的问题,不断完善,继续努力。
    
posted @ 2019-04-03 08:57  杨凡亿  阅读(265)  评论(1编辑  收藏  举报