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

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

项目要求:

对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

可执行程序命名为:wc.exe,该程序处理用户需求的模式为:

wc.exe [parameter] [input_file_name] ,存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下

基本功能:

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参数

基本功能列表:

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

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

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

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

psp开发耗时

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30  30

Estimate

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

 300  300

Development

开发

 200  200

 Analysis

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

 100  100

Coding Standard

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

 30  30

Design

具体设计

 30  30

Coding

具体编码

 100  100

Code Review

代码复审

 30  30

Test

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

 20  20

 Postmortem & Process Improvement Plan

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

 30  30

设计思路:

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

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

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

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

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

设计思路图:

运行截图:

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

部分代码:

/*
         *  获取文件目录名
         */
        
        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);
             }
          }

总结:

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

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

猜你喜欢

转载自www.cnblogs.com/3106Likai/p/9692543.html