GitHub地址:https://github.com/oAiuo/wordCount

一、题目描述

Word Count
1. 实现一个简单而完整的软件工具(源程序特征统计程序)。
2. 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。

二、项目要求

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 的行数

说明:我在项目中file_name的定义为文件的路径

三、解题思路

看到要求时,涉及文件的操作,就联想到java的IO流操作。

  1. 统计文件字符数,使用字符输入流中的read方法可以得到该次read操作获取的字符数,重复操作即可。
  2. 统计单词数,则使用字符输入流中的readLine方法,获取一行的内容,对该字符串使用空格进行分割成字符串数组,则得到一行的单词数,重复操作即可。
  3. 统计行数,则同样使用readLine方法,统计该方法的使用次数即可。

四、设计实现过程

将文件的File对象、字符输入流和三个统计方法组成一个类,然后在main方法里,对命令行输入格式进行处理,读入文件的路径字符串生成对象,然后使用switch语句,运行不同的统计方法。

五、代码说明

0、定义的类的属性及构造器

    private File src;
private BufferedReader input; public FileClass(String src) {
this.src = new File(src);
try {
this.input = new BufferedReader(new FileReader(src));
} catch (FileNotFoundException e) {
System.out.println("File Not Found...\n");
} }

1、统计字符数

    public void charNumCount() throws IOException {
if(input == null)
input = new BufferedReader(new FileReader(src)); int charNum = 0, num = 0;
char[] buffer = new char[1024]; while( (num = input.read(buffer)) != -1 ) {
charNum += num;
System.out.println(buffer);
} System.out.println("charNum : " + charNum );
input.close();
input = null; }

说明:定义一个缓冲字符数组,字符输入流的read(char[])方法可将读取到的内容存入该字符数组中,并返回读取到的字符数,每次累加该数即可。

由于统计的是文本文件,在文件的末尾有结束符,最后会返回-1,即读取结束。

另有发现,windows系统的换行符的确是"\r\n",有换行的情况的话,换行符会记为两个字符。

2、统计单词数

    public void wordNumCount() throws IOException {
if(input == null)
input = new BufferedReader(new FileReader(src)); int wordNum = 0;
String str = null; while( (str = input.readLine()) != null ) {
String[] arr = str.split("\\s+");
for(String temp : arr) {
System.out.println("word: " + temp);
wordNum++;
}
} System.out.println("wordNum : " + wordNum );
input.close();
input = null; }

说明:采用readLine()方法读取到一行的内容,然后使用split方法,以空格为分隔符分割字符串,得到字符串数组,统计一行中单词的个数,重复读取每行内容即可。

3、统计行数

    public void lineNumCount() throws IOException {
if(input == null)
input = new BufferedReader(new FileReader(src)); int lineNum = 0; while( input.readLine() != null )
lineNum++; System.out.println("lineNum : " + lineNum );
input.close();
input = null; }

说明:同样采用readLine方法读取每一行的内容,当返回的内容为null时,即到文本末尾,变量存储读取成功的次数即可。

4、main方法

    public static void main(String[] args) throws IOException {
if( args.length != 2)
{
System.out.println("-c filePath return charNum");
System.out.println("-w filePath return wordNum");
System.out.println("-l filePath return lineNum");
}
else {
FileClass file = new FileClass(args[1]); switch(args[0]) {
case "-c" :
file.charNumCount();
break; case "-w" :
file.wordNumCount();
break; case "-l" :
file.lineNumCount();
break; default :
System.out.println("-c filePath return charNum");
System.out.println("-w filePath return wordNum");
System.out.println("-l filePath return lineNum");
}
}
}

说明:main方法参数即为命令行参数,对输入的参数进行合法性检验,并根据输入的功能选择不同的统计方法。

六、测试运行

1、空文件

    

2、单字符文件

      

3、一行文件

  

4、典型文件

  

 七、PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30

45

· Estimate

· 估计这个任务需要多少时间

20

30

Development

开发

1440

1400

· Analysis

· 需求分析 (包括学习新技术)

180

300

· Design Spec

· 生成设计文档

20

30

· Design Review

· 设计复审 (和同事审核设计文档)

10

10

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

20

· Design

· 具体设计

120

100

· Coding

· 具体编码

900

780

· Code Review

· 代码复审

120

120

· Test

· 测试(自我测试,修改代码,提交修改)

60

40

Reporting

报告

120

80

· Test Report

· 测试报告

60

30

· Size Measurement

