(一)需求分析html
根据实验二 软件工程我的项目的要求该软件项目的基本功能要求以下:java
1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。git
2.程序须要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。github
3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。编程
4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。模块化
5.统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。函数
(二)功能设计测试
1.读写文件功能:对文件进行读取和存放,这是第一条、第二条、第四条和第五条需求所须要的一部分功能;编码
2.用户输入功能:用户能够输入想要查询的单词,查询高频单词的个数以及想进行何种操做,这个是对于第三条和第四条需求所须要的一部分功能;设计
3.词频统计功能:这个是对于第三条、第四条和第五条需求所须要的一部分功能;
4.排序功能:降序排序和按字典顺序排序,这个是针对第四条、第五条需求所须要的一部分功能;
5.显示功能:显示柱状图,显示前k个高频单词的词频,显示指定单词出现的次数,这个是对于第三条和第四条需求所须要的一部分功能
(三)设计实现
该程序共有三个类:
(四)测试运行
指定单词词频统计的显示:
前k个单词词频及单词的显示:
将单词按字典顺序输出到文件result.txt的显示:
(五)优秀代码片断
在本次试验中,我最大的收获是学会了用柱状图来显示单词出现的次数,起初我认为这个可能没法实现,但后来查找资料,而且借鉴了其余人的经验后,我才知道柱状图竟然能够这样显示,因此之后要尽可能多动手,这样才会学到更多的东西。
public void wordofnumber(ArrayList<Map.Entry<String, Integer>> list) { Scanner sc1 = new Scanner(System.in); System.out.println("各单词的数量以及柱状图以下(一个█表明每一个单词出现400次,注:文章中不存在的单词不会出现)"); System.out.println("请输入你要查询的单词用逗号隔开"); String wordss = sc1.nextLine(); String words[] = wordss.split(","); for (String word : words) { for (Map.Entry<String, Integer> entry : list) { if (word.equals(entry.getKey())) { int number = entry.getValue(); System.out.print(entry.getKey()+" numbers "+entry.getValue()+": "); for (int i = 0; i < number / 400; i++) { System.out.print("█"); } System.out.println(); System.out.println(); break; } } } }
(六)总结
在作本次项目时,我先进行了需求分析,知道了本次项目要进行文件的读写操做,要对文件中的单词进行词频统计和柱状图的显示以及将统计结果输出到文件result.txt中,因此在本次项目中,我建立了三个类,将所要实现的具体功能写入不一样的类中,主类:Driver.java用于菜单栏的显示,读入要统计单词的文本文件和对单词进行排序;定义功能的抽象类Functions.java用于定义功能,具体的实如今Function类,体现面向对象中的多态思想;功能的实现类Function.java用于柱状图的显示,前k个高频单词词频的显示,将单词及词频数按字典顺序输出到result.txt文件中。在整个项目中,每一个类都负责各自的一部分功能,实现了软件的模块化设计。
(七)PSP
任务内容 | 计划完成须要的时间(min) | 实际完成须要的时间(min) |
---|---|---|
计划 | 8 | 5 |
开发 | 80 | 86 |
需求分析 | 10 | 15 |
生成设计文档 | 4 | 5 |
设计复审 | 5 | 7 |
具体设计 | 16 | 20 |
具体编码 | 100 | 120 |
代码复审 | 7 | 6 |
测试 | 15 | 20 |
报告 | 18 | 16 |
过后总结 | 6 | 7 |
从表中能够看出,在具体代码的编写时,我花费了较多的时间,一方面是因为对java编程有些遗忘,另外一方面是因为本身刚开始不会使用柱状图来进行单词的统计,因此花费了较多的时间。
点击源码,查看所有代码