zoukankan      html  css  js  c++  java
  • 第一次 作业 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功能统计;

    设计思路图:

    运行截图:

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

    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
  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/3106Likai/p/9692543.html
Copyright © 2011-2022 走看看