项目 | 内容 |
---|---|
做业所属课程 | http://www.cnblogs.com/nwnu-daizh/ |
做业要求 | https://www.cnblogs.com/nwnu-daizh/p/10569690.html/ |
课程学习目标 | 熟悉软件开发总体流程,提高自身能力 |
帮助实现目标 | 第一次体验一个完整的工程 |
- 点评内容:经过阅读你的博文,我认为你的博文的结构不是很清晰,没有充分利用Markdown编辑的特色,我建议能够将每一个模块用加粗字体或副标题加以区分。博客内容很简练。经过浏览你的PSP,发现你的计划时间与实际运行时间几乎相同,我认为你的计划作得很到位,可是看了实际的代码运行结果,我发现你的不少功能都没有实现,但愿下次能够继续努力,完善项目。
- 点评心得:阅读完这位同窗的博文,我认为她对时间的把控能力很好,PSP表能够看出是一个很会计划时间的人,这一点值得我去学习。可是她的部分任务没有完善,但愿此次的结对项目对她有所帮助,也但愿经过此次的结对项目,相互学习,共同进步。
【 源码地址 】git
- (1)实验2要求的功能;
- (2)单词频数可视化柱状图:
- (3)统计该文本行数及字符数;
- (4)各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
- (5)可处理任意用户导入的任意英文文本;
- (6)人机交互界面要求GUI界面(WEB页面、APP页面均可);
- (7)附加分功能:统计文本中除冠词、代词、介词以外的高频词;
- (8)附加分功能:统计前10个两个单词组成的词组频率。
项目主要包含三个类,一个是主函数Main,一个是统计单词的类SortResult,还有一个是绘制柱状图paint。
- 主函数Main中实现图形用户界面,实现各个功能。输入框3个,分别是原文本文件的文件名(采用相对路径),想要查找的一个或多个单词及绘制柱状图,想要查找的N个高频词及其词频数。两个按钮,分别是“肯定”和“取消”。因为两个查找在同一个面板,防止出现冲突,若两个输入框均有输入,则实现第一个输入框的功能。点击肯定后,直接将字典顺序输出到result.txt文本中,而且实现相应功能。
- SortResult中将文本中的每一个单词按照字典顺序将单词及词频数输出到result.txt文本文件中。
- paint中对柱状图美化。
int i,j; for(j=0;j<List.size();j++) { for(i=0;i<Eword.size();i++) { if(Eword.get(i).equals(List.get(j).getKey())) { List.remove(j); break; } } }
Map<String, Integer> map1=new LinkedHashMap<String, Integer>(); for(Entry<String,Integer> m: map) { for(i=0;i<Eword.size();i++) { if(Eword.get(i).equals(m.getKey())) { break; } } if(i>=Eword.size()) { map1.put(m.getKey(), m.getValue()); } } Set<Entry<String,Integer>> Map1=map1.entrySet(); LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(Map1); //排序 Collections.sort(List, new Comparator<Entry<String,Integer>>() { @Override public int compare(Entry<String, Integer> wk1, Entry<String, Integer> wk2) { return wk1.getKey().compareTo(wk2.getKey()); } });
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); }
for(i=0; i<input.length; i++) { for(Entry<String, Integer> entry : wordsStatistics.entrySet()) { if(input[i].equals(entry.getKey())) { map.put(entry.getKey(), entry.getValue()); print2+=entry.getKey()+":\n"; for(int j=0;j<entry.getValue()/100;j++) print2+="*"; print2+="\n"; print += entry.getKey() + ":" + entry.getValue()+" "; dataset.addValue(entry.getValue(),entry.getKey(),entry.getValue()); break; } } } long end = System.currentTimeMillis(); JOptionPane.showConfirmDialog(null, print+print2+"\n运行时长"+(end-start)+"ms","结果",JOptionPane.DEFAULT_OPTION); JFreeChart chart = ChartFactory.createBarChart3D( "词频统计", // 图表标题 "单词", // 文件夹轴的显示标签 "数量", // 数值轴的显示标签 dataset,//.dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL连接 ); paint p = new paint(chart); JFrame frame=new JFrame("Java数据统计图"); frame.setLayout(new GridLayout(2,2,10,10)); frame.add(p.getChartPanel()); //加入柱形图 frame.setBounds(50, 50, 800, 600); frame.setVisible(true); }
while((read = br.readLine()) != null) { linenumber++;//行数 charnumber+=read.length();//字符数 for (String w:read.split("[^a-zA-Z]")) { if(w.length()!= 0) { list.add(w); } } }
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 |
此次的合做让我切身感觉到结对项目的过程,让我体会到了交流沟通对结对合做的重要性,有时候两我的的想法会发生分歧,很好的沟通会使咱们的效率变得更高。
分工明确会使项目进展较快,不会在同一个问题上浪费时间。遇到问题时,会相互沟通交流,解决问题。github