201671030123叶虹《英文文本统计分析》结对项目报告
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 软件工程 |
这个作业的要求在哪里 | 作业链接地址 |
课程学习目标 | 熟悉软件开发整体流程,提升自身能力 |
本次作业在哪个具体方面帮助我们实现目标 | 第一次体验一个完整的工程 |
任务一:给出所点评作业的博客、github链接地址,点评内容和点评心得
1.点评博客
2.Github链接地址
3.点评内容
博主将博文分为七大块展示给读者,使得博文的结构简洁、明了、清晰,让人一目了然。博文内容方面,博主对本次项目的需求进行详细分析,设计相应功能。为完成项目打下基础,为后续工作的顺利进展做铺垫。博客大致做到了老师的要求,但还有改进的空间。博主可以在博文中加入设计流程图,这样可以更加直观地向大家展现你的设计过程与理念。从而充实你的博文内容和增加博文结构的清晰性。PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据在具体编码阶段具有差异性,究其原因还是编程能力仍需提高,加强练习。
在具体代码方面,功能和菜单功能的实现能独立编写,有较好的模块性,但可以分的在细一些,代码的规范性还有待提高,比如你的类名一个是Functions,另一个是Function,这都表示功能,但我想要看相应功能的代码,到底应该看哪个呢,类中有些变量名的定义有些随便。在功能实现方面,能和用户进行一定的交互,词频统计和柱状图显示做的很好,但是向文件写入的顺序是按字母表顺序,不是按词频顺序,希望通过第四次实验我们能够一起完善这部分的代码。
4.点评心得
通过分析对方的博客内容,了解对方博客的编写内容与编写风格。吸取对方的优点,进而完善自己的博客内容。通过研究对方代码,认识到自己的不足。对方在实验二中实现了较多的功能,这是我需要学习的。通过讨论,确定日后项目编写的任务,功能实现,设计内容都有了有一定的想法,为日后完成项目打下基础。通过互相点评,进而了解对方、认识自己,互相学习,互相帮助,争取高效有序的完成实验四。
任务二:英文文本统计分析软件
a.需求分析
通过对项目要求的分析,本次结对项目的需求为:
1.实验2要求的功能,单词频数可视化柱状图用GUI显示;
2.统计该文本行数及字符数;
3.各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
4.可处理任意用户导入的任意英文文本;
5.人机交互界面要求GUI界面(WEB页面、APP页面都可);
6.附加分功能1:统计文本中除冠词、代词、介词之外的高频词;
7.附加分功能2:统计前10个两个单词组成的词组频率
b.软件设计
(1)Main中主要是主菜单和读入文本进行词频统计和对功能的调用及绘制柱状图
(2)OutText实现词及词频数按字典顺序输出到文件result.txt的功能
(3)Test实现统计文本行数和字符数的功能
(4)TopWord实现统计高频词的功能
(5)WordCount实现统计词频个数
(6)各种统计功能均提供计时功能,显示程序统计所消耗时间
c.核心功能代码展示:展示核心功能代码
(1)统计行数和字符数
public void zzz(Map<String, Integer> Map) throws IOException
{
Scanner input=new Scanner(System.in);
System.out.println("请输入路径");
String path=input.next();
long date1=System.currentTimeMillis();
int charNum= 0 ;
int lineNum = 0;
InputStreamReader isr = new InputStreamReader(new FileInputStream(path));
BufferedReader br = new BufferedReader(isr);
while( br.read()!= -1){
String s = br.readLine();
charNum+=s.length();
lineNum ++;
}
isr.close();//关闭
System.out.println("字符数:"+charNum+"行 数:"+lineNum);
long date2=System.currentTimeMillis();
long time=0;
time=date2-date1;
System.out.println("时间:"+time+"ms");
}
(2)将单词及对应的词频排序
public int compare(Entry<String, Integer> ele1, Entry<String, Integer> ele2) {
return ele1.getKey().compareTo(ele2.getKey());
}
});
Map<String,Integer> Map2 = new LinkedHashMap<String, Integer>();
for(Entry<String,Integer> entry: List) {
Map2.put(entry.getKey(), entry.getValue());
}
d. 程序运行:程序运行时每个功能界面截图
(1)统计词频个数
(2)柱形图显示
(3)统计高频词
(4)统计行数、字符数
(5)用户界面
本次结对项目只做出一个界面
e. 描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)
1.互相点评对方的博客,研究代码。总结两人在上次实验中的优势与不足,互相学习,讨论可以改进优化的地方。了解对方代码编写习惯,为合作做铺垫。完成此次结对作业的PSP中的计划时间。
2.对本项目进行需求分析,功能设计等。确定程序的大致框架。
3.进行编程。两人一起完成各功能的设计、编码。由于Java编程能力不足,在编写代码的过程中耗费了大量时间,需要经常上网查找资料。在编程想法上也会常常出现分歧,在编程过程中不断地磨合,共同完成本次项目。
4.完成该项目的PSP填写工作。
5.完成博客编写。
f. 此次结对作业的PSP
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
计划 | 12 | 20 |
规划工作步骤 | 15 | 9 |
开发 | 130 | 130 |
需求分析 | 10 | 12 |
生成设计文档 | 15 | 20 |
设计复审 | 5 | 7 |
代码规范 | 10 | 15 |
具体设计 | 10 | 20 |
具体编码 | 300 | 400 |
代码复审 | 10 | 5 |
测试 | 20 | 15 |
报告 | 30 | 30 |
测试报告 | 5 | 5 |
计算报告量 | 5 | 5 |
事后总结 | 5 | 3 |
g.结对项目总结
通过完成本次结对项目,我们体会到合作编程的魅力,可以更加高效快捷的完成项目。我们都对Java语言不太擅长,但通过合作与努力,还是基本完成了实验要求。在实验过程中,遇到了很多问题,需要我们去查找资料、寻求同学帮助得以解决。两人合作有效提高了工作效率,但在过程中也出现了许多分歧。通过不断地讨论、磨合,寻求一致完成项目。增强了与他人合作的能力