项目 | 内容 |
---|---|
所属科目 | 软件工程http://www.cnblogs.com/nwnu-daizh |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/10569690.html |
课程目标 | 1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。 2)熟练掌握Github上增量发布软件操作方法,参考文章(点击此链接) 3)掌握人机交互界面的实现(如GUI界面实现,WEB页面,APP页面等) |
任务一:博客互评
- 点击博客链接:https://www.cnblogs.com/nwnu-daizh/p/10569690.html
- 点评github链接地址:https://github.com/MLS123456/WordCount
- 点评内容:首先,提交到Github上的项目必须包含src文件夹,你的没有符合要求。还有,功能也暂时未实现全,比如柱状图的实现。还有如果在博客内容上添加用到的类,函数,以及每个函数实现的功能,就更好了。截图欠缺了你result.txt的截图,看到你的此功能已经实现,可以加一下此张截图。代码部分还有待提高,努力。但是,从博文的整体效果来看,还是比较好的,词频的统计,字典排序,输出到Result.txt这些功能都已经实现,但是你的类只有一个,你可以分几个类,分别实现对应功能,然后一个测试类或者主函数类。这样代码结构就比较清晰完美。程序是在控制台输出运行结果,希望在下次结对作业中,能够实现人机交互。加油!
- 评价心得:看到她的博客,同样,我也出现了跟他同样的问题,提交到Github上的项目必须包含src文件夹,没有把每个实现功能的截图都放入博客,我的柱状图也为实现,尝试着写代码去实现此功能,但是程序出错,未能修改成功。希望在这次结对作业中能够尽自己最大的努力去做好此次实验。
任务二:《英文词频统计》结对项目
一、需求分析
- 实验2要求的功能;
- 单词频数可视化柱状图要求是以下样式:
- 统计该文本行数及字符数;
- 各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
- 人机交互界面要求GUI界面(WEB页面、APP页面都可);
附加功能:
1)统计文本中除冠词、代词、介词之外的高频词;
2)统计前10个两个单词组成的词组频率。
二、软件设计:使用类图
1)在本次项目中所用到的类
- ByValueComparator:该类实现次品的比较。
- FileProccessing:用于文件的处理,如文件的上传,显示等。
- WordFrequencyCount:此类实现字频数的统计。
2)在本次项目中所用到的Jsp界面
- FileUpload.jsp:这是此次项目的主界面,用于柱状图的显示,文件的选择,时间的显示等
- FileDownload.jsp:文件上传成功界面,用于显示词频统计的结果。
三、开发工具
操作系统 |
开发工具 |
JDK版本 |
web服务器 |
Web网页设计 |
流程图设计 |
四、核心代码展示
1)词频统计显示在web界面
<% String juge = (String)request.getAttribute("message");
if(!juge.startsWith("Error")) {%>
统计结果:<br />
<%FileReader filePrint = new FileReader("D:\Project\workspace\CountWeb\Result.txt");
BufferedReader br = new BufferedReader(filePrint);
for(int i = 0;i<14;i++){%>
<%=br.readLine()%><br />
<% }
br.close();
filePrint.close();
%>
<br>
<a href="D:ProjectworkspaceCountWebResult.txt">查看Result文件</a>
<%} %>
2)词频比较(高频单词显示)
public class ByValueComparator implements Comparator<Entry<String,Integer>> {
Map<String, Integer> hashmap;
public ByValueComparator(Map<String, Integer> hm) {
this.hashmap = hm;
}
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
// TODO Auto-generated method stub
if (o1.getValue().compareTo(o2.getValue()) == -1) {
return 1;
} else if (o1.getValue().compareTo(o2.getValue()) == 0) {
return o1.getKey().compareTo(o2.getKey());
} else {
return -1;
}
3)上传数据及保存文件
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 检测是否为多媒体上传
if (!ServletFileUpload.isMultipartContent(request)) {
// 如果不是则停止
PrintWriter writer = response.getWriter();
writer.println("文件类型有误: 表单必须包含 enctype=multipart/form-data");
writer.flush();
return;
}
五、运行截图
1.主界面
2.文件上传成功
3.计时上传
4.显示统计结果
5.柱状图显示
6.result.txt文件
7.统计行数显示
六、两人合作
结对对方姓名 |
对方博客链接地址 |
对方github链接地址 |
结对项目过程:
1)项目开发过程照片
2)项目开发过程
在这次结对项目中,两个人做了需求分析,然后使用web编程的方式来实现英文词频的统计。我的结对人马丽莎主要负责前端的设计(jsp)界面的设计,而我负责后台代码的编写,在此次实验中,花费的时间要比上次实验要多。但是这次是结对项目,相对而言,要比个人项目省时省力。
七、psp
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) |
Planning | 计划 | 10 |
Estimate | 估计这个任务需要的时间,并规划大致工作步骤 | 10 |
Development | 开发 | 180 |
Analysis | 需求分析(包括学习新技术) | 6 |
Design Spec | 生成设计文档 | 30 |
Design Review | 设计复审 | 15 |
Coding Standard | 代码规范(为目前的开发制作合适的规范) | 3 |
Design | 具体设计 | 10 |
Coding | 具体编码 | 300 |
Code Review | 代码复审 | 5 |
Test | 测试(自我测试、修改代码,提交修改) | 8 |
Reporting | 报告 | 9 |
Test Report | 测试报告 | 30 |
Size Measurement | 事后总结,并提出过程改进计划 | 5 |
八、总结
此次结对项目是在实验二的基础上增加一些新的功能要求,以及使用人机交互界面的形式展现出来。由于我两对GUI编程都不熟悉,所以,最后使用了web界面的形式来展现。在这次结对项目中,使用了前台跟后台的交互,以及Tomcat的使用。总之,花费了许多时间来完成此次项目的实现。相对于上次个人项目的开发,此次结对项目就相对而言比较省时省力。但与此同时,也取决于两人的合作跟默契程度。 |