zoukankan      html  css  js  c++  java
  • 软件工程:java实现wc项目基本功能

    项目相关要求

    项目地址:https://github.com/xiawork/wcwork
    实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
    具体功能要求:

    基本功能列表:

      wc.exe -c file.c //返回文件 file.c 的字符数

      wc.exe -w file.c //返回文件 file.c 的词的数目

      wc.exe -l file.c //返回文件 file.c 的行数

    扩展功能:

      -s 递归处理目录下符合条件的文件。

      -a 返回更复杂的数据(代码行 / 空行 / 注释行)。

    空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

    代码行:本行包括多于一个字符的代码。

    注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

    高级功能:

      -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

      返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

    PSP

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 60 90
    · Estimate · 估计这个任务需要多少时间 60 120
    Development 开发 900 1360
    · Analysis · 需求分析 (包括学习新技术) 60 90
    · Design Spec · 生成设计文档 30 50
    · Design Review · 设计复审 (和同事审核设计文档) 30 40
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 15
    · Design · 具体设计 60 40
    · Coding · 具体编码 200 210
    · Code Review · 代码复审 30 40
    · Test · 测试(自我测试,修改代码,提交修改) 100 110
    Reporting 报告 120 150
    · Test Report · 测试报告 60 80
    · Size Measurement · 计算工作量 30 40
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 20
    合计 1760 2455

    解题思路:

    程序首先通过编写控制台,通过输入的文件路径获得文件,然后通过BuffeInputStream和FileReader对文件进行操作,获得文件具体对象,
    通过这个对象给予我们的内容,在另一个方法类里调用相应的方法创建获取字符数,单词数,总行数的方法readcharacter(),readword(),readline(),
    然后通过main函数运行,得出所要结果。

    困难和解决

    在设计方法时,使用正则表达式不准确,经常出现格式错误,后面通过大量搜集查找相关问题,初步解决了格式出错的问题
    在文件目录输入过程中,忘记了控制台的编写,导致后面常出现编译成功,但是没有文件输入这功能
    在文件调用过程中不熟悉具体内涵,对一些操作总是不明了

    设计思路

    本项目包含两个类,一个是包含主方法的wc类,一个是包含方法功能的fuctionn类。

    Wc的main函数表示

    public static void main(String[] args) throws IOException {
        File file=fuction.getFile();    //获取文件
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file)); //读取文件 
        FileReader reader = new FileReader(file);
        int fileLen = (int)file.length();
        char[] chars = new char[fileLen];  
        reader.read(chars);
        String txt = String.valueOf(chars);
        System.out.println("请输入命令:"); 
     Scanner sc=new Scanner(System.in);  //创建键盘录入对象
        String line = sc.nextLine();       //具体输入实例对象
        switch(line) {
        case"-l":
        	fuction.readline(txt); 
        	break;
        case"-w":
        	fuction.readword(txt);
        	break;
        case"-c":
        	fuction.readcharacter(txt);
        	break;
        } 
        bis.close();       //关流释放资源
    }
    

    fuction类中的getfile()方法

    public static File getFile() {
    		    System.out.println("请录入一个文件路径:");  
    	        Scanner sc=new Scanner(System.in);   //创建键盘录入对象
    	        while(true) {
    	            String line=sc.nextLine();     // 接收键盘录入的路径
    	            File file=new File(line);       //封装成File对象,对其进行判断
                        if(!file.exists()) {
    	            System.out.println("您录入的文件路径不存在,请重新录入");
    	            }else if(file.isDirectory()) {
    	                System.out.println("你录入的是文件夹路径,请重新录入");
    	            }else {
                           return file;	
    	            }
    	      }
    	}
    

    fuction中的readline()方法

    用正则表达式,将文件内容分割成一个个的数组,再通过对数组的操作得到想要的结果

    public static void readline(String file){
    		   String[] array = file.split("
    ");
    		   int len = array.length;
    		   System.out.print("代码行数为:" + len);
    	  }
    

    fuction中的readword()方法

    public static void readword(String file) {
    		int i;
    		String[] array = file.split("\s+");
    		   int len = array.length;
    		   System.out.print("单词数为:" + len);
    	}
    

    fuction中的readcharacter()方法

     public static void readcharacter(String file) {
    		  int i;
    			String[] array = file.split("\w");
    			   int len = array.length;
    			   System.out.print("字符数为:" + len);
    	}
    
    

    测试结果




    代码覆盖率

    总结

    通过这次项目的练习,我发现我对编写过程的不熟悉,编程语言的基础很薄弱,有很多的编程常识都不清楚,很多东西都要学习,很多以前学习过的基本内容也要重新学习一遍,第一次写项目,对这个过程很不熟悉,也因此花费了许多不必要的时间,所幸通过身边同学们的帮助,让我的项目进程有所推进,而在这个过程中,我也学习到了很多的知识,对项目开发这类多少也有了些许的经验。以后我也也需要多多努力,尽力的提升自己。

  • 相关阅读:
    Java爬取丁香医生疫情数据并存储至数据库
    mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
    java.lang.UnsatisfiedLinkError: /usr/openv/java/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
    Linux下打包压缩war、解压war包和jar命令
    Linux常用基本命令大全
    Git在eclipse中的配置
    CentOS 7 安装Rabbitmq
    Jmeter测试普通java类说明
    单例模式的7中写法
    Hyperledger Fabric 1.0 学习搭建 (五)--- 启动Fabric多节点集群
  • 原文地址:https://www.cnblogs.com/4702ace/p/9647997.html
Copyright © 2011-2022 走看看