博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件测试第二周作业
阅读量:5160 次
发布时间:2019-06-13

本文共 5155 字,大约阅读时间需要 17 分钟。

一,github地址

https://github.com/lc-xie/WordCount

二,PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 25  25

· Estimate

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

 25   25

Development

开发

200  240

· Analysis

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

 30  30

· Design Spec

· 生成设计文档

 -  -

· Design Review

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

 -  -

· Coding Standard

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

 -  -

· Design

· 具体设计

 40  40

· Coding

· 具体编码

 200 240

· Code Review

· 代码复审

 60  60

· Test

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

60  100

Reporting

报告

 150  180

· Test Report

· 测试报告

 60  60

· Size Measurement

· 计算工作量

 30  20

· Postmortem & Process Improvement Plan

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

 60  60
 

合计

 940  1080

 

三,思路

  1. 先将基本功能实现,再考虑扩展功能
  2. 实现WordCountTool工具类,这个类用于计算各种数值,将结果写入文件
  3. 实现命令行参数解析

四,程序的实现过程

程序只实现了基本功能,包含两个类,一个Main类和一个工具类。在Main类中获取输入,并将数据传入工具类进行计算,工具类有两个函数,一个用于计算单词数、行数和字符数,一个用于输出结果到文件。

五,代码

1、main函数

  第一步获取目标文件的地址

  第二步获取操作序列

  第三步获取导出结果的文件地址,若不导出则直接回车

  第四步调用工具类进行计算

import java.io.File;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner=new Scanner(System.in);        System.out.print("请输入目标文件地址:");        String filePath=scanner.nextLine();        System.out.print("请输入操作需求(以空格隔开,如:c l):");        String[] charArr=scanner.nextLine().split(" ");        System.out.print("若需要输出到本地文件,请输入目标文件地址,不需要请直接回车:");        String outputFile=scanner.nextLine();        File file=new File(outputFile);        CountTool countTool=new CountTool();        countTool.count(filePath);        for (String c:charArr){            switch (c){                case "c":                    System.out.println("字符数:"+countTool.charCount);                    break;                case "l":                    System.out.println("行数:"+countTool.lineCount);                    break;                case "w":                    System.out.println("单词数:"+countTool.wordCount);                    break;                default:break;            }        }        if (file.exists()){            countTool.ouputToFile(file,charArr);        }    }}

2、CountTool类

  主要存有三个计算结果的变量和两个函数

/** * Created by stephen on 18-3-19. * 统计文件的单词数,字符数,行数 */public class CountTool {    private String aimFile;    public int lineCount=0;//行数    public int charCount=0;//字符数    public int wordCount=0;//单词数        .....}

 

3、count()函数

  此函数用于计算行数、单词数和字符数

  首先判断目标文件是否存在,不存在则输出“目标文件不存在!请重新输入”并返回

  然后一行行读文件,每读一行,lineCount++;同时通过s.length计算本行的字符数,再通过遍历循环找到所有的“ ”和',"来判断单词数量。

  最后关闭文件读写流。

/**     * 计算各个值     * @param filePath 代码文件的路径     */    public void count(String filePath){        try {            File file=new File(filePath);            if (!file.exists()){                System.out.println("目标文件不存在!请重新输入");                return;            }            aimFile=file.getName();            FileInputStream fis=new FileInputStream(file);            InputStreamReader isr=new InputStreamReader(fis, "UTF-8");            BufferedReader br = new BufferedReader(isr);            String s="";            while ((s=br.readLine())!=null) {                charCount += s.length();//字符个数就是字符长度                //wordCount += s.split(" ").length;//split() 方法用于把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数                if(s.length()>1){                    for (int i=1;i

 

4、ouputToFile()函数

  将结果输出到指定文件

  获取结果后,遍历操作序列,将对应的数据写入

/**     * 将数据写入文件     * @param filePath     * @param arr 输入的操作数组,'o','c','w','s'     * @return     */    public boolean ouputToFile(File filePath,String[] arr){        BufferedWriter bw=null;        try {            FileWriter fw = new FileWriter(filePath.getAbsoluteFile());            bw = new BufferedWriter(fw);        }catch (IOException e){            e.printStackTrace();            return false;        }        for (String c:arr){            switch (c){                case "c":                    try {                        bw.write(aimFile+",字符数:"+charCount+'\n');                    }catch (IOException e){                        e.printStackTrace();                        return false;                    }                    break;                case "l":                    try {                        bw.write(aimFile+",行数:"+lineCount+'\n');                    }catch (IOException e){                        e.printStackTrace();                        return false;                    }                    break;                case "w":                    try {                        bw.write(aimFile+",单词数:"+wordCount+'\n');                    }catch (IOException e){                        e.printStackTrace();                        return false;                    }                    break;                default:break;            }        }        try {            bw.close();        }catch (IOException e){            e.printStackTrace();        }        return true;    }

六,测试设计过程

  测试代码文件:input.txt

  测试输出文件:out.txt

  input.txt文件内容:

  

  测试一:input.txt -c

  

  测试二:input.txt -w

  

  测试三:input.txt -l

  

  测试四:input.txt -c -w

  

  测试五:input.txt -l -w

  

  测试六:input.txt -c -l

  

  测试七:input.txt -c -w -l

  

  测试八:input.txt -c -w out.txt

  

  

  测试九:input.txt -c -w -l out.txt

  

  

  测试十:input.txt -l out.txt

  

  

 

七,参考文献

  http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 

转载于:https://www.cnblogs.com/stephenxlc/p/8605743.html

你可能感兴趣的文章
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
CSS属性值currentColor
查看>>
Real-Time Rendering 笔记
查看>>
多路复用
查看>>
spring IOC装配Bean(注解方式)
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
利用SignalR来同步更新Winfrom
查看>>
反射机制
查看>>
CocoaPod
查看>>
BZOJ 1251: 序列终结者 [splay]
查看>>
5G边缘网络虚拟化的利器:vCPE和SD-WAN
查看>>
MATLAB基础入门笔记
查看>>
【UVA】434-Matty's Blocks
查看>>
Android开发技术周报 Issue#80
查看>>