zoukankan      html  css  js  c++  java
  • 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+"
    ";
            		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+"
    ";
            	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+"
    ";
            	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!)在这个项目的实现过程中,也遇到了很多问题,经过了自主学习和长时间的调试测试,问题基本已经解决了。在测试设计上,因为软件测试方面,现在接触还不是很多,也不太擅长,我尽量用我自己能够思考到最全面的方式进行了测试。

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

    • 参考相关资料:

  • 相关阅读:
    CSS之Position详解
    线性回归预测法linear regression
    置信区间
    asp.net MVC 中使用dataannotation验证Model
    决策树Decision Tree
    Net反射在项目中的应用
    C#并行编程并行任务
    一个特殊的产品价格制定法(市场决定价格)
    Json
    线性规划模型(线性优化模型)Linear programming
  • 原文地址:https://www.cnblogs.com/SiyaYan/p/9729459.html
Copyright © 2011-2022 走看看