第一次 作业 workcount (基础功能实现)

  github项目:https://github.com/lilikai/Lk_test/blob/master/zuoye/src/com/zuoye/cn/wcCount.java

   码云项目:https://gitee.com/jiansanzhihou/first_homework_wordcount/blob/master/WC/wcCount.java

1、项目要求:实现对文件内容里面的 字符、单词、行数的统计,并将结果输出在制定的文件里面,在命令行直接运行wc.exe,存储统计结果的默认文件为result.txt,和wc.exe在同级目录

2、基本功能:wc.exe -c file.c     //返回文件 file.c 的字符数wc.exe -w file.c     //返回文件 file.c 的单词总数wc.exe -l file.c     //返回文件 file.c 的总行数wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

注意:

空格,水平制表符,换行符,均算字符。

由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。

-c, -w, -l参数可以共用同一个输入文件,形如:wc.exe –w –c file.c 。

-o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数

3、基本功能列表:

1、 -c 文件路径 返回文件字符数

2、 -l 文件路径 返回文件内容行数

3、 -w 文件路径 返回文件单词数

4、 -o 文件路径 输出结果到制定文件

4、psp开发表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30

 50

· Estimate

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

 350

 350

Development

开发

 100

 120

· Analysis

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

 100

 130

· Design Spec

· 生成设计文档

 

 

· Design Review

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

 

 

· Coding Standard

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

 30

 50

· Design

· 具体设计

 30

 40

· Coding

· 具体编码

 200

 300

· Code Review

· 代码复审

 30

 30

· Test

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

 50

 70

Reporting

报告

 30

 50

· Test Report

· 测试报告

 

 

· Size Measurement

· 计算工作量

 30

 30

· Postmortem & Process Improvement Plan

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

 30

 30

 

            合计

      660

     910

 

 

5、表格分析:

  从表格上可以看出,实际和预期的时间大部分相差不是很大,但是在编码和测试修改出现了很大的反差,究其原因还是在前面开发计划有问题,具体的编码规划没有制定好,编码之前的资料和工具没有准备充分导致编码阶段出现问题,当然后面的测试也会受到相应的影响,代码总是写完才去测试,没有进行模块化测试,导致时间超出预期的结果。

6、设计思路: 

       通过输入的命令来判断执行各个if函数,将输入的命令分割为两部分,第一部分是指令,第二部分是文件路径,

用指令来判断需要执行的if函数,文件路径作为参数。

字符统计:按行读取文件,把每行的字符数相加;

词数统计:把读取的数据记录下来,把多行拼接为一行,用空格替代标点符号,然后根据空格切割;

行数统计函数:根据JAVA的readLine功能统计;

设计思路图:

第一次 作业 workcount (基础功能实现)_第1张图片

运行截图:

第一次 作业 workcount (基础功能实现)_第2张图片

第一次 作业 workcount (基础功能实现)_第3张图片

第一次 作业 workcount (基础功能实现)_第4张图片

将java 项目转为可直接执行的exe 文件测试

 

第一次 作业 workcount (基础功能实现)_第5张图片

第一次 作业 workcount (基础功能实现)_第6张图片

第一次 作业 workcount (基础功能实现)_第7张图片

7、部分代码:

/*
         *  获取文件目录名
         */
        
        InputStream iStream = System.in;
        InputStreamReader inputStreamReader = new InputStreamReader(iStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String str = bufferedReader.readLine();
        String[] strings = str.split("\\s");
        
        for (int i = 0; i < strings.length; i++) {
            if (strings[i].endsWith(".txt"))
            inputFile = strings[i];
    }
/**
         * 字符数统计
         */
        for (int i = 0; i < strings.length; i++) {
          if (strings[i].equals("-c")) { // -c对应字符个数统计
          BufferedReader bff = new BufferedReader(new FileReader(inputFile));
          String str1;
          String str2 = bff.readLine();
          while ((str1 = str2) != null) {
          charnum = charnum + str1.length();
          charnum++;
        if ((str2 = bff.readLine()) == null){
            charnum--;
        }

    }
        bff.close();
        String file = inputFile;
        file = file.substring(file.lastIndexOf("\\") + 1, file.length());
        System.out.println(file + ",字符个数:" + charnum);
        }
    }
 /**
         *  行数统计
         */

        for (int i = 0; i < strings.length; i++) {
            if (strings[i].equals("-l")) { // -l对应字符行数统计
                BufferedReader bff = new BufferedReader(new FileReader(inputFile));
                while (bff.readLine() != null)
                linenum++;
                bff.close();
                String file = inputFile;
                file = file.substring(file.lastIndexOf("\\") + 1, file.length());
                System.out.println(file + "文件总行数:" + linenum );
            }
        }

        /**
         *  单词数统计
         */
        for (int i = 0; i < strings.length; i++){
            if (strings[i].equals("-w")) { // -w对应字符个数统计

                BufferedReader bff = new BufferedReader(new FileReader(inputFile));
                StringBuffer sBuffer = new StringBuffer();
                String str1;
                while ((str1 = bff.readLine()) != null)
                sBuffer = sBuffer.append(str1 + " ");
                str1 = sBuffer.toString();
                /**
                 *  把中英文标点符号都替换为“ ”
                 */
                String str2 = str1.replaceAll("[\\p{P}+~$`^=|<>~`$^+=|<>¥×]", " ");
                String[] str3 = str2.split("\\s+");
                wordnum = str3.length;
                bff.close();
                String file = inputFile;
                file = file.substring(file.lastIndexOf("\\") + 1, file.length());
                System.out.println(file + "单词个数:" + wordnum);
             }
          }

8、总结:

在这个小项目公布以后,我觉得虽然这个一个非常小的项目,属于个人项目,如果以前没有学习软件工程系统分析的话。可能就直接在电脑上写代码,了解大致要实现的功能就行,就想着边写边改,有不会的上网百度就行,但是从软件项目的角度来看,这种完成的东西不能称之为软件,就只是一点程序代码而已,如果要称之为软件的话还缺少很 多的东西,因此,就借着这个小项目来具体按照软件工程的角度去实现它,完成它前期要做到对功能进行分析,对各个阶段的进行规划,进行需求分析,可行性分析等等,前期的准备都是为了后面做的时候能事半功倍。我做的这个小项目大致按照软件工程项目的流程走了一次,但是中间也有许多的问题和被忽视的东西,测试的话我直接是在编译器上写一段代码测试一段,而没有具体的进行单元测试,因为代码量不大,如果真正的大项目的话,我觉得单元测试是必不可少的。这次的作业完善的还是不好,只是让我能够体会到做一个项目不仅仅是写代码,更重要的是分析和规划我们的时间和需求功能,只有把这些基础工作做好了,右面的编程,测试就会很容易。

参考文献:java io 流详解https://www.cnblogs.com/xll1025/p/6418766.html
参考代码 :http://www.cnblogs.com/LYhah/p/9642534.html

你可能感兴趣的:(第一次 作业 workcount (基础功能实现))