· 计算工作量

30

30

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

30

20

合计

1610

1555

八、总结

  1. 经过这次项目,体会了软件开发的一个具体流程,对软件开发工程化有了一个比较具体的了解;
  2. 查阅资料时,有时可能会跑偏,点开的链接较多,总抓不住重点,时间浪费较多;
  3. 这次只完成了基础功能,编程能力有待提高。

个人项目 wc.exe的更多相关文章

  1. 个人项目WC.exe Node.js+electron实现

    前言 实现语言:Javascript 编译工具:webstorm GitHub:https://github.com/NPjuan/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本 ...

  2. 软工个人项目 ——wc.exe

    1.GitHub项目地址 https://github.com/k8kiw/WordCount 2.PSP预计时间 PSP2.1 Personal Software Process Stages 预估 ...

  3. 个人项目-WC.exe (Java实现)

    一.Github项目地址:https://github.com/blanche789/wordCount/tree/master/src/main/java/com/blanche 二.PSP表格 P ...

  4. 软工个人项目———WC.exe(Java实现)

    一.github地址 https://github.com/hhw-15521301615/hello-world 二.PSP表格 PSP2.1 Personal Software Process S ...

  5. 软工作业1:wc.exe项目开发(java)

    Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  6. 个人项目(WC.exe)(java)(基于图形界面)

    一.Github项目地址:https://github.com/Leungdc/ENhomework 二.PSP: PSP2.1 Personal Software Process Stages 预估 ...

  7. 个人项目作业(wc.exe)

    1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...

  8. 个人项目作业——wc.exe

    一.Github项目地址 https://github.com/PIPIYing/wc 二.项目概况 项目描述 Word Count 1. 实现一个简单而完整的软件工具(源程序特征统计程序). 2. ...

  9. 个人项目(wc.exe)

    一.项目在GitHub上的地址: ·https://github.com/DawsonHuang/Word_Count 二.项目描述: ·项目名:WordCount(以下简称WC或项目) ·项目简述: ...

随机推荐

  1. 【Weiss】【第03章】练习3.4、3.5:有序链表求交、并

    [练习3.4] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∩L2的过程. [练习3.5] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∪L2的过程. 思路比较简单,测 ...

  2. Java多线程并发06——CAS与AQS

    在进行更近一步的了解Java锁的知识之前,我们需要先了解与锁有关的两个概念 CAS 与 AQS.关注我的公众号「Java面典」了解更多 Java 相关知识点. CAS(Compare And Swap ...

  3. oracle中plsql练习-----在控制台输出1到100以内的素数。

    一.思路:首先需要知道素数的概念即质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 中心思想是,外循环所有的自然数,内循环折半查询,增加代码的速度,注意:从1开始,需要大于1,但是pl ...

  4. Python+Appium实现自动化测试

    一.环境准备 1.脚本语言:Python3.x    IDE:安装Pycharm 2.安装Java JDK .Android SDK 3.adb环境,path添加E:\Software\Android ...

  5. [深入学习C#] 匿名函数、委托和Lambda表达式

    匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...

  6. editplus软件使用技巧

    1.文本文件的特点 注:不针对editplus这个软件,对于其他的文本文件处理软件也同样适用. 文本文件就是不包含其它文字格式(比如字体,字号,对齐,行间距等)以及富文本(比如图片,表格等)的一种纯文 ...

  7. SpringBoot启动项目之后,访问页面出现Whitelabel Error Page

    话说万事具备,只欠东风- 蹭闲暇时来跑个SpringBoot项目玩玩,把一切配置依赖准备就绪之后打算运行项目. Staring...... 接着,在浏览器输入地址 localhost:8080/hel ...

  8. P5021 赛道修建 题解

    原题链接 简要题意: 在一棵树上求 \(m\) 条不相交的路径的最小值的最大值. 本题部分分很多,而且本人也交了 \(27\) 次,所以一定要仔细讲部分分! 算法一 对于 \(b_i = a_i + ...

  9. Apache服务的主要目录和配置文件详解

    Apache服务的主要目录和配置文件详解 2014-01-14 19:05:14 标签:httpd配置文件详解 apache配置文件 httpd配置文件 apache文件目录 原创作品,允许转载,转载 ...

  10. React入门(1)

    今天继续来学习react 首先,先写几个小demo来感受一下什么是react,以及react的语法规则,来建立对react的一个总体认识 上demo: demo01: demo01涉及的知识点有: 1 ...