• WordCount 记第一次系统分析与设计课程个人项目作业


    作业成果

    作业源码-java-gitee.

    作业要求

    老师源作业要求
    根据WordCount的需求描述,先编程实现,再编写单元测试,最后撰写博客。

    WordCount需求分析

    WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
    
    可执行程序命名为: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参数。

    编码过程

    PSP表格

    ||||||||||||||
    |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
    |PSP2.1 |PSP阶段|预估耗时(分钟)|实际耗时(分钟)
    |· Planning | · 计划 | 15 | 10
    |· Estimate | · 估计这个任务需要多少时间 | 30 |15
    |· Development | · 开发 | 120 | 18
    |· Analysis| · 需求分析 (包括学习新技术) | 5 | 5
    |· Design Spec | · 生成设计文档 | 5 | 5
    |· Design Review | · 设计复审 (和同事审核设计文档) |10 |0
    |· Coding | · 代码规范 (为目前的开发制定合适的规范)| 10 | 0
    |· Code Review |· 具体设计 | 15 |20
    |· Test | · 具体编码 | 60| 100
    |· Reporting | · 代码复审 | 20 | 60
    |· Test Report | · 报告 |30|60
    |· Size Measurement | · 测试报告 |30 | 10
    |· Postmortem & Process | · 计算工作量 | 10| 15
    |· Improvement Plan | · 事后总结, 并提出过程改进计划 |10 | 5
    | | · 合计 | 370 | 323

    解题思路

    对于题目中涉及到的几点需求:统计字符数、单词数、行数、向文件中写入统计结果。第一感觉要用java的io流进行解决。另外查询了java项目如何导出exe文件的实现过程,以及如何在命令行中接受参数等疑问。
    

    IDE环境

    Windows 10 + idea -使用JAVA语言
    

    程序设计

    设计了四个类来完成这项任务
    Count.class                 //用于接受文件统计后的结果
    Output.class                //用于将统计输出到指定文件中
    Wc.class                    //核心算法,用于实现文件的统计
    WordCount.class             //主方法,接受并判断命令行参数
    

    UML类图

    关键代码说明

    Count类

    package WordCount;
    
    public class Count {
        public int LineCount;   //文件行数
        public int WordCount;   //单词个数
        public int CharCount;   //字符个数
    
        public int getLineCount() {
            return LineCount;
        }
    
        public int getWordCount() {
            return WordCount;
        }
    
        public int getCharCount() {
            return CharCount;
        }
    
        public Count(int lineCount, int wordCount, int charCount){
            this.LineCount=lineCount;
            this.WordCount=wordCount;
            this.CharCount=charCount;
        }
    
    }
    

    Wc类

    package WordCount;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Wc {
        public static Count wc(String inputFile) throws IOException {
            Count count=new Count(0,0,0);//生成Count对象
            String txt = "";//文件内容
            String[] buffer;//存储处理后的txt内容
            File dir=new File(inputFile);
            BufferedReader bf = new BufferedReader(new FileReader(dir));//生成缓冲字符输入流
            while((txt=bf.readLine())!=null){
                buffer=txt.split(",| |	|
    ");//处理 ,空格 制表符 换行符
                for(int i=0;i<buffer.length;i++){
                    if(!buffer[i].equals(""))
                        count.WordCount++;//统计单词数
                }
                count.LineCount++;//统计行数
                count.CharCount+=txt.length();//统计字符数
            }
            bf.close();
            return count;//返回count对象
        }
    }
    

    测试设计过程

    测试用例

    共十个测试用例,其中8个用于命令行中命令参数测试,2用于输入文件的内容测试
    
    • 命令行参数测试用例(默认输出文件为根目录下的result.txt文件下)
      • wc.exe -c -l -w -o 456.txt 123.c
      • wc.exe -c -o 123.txt 123.c
      • wc.exe -c -l -w 456.c
      • wc.exe -c -l -w 123.c
      • wc.exe -o 123.txt
      • wc.exe -o 123.c
      • wc.exe 123.txt
      • wc.exe 123.c
    • 文件内容
      • 第一个123.c
    #include<stdio.h>
    main(){
        printf("Hello World")
    }
    
    - 第二个123.c
    
    内容为空
    

    测试结果

    • 第一个123.c下依次运行上述测试用例得到如下结果

      • wc.exe -c -l -w -o 456.txt 123.c
      • wc.exe -c -o 123.txt 123.c
      • wc.exe -c -l -w 456.c(抛出异常)
      • wc.exe -c -l -w 123.c
      • wc.exe -o 123.txt
      • wc.exe -o 123.c
      • wc.exe 123.txt
        系统无反应
      • wc.exe 123.c
        系统无反应
    • 第二个123.c下依次运行上述测试用例得到如下结果,除统计结果不同外,其他均相同,所以在此省略。

    测试结论

    • 1、缺少相应的提示性语言来告诉使用者运行结果。
    • 2、当用户使用 -o 命令指定输出文件时,没有坚持输出文件是否合法。
    • 3、当遇到文件内容较多,文件较大时,读取速度较慢。

    作业心得

         学习系统分析与设计这门课后,对于软件工程有了些许了解和自己的认识,尤其对于代码规范、文档设计、单元测试有了很多了解。在本次作业的完成过程中,对于代码的规范化设计和注释的专业都有着重注意,对于代码复审和软件测试对于软件的重要性有了新的认识,在我完成了最初的代码编写后,在代码复审中发现了很多不必要和冗余的代码,没有做到代码复用和应用面向对象的思想,所以重构了代码成为现在这个版本。在测试时也发现了很多漏洞,和之前没有考虑的地方,希望在以后的项目实践中,可以从本次作业上吸取教训和经验。完成更满意的项目。
    

    参考文献

    使用Intellij Idea生成可执行文件jar,转为exe文件步骤

  • 相关阅读:
    Flutter 卡在 package get 的解决办法
    使用datepicker和uploadify的冲突解决(IE双击才能打开附件上传对话框)
    WINDOWS SERVER IE使用FLASH PLAYER的方法
    WAMP虚拟目录的设置
    手机平板等移动端适配跳转URL的js代码
    Eclipse几个版本号的区别
    Eclipse IDE for Java EE Developers 与 Eclipse Classic(Eclipse Standard)区别
    给flash添加A链接
    如何用CSS实现在新窗口打开链接?
    远程桌面不能连接,提示awgina.dll取代错误的解决办法
  • 原文地址:https://www.cnblogs.com/Myemperor/p/9690816.html
Copyright © 2020-2023  润新知