WordCount结对项目
合作者:201631062124,201631062423
代码地址:https://gitee.com/yryx/WordCount
作业地址:https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign/homework/2188
代码互审:
关于代码互审有一点需要说明,在之前实现wordcount的基本功能时我使用的是c++语言实现,而周欣则是使用的是java语言实现,所以在进行结对项目的时候我们商量了关于使用那种语言实现接下来的功能,最后我们确定使用java语言进行接下来的功能实现,所以在后面的实现过程中周欣主要负责实现代码,我则是在一旁进行相关的帮助,包括代码问题的解决,功能实现问题的解决以及代码测试。不过在开始扩展功能的实现之前我们还是对周欣之前实现的基本功能的代码进行了简单的审查。
| 代码审查 | 相关问题 | 想法和解决方案 |
| 代码的编码格式,语法,逻辑等相关部分 | 编码格式是否符合规范,语法是否正确,代码逻辑是否正确, | 根据代码规范来检查完成的所有代码是否存在问题 |
| 程序的整体结构,包括类之间的关系 | 类的定义是否符合规范,整体结构是否紧凑完整 | 在进行类的定义之前先参考代码规范和程序流程图 |
| 文件处理部分的处理 | 由于文件的访问存在资源的使用,是否有资源泄漏的问题 | 对所有涉及了文件访问的地方重点检查资源的开闭,是否有资源泄漏的问题 |
结对psp表格:
| PSP阶段 | 预计耗时(分钟) | 实际耗时(分钟) |
| 计划 | 10 | 10 |
| .估计任务所需时间 | 10 | 10 |
| 开发 | 475 | 553 |
| .需求分析 | 5 | 5 |
| .生成设计文档 | 10 | 17 |
| .设计复审 | 10 | 14 |
| .代码规范 | 30 | 46 |
| .具体设计 | 60 | 42 |
| .具体编码 | 180 | 248 |
| .代码复审 | 90 | 66 |
| .测试 | 90 | 115 |
| 报告 | 50 | 59 |
| .测试报告 | 10 | 13 |
| .计算工作量 | 10 | 10 |
| .事后总结 | 30 | 36 |
| 合计 | 535 | 622 |
设计过程:
整个程序一共设计了三个类,分别为test,FileChooser,Execute-Char,其中test类作为主函数所在类,负责整个程序的启动和运行,其中的逻辑负责分析输入的命令,然后再根据命令调用另外两个类中的方法实现对应的功能。FileChooser类中定义了三个方法:rePath(),用于返回输入的文件路径;FileChooser()为该类的构造方法,用于绘制进行文件选择的窗口;actionPerformed(ActionEvent e),用于进行文件的选择。该类的作用就是绘制一个窗口实现文件的选择,然后给出查询结果。Execute-Char类就是所有功能实现的类,其中定义了9个方法,实现了查询总字符数,总单词数,总行数,某个单词出现次数,读取文件,读取总的空行,代码行和注释行,停词表。这些具体的实现方法会在test类中得到调用,从而实现相应功能。
代码说明:
FileChooser类中实现文件选择的代码:
//定义一个文件选择类,用于实现窗口文件选择
public class FileChooser extends JFrame implements ActionListener{
JButton open=null;
String path;
//绘制文件选择框
public FileChooser(){
open=new JButton("open");
this.add(open);
this.setBounds(400, 200, 100, 100);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
open.addActionListener(this);
}
@Override
//重写actionPerformed()方法,用于实现文件选择
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFileChooser jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
jfc.showDialog(new JLabel(), "选择");
File file=jfc.getSelectedFile();
path=file.getAbsolutePath();
}
//返回文件路径
public String rePath()
{ return path;
} }
查询代码行,空行,注释行:
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(
file));
String coun = null;
while ((coun = bufferedReader.readLine()) != null) {
line++;
if (coun.trim().length() == 0 || coun.trim().length() == 1) {
nuline++;
} else {
for (int i = 0; i < coun.length() - 2; i++) {
temp = coun.substring(i, i + 1);
if (temp.equals("/")
&& coun.substring(i + 1, i + 2).equals("/")) {
annoline++;
}
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
codeline = line - nuline - annoline;
System.out.println("代码行:" + codeline + "\n" + "空行:" + nuline + "\n"
+ "注释行:" + annoline);
停词表:
int ReStopList(File file) {
String str = null;
int stopword = 0;
int k = 0;
String reg1 = "\\s+|,+";
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(
file));
while ((str = bufferedReader.readLine()) != null) {
String strc[] = str.split(reg1);
for (String s : strc) {
k = count_word(s);
stopword += k;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stopword;
}
由于在上一次的博客中已经实现了查询总字符数,单词数,总行数,所以在这里就不再展示代码,具体的可以参考:https://www.cnblogs.com/zhouxin523/p/9733271.html。
总结与感受:
关于结对编程开发:以前进行程序开发的时候要么是自己进行程序开发,要么都是组成了多人的团队进行程序开发,从来没有体会过两人进行结对编程,在这次课程中得以体会了一次结对编程,首先来说结对编程有一点好处就是多了一双眼看代码,多了一个脑子想问题,多了张嘴讲建议,所以在进行编程的时候可以注意到许多一个人进行编程时发现不了的问题,并且两个人都在对一个问题进行思考,使得解决问题的思路得到了更多的拓展,并且在交流的过程中还会产生新的想法, 我觉得这是很棒的。其次,在代码完成速度上感觉也有了明显的不同,在进行编程之前如果进行了明确分工,在合理的代码规范前提下两人分工完成各自的任务,使得完成的时间得到了很大程度的减少,并且代码完成的质量在合成一份程序之后就可以得到验证,而不必反复在编程的各个阶段进行代码测试,减少了很多时间的浪费。
关于在构建之法的一些体会:在构建之法这本书中我感觉自己确实是学到了很多知识,首先是系统的软件工程的知识,在接触这本书之前虽然已经学习了不少软件工程的相关知识,但是一种感觉都是零散的,独立的知识片段,但是在学习了构建之法后感觉这些知识都到了一定程度的整合,慢慢开始形成一个整体,并且感觉脑子里的思路也清晰起来。然后构建之法中在每一章的结尾都给出了大量的知识链接,这些知识链接可以丰富我的阅读,拓宽视野,并且加深我自己对于课堂知识的理解, 对于我来说是起到了极大的帮助的,我相信就算在这门课结束之后我还是会经常把这本书拿出来阅读,感觉还可以收获更多的东西。
WordCount结对项目的更多相关文章
- WordCount 2.0(结对项目)
序言 合作伙伴 201631062220 201631062120 项目码云地址: https://gitee.com/zhege/WordCount 作业详细要求 系统分析与设计结对项目 ...
- 系统分析与设计结对项目——WordCount
结对项目完成WordCount 合作者:201631062507 201631062526(学号) 代码地址:https://gitee.com/WordCountMC/WordCountTeam ...
- 软工结对项目之词频统计update
队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...
- 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~
结对项目:Web复利计算 搭档博客地址:25江志彬 http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...
- 高级四则运算器—结对项目反思(193 & 105)
高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格 PSP2.1 P ...
- 高级四则运算器—结对项目总结(193 &105)
高级四则运算器—结对项目总结 为了将感想与项目经验体会分割一下,特在此新开一篇博文. 界面设计 啥都不说,先上图震慑一下... 上面的三个界面是我们本次结对项目的主界面,恩,我也觉得挺漂亮的!你问我界 ...
- 高级软件工程2017第3次作业——结对项目:四则运算题目生成程序(基于GUI)
Deadline:2017-10-11(周三)21:00pm (注:以下内容参考集大作业 ) 前言 想过和别人一起探索世界吗?多么希望,遇到困难时,有人能一起探讨:想要懈怠时,有人推你一把:当你专注于 ...
- 2018-2019-2 《Java程序设计》结对项目阶段总结《四则运算——整数》(二)
20175218 2018-2019-2 <Java程序设计>结对项目阶段总结<四则运算--整数> 一.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加,减, ...
- 结对项目——四则运算GUI项目
一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...
随机推荐
- [Swift]LeetCode60. 第k个排列 | Permutation Sequence
The set [1,2,3,...,n] contains a total of n! unique permutations. By listing and labeling all of the ...
- [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)
Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...
- 开启SSH
开启 ssh 远程连接 1.修改 sshd_config 输入 sudo vim /etc/ssh/sshd_config 做如下修改 PermitRootLogin yes [需要把注释 #号去掉, ...
- django启动server报错Error: That port is already in use.
这种一般是端口错误,一般是要把端口关掉,这里提供了两种方法. 方法一:直接命令: sudo lsof -t -i tcp:8000 | xargs kill -9 方法二:脚本:名字manage.py ...
- springcloud之服务注册与发现
本次分享的是关于springcloud服务注册与发现的内容,将通过分别搭建服务中心,服务注册,服务发现来说明:现在北京这边很多创业公司都开始往springcloud靠了,可能是由于文档和组件比较丰富的 ...
- Python内置函数(59)——sorted
英文文档: sorted(iterable[, key][, reverse]) Return a new sorted list from the items in iterable. Has tw ...
- 【java设计模式】(5)---装饰者模式(案例解析)
设计模式之装饰者模式 一.概念 1.什么是装饰者模式 装饰模式是在不使用继承和不改变原类文件的情况下,动态的扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 这一个解释 ...
- Python使用Xpath轻松爬虫(脑残式)
1.在PyCharm安装lxml. 2.找到源码 3.F12.copy源码的xpath 4.代码 from lxml import etree import requests wb_data = re ...
- 利用jmap和MAT等工具查看JVM运行时堆内存
jmap JDK自带了一些工具可以帮助我们查看JVM运行的堆内存情况,常用的是jmap命令 jmap -heap <pid> 打印堆的使用情况 那么,从这个输出中我们也可以大致看出堆的结构 ...
- Solr 10 - SolrCloud集群模式简介 + 组成结构的说明
目录 1 什么是SolrCloud 2 SolrCloud的结构 2.1 物理结构 2.2 逻辑结构 2.2.1 Collection(集合) 2.2.2 Core(内核) 2.2.3 Shard(分 ...