信息表:
项目 | 内容 |
---|---|
作业所属课程 | |
作业要求 | |
课程学习目标 | 熟悉软件开发整体流程,提升自身能力 |
帮助实现目标 | 第一次体验一个完整的工程 |
任务1
【 】
【 】
- 点评内容:通过阅读你的博文,我认为你的博文的结构不是很清晰,没有充分利用Markdown编辑的特点,我建议可以将每个模块用加粗字体或副标题加以区分。博客内容很简练。通过浏览你的PSP,发现你的计划时间与实际运行时间几乎相同,我认为你的计划做得很到位,但是看了实际的代码运行结果,我发现你的很多功能都没有实现,希望下次可以继续努力,完善项目。
- 点评心得:阅读完这位同学的博文,我认为她对时间的把控能力很好,PSP表可以看出是一个很会计划时间的人,这一点值得我去学习。但是她的部分任务没有完善,希望这次的结对项目对她有所帮助,也希望通过这次的结对项目,相互学习,共同进步。
任务2
【 】
1.需求分析
- (1)实验2要求的功能;
- (2)单词频数可视化柱状图:
- (3)统计该文本行数及字符数;
- (4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
- (5)可处理任意用户导入的任意英文文本;
- (6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
- (7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
- (8)附加分功能:统计前10个两个单词组成的词组频率。
2.软件设计
项目主要包含三个类,一个是主函数Main,一个是统计单词的类SortResult,还有一个是绘制柱状图paint。
- 主函数Main中实现图形用户界面,实现各个功能。输入框3个,分别是原文本文件的文件名(采用相对路径),想要查找的一个或多个单词及绘制柱状图,想要查找的N个高频词及其词频数。两个按钮,分别是“确定”和“取消”。由于两个查找在同一个面板,防止出现冲突,若两个输入框均有输入,则实现第一个输入框的功能。点击确定后,直接将字典顺序输出到result.txt文本中,并且实现相应功能。
- SortResult中将文本中的每个单词按照字典顺序将单词及词频数输出到result.txt文本文件中。
- paint中对柱状图美化。
3.核心功能代码展示
除去冠词、代词、介词两种方法
直接删除
int i,j; for(j=0;j
新建一个Map存放删选后的单词映射:
Mapmap1=new LinkedHashMap (); for(Entry m: map) { for(i=0;i =Eword.size()) { map1.put(m.getKey(), m.getValue()); } } Set > Map1=map1.entrySet(); LinkedList > List = new LinkedList >(Map1); //排序 Collections.sort(List, new Comparator >() { @Override public int compare(Entry wk1, Entry wk2) { return wk1.getKey().compareTo(wk2.getKey()); } });
原本的代码实现在paint中画图显示,但是为了传参,new main()后显示出柱状图后会跳出Main函数的主框架
public paint(){ JFreeChart chart = ChartFactory.createBarChart3D( "词频统计", "单词", "数量", new Main().dataset, PlotOrientation.VERTICAL, true, false, false ); CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象 CategoryAxis domainAxis=plot.getDomainAxis(); //水平底部列表 domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14)); //水平底部标题 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); }
为了解决问题,将建立图表信息的代码写入在main中,统计用户输入单词词频及绘制柱状图
for(i=0; ientry : wordsStatistics.entrySet()) { if(input[i].equals(entry.getKey())) { map.put(entry.getKey(), entry.getValue()); print2+=entry.getKey()+":\n"; for(int j=0;j
统计行数、列数
while((read = br.readLine()) != null) { linenumber++;//行数 charnumber+=read.length();//字符数 for (String w:read.split("[^a-zA-Z]")) { if(w.length()!= 0) { list.add(w); } } }
4.程序运行
程序运行前添加自定义jar包Libraries:
统计用户输入单词的词频,显示系统运行时间:
生成相应的柱状图:
若不退出程序继续查看其它单词词频,则柱状图将相应的单词柱状图添加到原有的图中:
要除去的冠词、代词、介词:
统计用户输入的n个文本中除冠词、代词、介词之外的高频词并显示运行时间:
统计该文本行数、字符数及每个单词和相应的词频,并将其写入到文件中,生成result.txt文件:
5.结对过程:
6.PSP
PSP2.1 | 任务内容 | 计划完成时间(min) | 实际完成时间(min) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
.Estimate | .估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 20 |
Development | 开发 | 700 | 9600 |
.Analysis | .需求分析(包括学习新技术) | 30 | 30 |
.Design Spec | .生成设计文档 | 35 | 30 |
.Design Review | .设计复审 | 10 | 10 |
.Coding Standard | .代码规范 | 5 | 5 |
.Design | .具体设计 | 60 | 60 |
.Coding | .具体编码 | 480 | 720 |
.Code Review | .代码复审 | 60 | 80 |
.test | .测试 | 20 | 25 |
Reporting | 报告 | 120 | 120 |
.Test Report | .测试报告 | 100 | 100 |
.Size Measurement | .计算工作量 | 20 | 20 |
.Postmortem & Process Improvement Plan | .事后总结,病提出过程改进计划 | 28 | 20 |
7.小结感受
这次的合作让我切身感受到结对项目的过程,让我体会到了交流沟通对结对合作的重要性,有时候两个人的想法会发生分歧,很好的沟通会使我们的效率变得更高。
分工明确会使项目进展较快,不会在同一个问题上浪费时间。遇到问题时,会相互沟通交流,解决问题。