WordCount项目

项目地址:我的GIT项目地址

  • PSP表格


- ###分析:发现自己预估的时间和实际时间差别较大。因为语言上的熟悉程度不够,所以浪费了很多时间在学习相关语法和修改Bug中,还有慢慢的修改自己的错误逻辑。在准备阶段、测试和修改方面耗费了很多时间,造成了开发过程时间较长。自己实际写文档速度与预估的不太一致,包括写设计、测试、总结文档等。主要是对于这些东西的熟练度不够,平常写的少,一下子要写也写的特别的慢。

  • 项目思路

    • 功能的确定:

      • 对程序设计语言源文件统计字符数、单词数、行数。统计结果以指定格式输出到默认文件中。
      • 可执行程序命名为:wc.exe,该程序处理用户需求的模式为:wc.exe [parameter] [input_file_name]。
      • 一个测试程序命名为:wc_1.exe ,该程序直接运行即可运行设定好测试数据。
      • 存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录。
      • 其他自定义存储文件放在与wc.exe同目录下。
    • 设计流程:

      • 用户输入

      • 数据获取

        • find the target
          • X.c
          • X.txt
        • get the command
          • -c
          • -w
          • -l
          • -o
      • 非法判断

        • input wrong command!
      • 错误提示

        • can't find the file!
      • 功能执行

        • use BufferrReader to count the numbers of char in every line and sum it.(-c)
        • use split function to divided every line with space and " , " .(-w)
        • use readLine function to add lines.(-l)
        • use BufferrWriter and FileWriter to write.(-o)
      • 数据显示

        • the charNum is
        • the wordNum is
        • the lineNum is
      • 数据存储

    • 注意事项:

      • 对于字符统计功能所需要注意的地方:空格,水平制表符,换行符,均算字符。
      • 对于单词统计所需要注意的地方:由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。
      • 其他注意事项:多个参数可以共用同一个输入文件,-o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数。
  • 设计实现

    • 基本分类

      • 程序只有一个类,所有的功能放在不同的方法里,并在主函数中被调用。
      • CharCount类负责统计字符个数。
      • WordsCount类负责统计单词个数。
      • LineCount类负责统计行数。
      • OutFile类负责将相关信息写入文档。
    • 运行版本

      • 所有逻辑判断写在主函数里,在主函数中调用其他方法。
    • 测试版本

      • 将逻辑判断写在Command类中,在Command类中根据需求调用其他4个不同的类。
      • 增加一个Test类,里面写了10种测试。
      • 通过在主函数调用Test类的方法来自动进行测试。
  • 部分代码

主函数逻辑判断:

	//find the target
	for(int i = 0; i < str.length; i++) {
		if(str[i].endsWith(".c")) {
			fileName=str[i];
			flag1=true;
		}
		else if(str[i].endsWith(".txt")&&str[i-1].equals("-o")) {
			outFile=str[i];
		}
	}
	int j=0;

	//find the function and do it
	for(int i = 0; i < str.length; i++) {
            if(str[i].equals("-c")) {
        	if(!flag1) {
        		System.out.println("input wrong command!");
        		System.exit(0);
        	}
        	flag2=true;
                charNum=CharCount(fileName);
                if(charNum<0)return;
                func[j]="字符数为:"+charNum+"\r\n";
        		j++;
            }
            else if(str[i].equals("-w")) {
            	if(!flag1) {
            		System.out.println("input wrong command!");
        		System.exit(0);
        	}
            	flag2=true;
            	wordNum=WordsCount(fileName);
            	if(wordNum<0)return;
                func[j]="单词数为:"+wordNum+"\r\n";
        	j++;
            }
            else if(str[i].equals("-l")) {
            	if(!flag1) {
            		System.out.println("input wrong command!");
        		System.exit(0);
        	}
            	flag2=true;
                lineNum=LineCount(fileName);
                if(lineNum<0)return;
                func[j]="行数为:"+lineNum+"\r\n";
        	j++;
            }
            else if(!flag2) {
            	System.out.println("input wrong command!");
    		System.exit(0);
            }
	}
	OutFile(fileName,outFile,func,j);

单词统计

//use split function to divided every line with space and , .
	public static int WordsCount(String fileName) {
		int wordNum= 0;
		String line=null;
		try {
			FileReader fr = new FileReader(fileName);  
			BufferedReader br = new BufferedReader(fr);
			while((line = br.readLine()) != null){
				wordNum+=line.split(" |,").length;
			}
			br.close();
			fr.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("can't find the file!");
    		System.exit(0);
			
		} 
		System.out.println("the wordNum is: " + wordNum);
		return wordNum;
	}
  • 测试设计

    分为正确和错误指令,对每种情况进行多次测试,尽量的将每种情况考虑进去了,但是测试的次数还不够。
    • 正确输入

      • 5种不同的正确输入

    • 错误输入

      • 5种不同的错误输入

如图所示:

  • 运行效果

运行版本cmd运行:
测试版本cmd运行:

  • 反思总结

    • 通过这一次的项目,我学习了很多我从前没有了解过得东西。包括利用PSP文档对自己的整个项目开发过程进行预估分析反思,git/博客园等平台和工具。同时我也尝试了把java项目转成exe,虽然在实施这些东西中遇到了很多问题,但是exe目前也能够运行了。(按照博客中的步骤一步一步来的,将jre打包进了exe里。但是在没有安装java环境的电脑里,还是运行的有问题,会提示没有jvm!)在这个项目的实现过程中,也遇到了很多问题,经过了自主学习和长时间的调试测试,问题基本已经解决了。在测试设计上,因为软件测试方面,现在接触还不是很多,也不太擅长,我尽量用我自己能够思考到最全面的方式进行了测试。

    • 我会好好利用这些网上资源,在这个开放的平台上阅读更多文章、提升自我。在开放的社区,浏览更多优秀的代码,项目。

  • 参考相关资料:

posted @ 2018-09-30 14:31  siya  阅读(334)  评论(2编辑  收藏  举报