合作者: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结对项目的更多相关文章

  1. WordCount 2.0(结对项目)

    序言 合作伙伴 201631062220      201631062120 项目码云地址: https://gitee.com/zhege/WordCount 作业详细要求 系统分析与设计结对项目 ...

  2. 系统分析与设计结对项目——WordCount

    结对项目完成WordCount 合作者:201631062507  201631062526(学号) 代码地址:https://gitee.com/WordCountMC/WordCountTeam ...

  3. 软工结对项目之词频统计update

    队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...

  4. 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~

    结对项目:Web复利计算 搭档博客地址:25江志彬  http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...

  5. 高级四则运算器—结对项目反思(193 & 105)

    高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格   PSP2.1 P ...

  6. 高级四则运算器—结对项目总结(193 &105)

    高级四则运算器—结对项目总结 为了将感想与项目经验体会分割一下,特在此新开一篇博文. 界面设计 啥都不说,先上图震慑一下... 上面的三个界面是我们本次结对项目的主界面,恩,我也觉得挺漂亮的!你问我界 ...

  7. 高级软件工程2017第3次作业——结对项目:四则运算题目生成程序(基于GUI)

    Deadline:2017-10-11(周三)21:00pm (注:以下内容参考集大作业 ) 前言 想过和别人一起探索世界吗?多么希望,遇到困难时,有人能一起探讨:想要懈怠时,有人推你一把:当你专注于 ...

  8. 2018-2019-2 《Java程序设计》结对项目阶段总结《四则运算——整数》(二)

    20175218 2018-2019-2 <Java程序设计>结对项目阶段总结<四则运算--整数> 一.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加,减, ...

  9. 结对项目——四则运算GUI项目

    一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...

随机推荐

  1. 【从零开始搭建自己的.NET Core Api框架】(六)泛型仓储的作用

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  2. [Swift]LeetCode441. 排列硬币 | Arranging Coins

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...

  3. [SQL]LeetCode627. 交换工资 | Swap Salary

    SQL架构 create table ), sex ), salary int) Truncate table salary insert into salary (id, name, sex, sa ...

  4. [Swift]LeetCode680. 验证回文字符串 Ⅱ | Valid Palindrome II

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...

  5. springmvc 请求参数解析细节

    springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...

  6. web开发中获取的各种高度和宽度

    前端开发中经常需要获取页面还有屏幕的高度和宽度进行计算,此文即介绍如何用 JavaScript 还有 jQuery 获取这些尺寸. 1.简介 一个页面显示在浏览器内,浏览器又放置在屏幕窗口内,所以由里 ...

  7. javascript 使用小技巧总结

    按位取反 ~a 即:返回 -(a+1),会去掉小数点. let a = 3.14; let b = ~a; //b = -(3.14+1) 取整 为-4: let c = ~b; //c = -(-4 ...

  8. C#使用GUID

    全局唯一标识符(GUID,Globally Unique Identifier) What is GUID 也称作 UUID(Universally Unique IDentifier) . GUID ...

  9. C++版 - 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)

    面试题35:第一个只出现一次的字符 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b.(2006年google的一道笔试题.) 分析: 首先应向确认一下是ASCII字 ...

  10. Docker折腾手记-安装

    安装 docker红的发紫,所以博主耳闻这么久,也要来折腾折腾了 研究不多,个人目前认为docker给我们带来了以下好处 开发机器因为开发原因,需要配置各种各校的环境,繁琐且耗费资源.配来配去还容易环 ...