zoukankan      html  css  js  c++  java
  • 201671010404+陈润菊 实验二软件工程项目

    一:需求分析:

     1.使用java代码,对存放在java工程下的Word.txt中的所有单词进行统计。
     2.按照需求,将指定单词统计的结果按照要求的方式显示出来(题目要求按照柱形图的形式显示)。
     3.高频单词的统计功能,输入整数K,按照单词的词频数显示前K个数以及单词。
     4.将1中的统计结果写入到result.txt中。
     5.要求代码健壮,代码简介,代码质量高。
    

    二:功能设计:

     1.基本功能:
             a.首先要实现所有单词的统计,为以后找指定单词的统计奠定基础,便于进行比较。
             b.在将所有单词都已统计的基础上,对出现次数最多的单词进行显示,并显示前k个数。(k为输入的正整数)
             c.在指定单词查找成功后,显示出该单词在文章中的出现次数的柱形图。
             d.将基本功能中的统计出的单词的统计结果写入到result.txt中。
    

    三:设计实现:

          我主要设计了两个类,即Test测试类和WordCount统计词数两个类,Test主要是主测试类,它是程序运行的入口,主要是实现各个功能模块的实现,a.指定单词的查找以及其柱形图的显示。b.高频单词的查找。c.将统计结果存放至result中。其次一个类是Wordcount类,它主要实现方法的封装,便于主测试类对其的调用,加强代码的健壮性。 我主要涉及了缓冲流的使用,以及输入输出函数的频繁使用,以及集合的使用,以及可视化界面的应用。
    

    四:测试运行:

    1.程序运行截图:
    指定单词的查找以及柱形图:

    高频词数的统计:

    将统计好的单词存放至result.txt中:

    五. 粘贴自己觉得比较独特的或满意的代码片段,用博客园正确的代码控件来显示。

                  //高频词数的统计以及显示
    	          public void two(TreeMap<String,Integer> map,int k){
    		       //传入参数k,以及集合map
    		        ArrayList<Map.Entry<String,Integer>>  list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());	//声明集合list	
                             //接口的实现传递给Collections.sort方法      
    		        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){  
    		            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
    		                return o2.getValue() - o1.getValue(); 
    		              }  
    		        }); 
    		      //输出前k个数
    		      for(int i = 0; i<k; i++){  
    		            System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());  
    		        }     
    		    }
    	 
    
    
      原因:我刚开始在进行高频单词统计的时候,遇到了很多的问题,在网上查找了很多关于排序方法以及资料。刚开始想到简单的排序方法,但是有考虑map集合中的元素是以键值对的形式存放,是比较繁琐的,就想到用比较器Comparator,它能对不同类型的对象进行排序,它排序的依据是基本类型,也不用自己实现排序算法,用起来很方便。对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。在i<k的情况下,即显示的个数小于map中单词的总个数,程序正常运行。之前用的HashMap,List等集合比较多,这次用了TreeMap,主要是它本身就有排序的功能,应用在这里是比较方便的。
    

    六. 总结:你设计的程序如何实现软件设计的“模块化”原则。

    我的设计思路:首先,我是以我的Test类为核心,根据老师提出的要求,将其划分成主要的三个模块,根据输入的模块的指定的数字,实现其指定的功能,在WordCount中直接调用已封装好的方法,将各个模块功能封装在另类,减少了代码与代码之间的依赖性和不相关性,提高了代码的独立性,方便以后不会出现修修改改代码的情况,在其他地方应用该功能时,只需要直接调用改方法即可,不需要再修改原码,这样代码会有很强的健壮性和高质量性,便于以后的开发。

    七. 展示PSP:这个环节重要的是让自己看到自己的估计和实际消耗时间,哪个环节耗时最多,哪个环节估计和实践相差巨大?为什么?

    PSP2.1 任务内容 计划共完成需要的时间(min)
    Planning 计划 6
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10
    Development 开发 200
    Analysis 需求分析 (包括学习新技术) 3
    Design Spec 生成设计文档 5
    Design Review 设计复审 (和同学一起审核设计文档) 5
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 3
    Design 具体设计 14
    Coding 具体编码 180
    Code Review 代码复审 6
    Test 测试(自我测试,修改代码,提交修改) 6
    Reporting 报告 10
    Test Report 测试报告 6
    Size Measurement 计算工作量 5
    Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 5

    总结:自己这个项目是计划的很顺利,思路很清晰的。但是在实际开发中是还是遇到了很大的问题,在写柱形图这块的时候,确实遇到很大的问题,包括继承JFrame类,以及Paint中一些方法的使用。还有在高频词统计的时候,对比较器的使用,还是不太熟练的,花费了较多的时间。

    源代码链接地址:https://github.com/runju/WordCount

  • 相关阅读:
    LIKE语句也可以这样写
    a链接触发javascript函数导致innerHTML里的图片无法加载
    引用类型真屌
    网站建设心得
    SPAN
    Go! 环境配置和入门
    linux内核编译
    面试题
    KCMT开源控件之方便简洁的分页控件
    c#中out、ref和params的用法与区别
  • 原文地址:https://www.cnblogs.com/runju/p/10558809.html
Copyright © 2011-2022 走看看