https://github.com/happyeven/WC


项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
具体功能要求:
程序处理用户需求的模式为:

程序处理用户需求的模式为:

wc.exe [parameter] [file_name]
  • 基本功能列表(已完成):
wc.exe -c file.c     //返回文件 file.c 的字符数
wc.exe -w file.c //返回文件 file.c 的词的数目
wc.exe -l file.c //返回文件 file.c 的行数

关键代码or设计说明

1.单词、行数、字符的计数

public class Counter {
private long character;
private long word;
private long line;
private String text;
private long countChar() {
return text.length();
}
private long countWord() {
boolean blank = true;
long word = 0;
for (char c : text.toCharArray()) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
if (blank){
blank = false;
word++;
}
}else if (c == '-' && !blank){
continue;
}else {
blank = true;
}
}
return word;
}
private long countLine() {
long line = 0;
int index = -1;
while((index=text.indexOf("\n", index)) > -1) {
index++;
line++;
}
return line;
}
public Counter(String text) {
this.text = text;
} public void count() {
character = countChar();
word = countWord();
line = countLine();
} public long getWord() {
return word;
} public long getLine() {
return line;
} public long getCharacter() {
return character;
}
} 2文件的读取并转换成string类型
import java.io.*; public class ReadFileToString {
  public static String readFileToString(String fileName) {
    File file = new File(fileName);
    Long length = file.length();
    byte[] bytes = new byte[length.intValue()];
    try {
      FileInputStream in = new FileInputStream(file);
      in.read(bytes);
      in.close();
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return new String(bytes);
  } } 3主类,输出需要的结果
public class WC {
public static void main(String[] args) {
  String path = args[args.length-1];       // get the file
  if (args.length <= 0){
  System.err.println("please input the argument");
  return;
  }
  String text = ReadFileToString.readFileToString(path);         // count
   Counter counter = new Counter(text);
   counter.count();         // output result
  System.out.print(path + ": ");
  for (int i = 0; i < args.length-1; i++) {
  switch (args[i]) {
  case "-c" :System.out.print("Character: " + counter.getCharacter() + " "); break;
  case "-w" : System.out.print("word: " + counter.getCharacter() + " "); break;
  case "-l" : System.out.print("line: " + counter.getCharacter() + " "); break;
  default: break;
        }
      }
    }
}

  

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划    
· Estimate · 估计这个任务需要多少时间 10 5
Development 开发    
· Analysis · 需求分析 (包括学习新技术) 120 130
· Design Spec · 生成设计文档 60 35
· Design Review · 设计复审 (和同事审核设计文档) 40 30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 30
· Design · 具体设计 60 60
· Coding · 具体编码 360 480
· Code Review · 代码复审 30 30
· Test · 测试(自我测试,修改代码,提交修改) 60 60
Reporting 报告  20  20
· Test Report · 测试报告 60 10
· Size Measurement · 计算工作量 30 30
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 20
  合计 920 940

软件工程firstblood的更多相关文章

  1. 软件工程(C编码实践篇)学习心得

    孟繁琛 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 软件工程 ...

  2. 敏捷软件开发VS传统软件工程

    敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同 ...

  3. Atitit 软件工程概览attilax总结

    Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...

  4. 软件工程的引入:Scrum开发框架总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点如下: 软件工程概念 敏捷开发过程scrum 一.什么是软件工程?请用一句话描述. 软件工程是一门研究性的学科:它用工程化 ...

  5. 软件工程里的UML序列图的概念和总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...

  6. 软件工程随笔(1)--jetbrain在软件工程中的应用

    接下来几天我要写半年的软件工程学习后的感想,今天从介绍IDE开始.首先,本人至今为止全部项目都是在mypclise上完成的.本人采用myeclipse唯一的原因就是它使用方便.但是,我也承认myecl ...

  7. 2016福州大学软件工程第三次个人作业-K米软件产品评测

    K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...

  8. 软件工程(QLGY2015)博客点评总结

    目录 第一次作业(2015.5.9) 第二次作业(2015.5.21) 第三次作业(2015.6.11) 2015上半年软工助教总结 第一次作业(2015.5.9) 存在主要问题 1)书写这种练习博客 ...

  9. 软件工程-构建之法 Visual Studio开发平台的安装与单元测试

    一.前言 自从开始了大三下的生活,学校开设一门课程“软件工程”,刚好我们是第一届进行课程改革,不在像以前那样背背概念,考前进行好好突击,然后考试就能过,最后毕业了发现软件工程课程到底我们在其中学习了什 ...

随机推荐

  1. 少走冤枉路!带你走过SNMP的那些坑

    SNMP(Simple Network Management Protocol)即简单网络管理协议,是在网络与系统监控领域中,最常使用的一种数据采集技术.尽管这个协议非常简单,但在大规模IT环境监测中 ...

  2. 详谈LABJS按需动态加载js文件

    为了提高页面的打开和加载速度,我们经常把JS文件放在页面的尾部,但是有些JS必须放在页面前面,这样就会增加页面的加载时间:于是出现了按需动态加载的概念,这个概念就是当页面需要用到这个JS文件或者CSS ...

  3. IScroll5中文API整理,用法与参考

    IScroll是移动页面上被使用的一款仿系统滚动插件.IScroll5相对于之前的IScroll4改进了许多,使得大家可以更方便的定制所需的功能了. 做项目的时候正好用到了这个插件,自己做了一下总结, ...

  4. PAT 1100 Mars Numbers[难]

    1100 Mars Numbers (20 分) People on Mars count their numbers with base 13: Zero on Earth is called &q ...

  5. 使用scikit-learn 估计器分类

    本章的几个概念: 估计器(estimator) 用于分类.聚类和回归分析          转换器(transformer):用于数据预处理回来数据转换          流水线(pipeline): ...

  6. java基础知识面试题(1-40)

    1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...

  7. Smarty小结提纲

    Smarty:模板技术 实现功能:前后分离. 原理:主要通过Smarty核心类实现,调用display方法,将模板文件读取,用正则进行替换,替换完保存到临时文件,将临时文件加载到当前页面. 配置文件( ...

  8. Linux学习笔记之Linux最小化安装启动后如何配置

    在VM虚拟机中安装CentOS 7 时 有时候顾虑到电脑硬件性能,我们需要最小化安装,而最小化安装后与centos6的版本是有一些差异的,接下来我们就对刚安装好的最小化centos7做一些操作,来世我 ...

  9. leetcode刷题吧

    排列 从排序的数组中删除重复项 /** * @param {number[]} nums * @return {number} */ var removeDuplicates = function(n ...

  10. #include <ntifs.h>出现PEPROCESS redefinition问题处理

    转载:http://blog.csdn.net/ytfrdfiw/article/details/23334297 如果在自己的程序中,即包含ntddk.h和ntifs.h的时候,编译的时候会出现如下 ...