Github地址:https://github.com/Zzhaomin/learngit

项目相关要求 :

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 的行数(实现)

扩展功能:
                         -s   递归处理目录下符合条件的文件。
                        -a   返回更复杂的数据(代码行 / 空行 / 注释行)。(实现)

                 空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

                 代码行:本行包括多于一个字符的代码。

                 注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

} //注释
                       在这种情况下,这一行属于注释行。

[file_name]: 文件或目录名,可以处理一般通配符。

        高级功能:

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

需求举例:
                   wc.exe -s -a *.c

返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

遇到的困难及解决方法

  • 困难描述  

           1. 一开始接触到题目时,就不知道如何输入命令和文件路径

2.对如何运用正则表达式去统计单词数这一方面不太懂

3.不懂得如何写测试单元

  • 做过哪些尝试

          1.百度搜索,然后看到了一些关于输入命令,空格,然后再输入文件路径,拆分成两部分使用的方法

2.收集一些关于正则表达式的学习资料,认真学习正则表达式

3.百度搜索如何写单元测试,以及问同学

  • 是否解决

          困难描述中的1、2两个困难都解决了,但困难描述3中如何写好单元测试还没有解决,写的单元测试有错

  • 有何收获

          1.重温了很多关于java的内容,例如输入输出流、switch等。

2.对正则表达式有一定的了解;懂得写一些比较简单的表达式

3.虽然单元测试没有写正确,但在尝试过程中也了解了单元测试的重要性。

设计实现过程

       接收控制台输入,判断命令和文件路径是否正确,然后用switch语句读取命令,判断命令,调用各类方法。

代码说明

1.实现返回文件字符数目的功能

逐行读取文件,累加每一行的长度,直到文件被读取完。

//统计字符数目
public static int cCount() throws IOException {
cCount = 0;
File file = new File(File);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null) {
cCount += line.length();
}
return cCount;
}

2.实现返回文件词数的功能

逐行读取文件,去除每一行起始和结束的空格,然后用split("\\s+").length统计词数

  //统计词的数目
public static int wCount() throws IOException {
wCount = 0;
File file = new File(File);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
line = line.trim();//删除起始和结尾的空格
wCount = sb.toString().split("\\s+").length;
}
return wCount;
}

3.实现返回文件总行数的功能

逐行读取文件,每读取一行,行数+1,直到读取完文件。

 //统计行数总数
public static int lCount() throws IOException {
lCount = 0;
File file = new File(File);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = br.readLine())!= null) {
lCount = lCount +1;
}
return lCount;
}

4.实现统计代码行数、空白行数、注释行数的功能

逐行读取文件,根据判断line是否为空或长度是否小于等于1,为空或长度小于等于1空白行加1,判断行里是否连续出现//,若有注释行加1,其他情况代码行加1,一直读完整个文件

//统计代码行数、空白行数、注释行数
public static void moreLineCount() throws IOException {
codeLineCount = 0;
nullLineCount = 0;
noteLineCount = 0;
File file = new File(File);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null) {
if (line == "" || line.length() <= 1) {
nullLineCount = nullLineCount + 1;
continue;
}
int a = line.indexOf("/");//返回第一次出现的指定子字符串在此字符串中的索引。
int b = line.substring(a + 1).indexOf("/");
if (b == 0) {
noteLineCount++;
continue;
}
codeLineCount++;
}
}

5.main方法

判断输入的文件路径是否有误,没有就用switch调用方法得出相应的输出

public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
System.out.print("wc.exe ");
Scanner s = new Scanner(System.in);
command = s.nextLine();
string = command.split(" ");
string1 = string[0];
File = string[1]; File file = new File(File);
if (file.exists()) {
switch(string1) {
case "-c" :
System.out.println("字符数目 :" + cCount());
break;
case "-w" :
System.out.println("词的数目 :" + wCount());
break;
case "-l" :
System.out.println("行数数目 : " + lCount());
break;
case "-a" :
moreLineCount();
System.out.println("代码行数 : " + codeLineCount);
System.out.println("空白行数 : " + nullLineCount);
System.out.println("注释行数 : " + noteLineCount);
break;
default : System.out.println("没有此命令");
}
}
else {
System.out.println("文件路径输入有误或者文件路径不存在");
} }

测试运行

1.空白文件测试结果

测试结果正确

2.只有一个字符的文件测试结果

3.一个源文件的测试结果

PSP表格

  

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

20

 20

· Estimate

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

20

 15

Development

开发

 300  250

· Analysis

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

 300  350

· Design Spec

· 生成设计文档

 60  30

