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(",| |\t|\n");//处理 ,空格 制表符 换行符
            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文件步骤

猜你喜欢

转载自www.cnblogs.com/Myemperor/p/9690816.html