zoukankan      html  css  js  c++  java
  • 个人项目作业WC(JAVA)

    GitHub地址:https://github.com/1666403186/WC

    一、题目描述

    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的定义为文件的路径

    三、解题思路

         看到题目后,我考虑了许久使用自己熟悉的C语言还是刚学不久的JAVA语言。综合考虑,我还是选择了后者。因为我想借此作业提高一下自己的JAVA水平。在完成作业的过程中,因为自己打的基础知识不牢固,还是犯了很多错误。期间,我也多次询问同学,学长我遇到的困难,当然,是在我多次检查还是解决不了我机会问。遇到问题,我自己会先思索,自己看看JAVA书籍或者在博客网站上搜索相关资料。为了完成这个作业,我还是花费了很多时间,也收获了很多,但是也只是实现了基础功能和一个附加功能。关于界面设计我还是不了解,以后会尝试去实现它。

    四、设计实现过程

         定义了一个类,包括代码行数,注释行,空行数。在按行读取时便统计代码行,注释行,空行数,然后将三个数据返回。读取完后全部存于集合List。然后遍历集合统计字符数,行数,单词数。最后再主函数实现,通过多重if else 结构实现选择。

    五、代码说明

       1.定义类

    public class SpecialLine {
        int nodeLine;
        int codeLine;
        int emptLine;
    }
     
    
    

    2.读取文本文件内容并返回代码行数注释行数空行数

     /**
         * 根据指定路径获取文本内容
         * 并对每一行读取内容进行代码种类判断
         *
         * @param path
         * @throws IOException
         */
        private static SpecialLine GetFileContentByPath(String path) throws IOException {
            //读取指定路径对应的文件内容
            InputStream is = new FileInputStream(path);
            BufferedReader in = new BufferedReader(new InputStreamReader(is));
            SpecialLine specialLine=new SpecialLine();
            //buffer用于缓存从文件中读取的内容
            StringBuffer buffer = new StringBuffer();
    
            //将文件内容按行读取,并将每一行存入fileTxt中
            while ((lineTxt = in.readLine()) != null) {
    
    
                String regxNodeBegin = "(\S?)\s*/\*.*";
    
                String regxNodeEnd = "(.*\*/\s*)\S?";
    
                String regxNode = "(\s*)(\S?)(//+).*";//使用正则表达式判断注释行
    
                if (lineTxt.matches(regxNodeBegin) || lineTxt.matches(regxNodeEnd)
    
                        || lineTxt.matches(regxNode)) {
                    ++specialLine.codeLine  ;
                }
                else if (lineTxt.length() > 1) // 判断代码行
    
                {
                    ++specialLine.codeLine;
    
                }
                else {
                    ++specialLine.emptLine;
    
                }
    
                fileTxt.add(lineTxt);
            }
        return specialLine;
        }

    3.获取字符总数

     /**
         * 获取文本所有字符(包括空格)的总数
         *
         * @return
         */
        private static int GetCharacterCount() {
            int count = 0;
            for (String str : fileTxt) {
                count += str.length();
            }
            return count;
        }

    4.获取字符单词总数

     /**
         * 获取文本所有单词的总数
         *
         * @return
         */
        private static int GetWordCount() {
            int count = 0;
            for (String str : fileTxt) {
                String[] words = str.split(" ");
                count += words.length;
            }
            return count;
        }

    5.获取文本行数

    /**
         * 获取文本的行数
         *
         * @return
         */
        private static int GetLineCount() {
            return fileTxt.size();
        }

    6.main函数

     public static void main(String[] args) throws IOException {
    
    
            do {
    
                System.out.println("请输入 [optation] [path]");
                System.out.println("如 -c 测试代码.txt");
                Scanner scanner = new Scanner(System.in);
    
    
                if (scanner.hasNextLine()) {
                    String[] str = scanner.nextLine().split(" ");
                    String selection = str[0];
                    String path = "E:\IDEA\testfile1\" + str[1];
    
    
                    SpecialLine sl= GetFileContentByPath(path);
    
                    if (selection.equals("-c"))
                        System.out.println("字符数(包括空格)是:" + GetCharacterCount());
                    else if (selection.equals("-w"))
                        System.out.println("单词数是:" + GetWordCount());
                    else if (selection.equals("-l"))
                        System.out.println("行数是:" + GetLineCount());
                    else if (selection.equals("-a")) {
                        System.out.println("注释行数是:"+ sl.nodeLine);
                        System.out.println("代码行数是:"+ sl.codeLine);
                        System.out.println("空行行数是:"+ sl.emptLine);
                    }
    
    
                }
             else  System.out.println("找不到目标文件!请重新输入!");
            }while (true);
        

    六、测试运行

    七、PSP
    
    

      

    
    

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

            40

                 50

    · Estimate

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

           600

         900

    Development

    开发

             240

         300

    · Analysis

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

             1200

                2400

    · Design Spec

    · 生成设计文档

                10

                  0

    · Design Review

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

                 10

                   0

    · Coding Standard

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

                 5

                  10

    · Design

    · 具体设计

                30

                  20 

    · Coding

    · 具体编码

                30

                   60

    · Code Review

    · 代码复审

                60

               120     

    · Test

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

                60

               120

    Reporting

    报告

                25

                  20

    · Test Report

    · 测试报告

                10

                  0

    · Size Measurement

    · 计算工作量

                 10

                  0

    · Postmortem & Process Improvement Plan

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

                  20

                   25

    合计

     

               2350

     

              4025

     

    八、项目小结
    总结下来:(1)在查阅资料的过程中,网络知识的碎片化很难让自己清晰明白知识点。(2)JAVA相比与JAVA来说,第一感觉的确是方便了很多,因为有很多现有的函数给予我们使用。当然需要我们理解透彻方法的用法。
    (3)还是需要学会Debug,这样在出现问题的时候能清晰明白问题出现在哪里。(4)还是做一些小项目才能快速学习一些知识和自己的编程能力。

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/huihui0820/p/12562130.html
Copyright © 2011-2022 走看看