· Design Review

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

 60  20

· Coding Standard

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

 40  30

· Design

· 具体设计

 60  70

· Coding

· 具体编码

 300  400

· Code Review

· 代码复审

 100  120

· Test

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

 200  300

Reporting

报告

 120  180

· Test Report

· 测试报告

 60  60

· Size Measurement

· 计算工作量

 60  70

· Postmortem & Process Improvement Plan

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

 30  40

合计

   1730 1955

项目小结

   1.对于java语言比较陌生,很多知识点都忘了,这次任务对于我来说有很大的难度,最终能把项目做出来还是很开心的

2.很多时候都是靠百度来解决问题,明确到搜索资料的重要性

3.对于Git、GitHub有了初步的了解。在初次建库上传代码时,出现了很多问题。一开始用命令行不成功,后来在eclispe里安装插件进行上传也是失败了,最后又尝试用命令行上传成功了

4.对于单元测试还是不懂。

软工作业1:wc.exe项目开发(java)的更多相关文章

  1. 软件工程个人作业(wc.exe项目)

    一.项目Github地址 https://github.com/huangzihaohzh/WordCounter 二.PSP表格 PSP2.1 Personal Software Process S ...

  2. 软工作业PSP与单元测试训练:java语言判断电子邮箱格式

    任务说明(二选一): 一.实现模块判断传入的身份证号码的正确性: 二.实现模块判断传入的电子邮箱账号的正确性:   实现要求: 一.实现功能模块: 1. 判断邮箱地址是否为空: 2. 判断邮箱地址是否 ...

  3. [软工作业]-软件案例分析-CSDN

    [软工作业]-软件案例分析-CSDN(app) 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 ...

  4. 软工作业-----Alpha版本第一周小结

            软工作业-----Alpha版本第一周小结   Part1.第一周周计划记录 姓名 学号 周前计划安排 每周工作记录 自我打分 yrz(队长) 1417 1.进行任务分析 2.任务分配 ...

  5. 软工作业No.1。Java实现WC.exe

    网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...

  6. 软工作业1—java实现wc.exe

    github项目地址 https://github.com/liyizhu/wc.exe WC 项目要求 基本功能列表: wc.exe -c file.c     //返回文件 file.c 的字符数 ...

  7. 软工作业-wc(Python实现)

    GitHub地址:GitHub PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划  30  40 · Esti ...

  8. 软工作业-Wc

    Wc.exe wc.exe是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行 ...

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

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

随机推荐

  1. jvm是怎样调用方法的

    jvm内部有五种调用方法的指令 invokeinterface 用以调用接口方法,在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用.(Invoke interface method) ...

  2. HDOJ5876(补图的最短路)

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  3. ARM-Linux内核移植之(一)——内核启动流程分析

    内核版本:2.6.22  为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少. 内核启动分为三个阶段,第一是运行hea ...

  4. C#中Monitor对象与Lock关键字的区别分析

    这篇文章主要介绍了C#中Monitor对象与Lock关键字的区别,需要的朋友可以参考下 Monitor对象 1.Monitor.Enter(object)方法是获取 锁,Monitor.Exit(ob ...

  5. PHP函数(三)-递归函数

    递归函数就是函数本身在内部调用自己 <?php function DiGui($n){ echo $n."  "; if($n>0) DiGui($n-1); else ...

  6. 简单 JS 弹出层 背景变暗

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. VMWARE 虚拟机新增硬盘,格式化分区,并挂载

    VMWARE 虚拟机新增 硬盘 并挂载 一台虚拟机上安装ORACLE12c 需要分一块硬盘挂载数据文件 日志文件 以及归档文件 1. 关闭虚拟机 2. 编辑虚拟机设置 选择[编辑虚拟机设置]并打开,将 ...

  8. Centos7下快速安装Mongo3.2

    Centos7下快速安装Mongo3.2 一般安装Mongo推荐源码安装,有时候为了快部署测试环境,或者仅仅是想装个mongo shell,这时候yum安装是最合适的方式, 下面介绍一下如何在Cent ...

  9. 【知识碎片】JavaScript篇

     40.选择器组合 逗号是多选择器空格 是子子孙孙尖括号 只找儿子 39.失去焦点事件blur $("input").blur(function(){ $("input& ...

  10. java 调用webservice (asmx) 客户端开发示例

    这是本人第一次写博客,其实就是自己做个笔记,写的很粗糙,也希望能给跟我遇到同样问题的你一点帮助. 因为最近有个项目要调用webservice接口,之前接触的都是Java开发服务端和客户端的接口,开发前 ...