(一)需求分析
根据实验二 软件工程个人项目的要求该软件项目的基本功能要求如下:
1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
2.程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
5.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
(二)功能设计
1.读写文件功能:对文件进行读取和存放,这是第一条、第二条、第四条和第五条需求所需要的一部分功能;
2.用户输入功能:用户可以输入想要查询的单词,查询高频单词的个数以及想进行何种操作,这个是对于第三条和第四条需求所需要的一部分功能;
3.词频统计功能:这个是对于第三条、第四条和第五条需求所需要的一部分功能;
4.排序功能:降序排序和按字典顺序排序,这个是针对第四条、第五条需求所需要的一部分功能;
5.显示功能:显示柱状图,显示前k个高频单词的词频,显示指定单词出现的次数,这个是对于第三条和第四条需求所需要的一部分功能
(三)设计实现
该程序共有三个类:
- 包含主函数main的主类:Driver.java:该类用于菜单栏的显示,读入要统计单词的文本文件和对单词进行排序;
- 定义功能的抽象类Functions.java: 该类用于定义功能,具体的实现在Function类,体现面向对象中的多态思想;
- 功能的实现类Function.java:该类用于柱状图的显示,前k个高频单词词频的显示,将单词及词频数按字典顺序输出到result.txt文件中。
(四)测试运行
指定单词词频统计的显示:
前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编程有些遗忘,另一方面是由于自己刚开始不会使用柱状图来进行单词的统计,所以花费了较多的时间。
点击源码,查看全部代码