软件工程firstblood

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.1Personal 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

 

posted @ 2018-09-14 21:29  朱健栋  阅读(171)  评论(0编辑  收藏  举报