WC个人项目(JAVA实现)

一、Github地址:https://github.com/l67t/wc

二、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 40
· Estimate · 估计这个任务需要多少时间 30 40
Development 开发 1155 1220
· Analysis · 需求分析  50 60
· Design Spec · 生成设计文档 30 40
· Design Review · 设计复审  20 20
· Coding Standard · 代码规范 15 30
· Design · 具体设计 80 60
· Coding · 具体编码 750 800
· Code Review · 代码复审 30 30
· Test · 测试(自我测试,修改代码,提交修改) 180 180
Reporting 报告 110 130
· Test Report · 测试报告 60 60
· Size Measurement · 计算工作量 20 30
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 40
合计   1295 1390

三、解题思路

由于之前的JAVA课设有跟这次项目相似的功能,因此我选择用JAVA来实现。

功能分析

(1)统计字符数(通过计算文本文档中内容的长度实现)

(2)统计单词数(通过统计单词间的空格数实现)

(3)统计行数(通过统计‘\n’的数目实现)

(4)统计空行数、注释行数、代码行数(利用正则表达式实现)

(5)支持通配符(未实现)

(6)图形界面(未实现)

(7)递归处理目录下符合条件的文件(未实现)

在设计图形界面时我遇到了一些难题,首先是框架,我构建的窗口一定需要先调整窗口大小才能显示内容,我的的确确按照查阅的方法先设置窗口大小setSize(),然后再显示窗体setVisible(),可是还是不行,然后就是方法和函数的调用,但由于前面的代码,我是先判断“-c、-l、-w"这些指令来启用别的类的方法,然后路径的输入是通过输入指令的判断完成,导致制作图形界面时不知道如何调用和把通过选择文件时用getPath()获得的路径输入,需要将前面代码大部分重新编译才能修改,最后只能放弃图形界面,虽然可以在图形界面的类中把之前统计用的方法都塞进去,但是这样代码又太过臃肿,只是在重复前面的代码,没有利用到别的类,变成完全分离出来完成前面功能的类,不过最主要的还是个人编码能力不足,前期没有做好功能规划,后期修改乏力,正如老师在项目要求中写的一样,Practice makes perfect. 没有捷径可走,就是练习、练习再练习!经过这次的简单个人项目之后,发现我的编程能力真的是十分低,因此我今后要努力锻炼我的编程能力,多练多思考,提高水平。

四、设计实现过程

项目主要有六个类:

1.WC(主类)

2.CodeCount(实现字符统计)

3.WordCount(实现单词统计)

4.LineCount(实现行数统计)

5.Extra(实现扩展功能,对空行数、注释行数、代码行数的统计)

 五、测试运行

文件的测试

 

 

(1)字符统计

WC个人项目(JAVA实现)_第1张图片

 

 

(2)单词统计 

WC个人项目(JAVA实现)_第2张图片

 

 

 

(3)行数统计

WC个人项目(JAVA实现)_第3张图片

 

 

 

(4)空行数、注释行数、代码行数的统计

WC个人项目(JAVA实现)_第4张图片

 

 

import java.util.Scanner;

public class WC {

    public static void main(String[] args) {
        System.out.println("*********************************************");
        System.out.println("指令说明:");
        System.out.println("wc.exe -c  //返回文件的字符数");
        System.out.println("wc.exe -w  //返回文件的单词数");
        System.out.println("wc.exe -l  //返回文件的行数");
        System.out.println("wc.exe -a  //返回文件的空行数、代码行数、注释行数");
        System.out.println("*********************************************");    
        Scanner scan=new Scanner(System.in);
        String order=null;
        while((order=scan.nextLine())!="") {
        switch(order) {
        case "wc.exe -c":System.out.println("请输入文件路径:");
                         new Codecount();break;
        case "wc.exe -w":System.out.println("请输入文件路径:");
                         new Wordcount();break;
        case "wc.exe -l":System.out.println("请输入文件路径:");
                         new Linecount();break;
        case "wc.exe -a":System.out.println("请输入文件路径:");
                          new Extra();break;                
        default:System.out.println("指令输入错误,请重新输入指令:");
        }
        
    }
        scan.close();
        
}}
import java.io.File;
import java.io.FileReader;
import java.util.Scanner;

public class Codecount {
    Scanner c=new Scanner(System.in);{
    String Pathname=null;
    while((Pathname=c.nextLine())!="") {
    File file=new File(Pathname);{
    try {
        FileReader fr=new FileReader(file);
        char temp[]=new char[4096];
        int a= fr.read(temp);
        if(a==-1) a=a+1;
        System.out.println("文件的字符数为"+a);
        fr.close();
        }catch(Exception e) {
            System.out.println("路径不正确,请重新输入路径:");
        }
    
                                 }
    
    }

}}
import java.io.File;
import java.io.FileReader;
import java.util.Scanner;

public class Wordcount {
    Scanner w=new Scanner(System.in);
    String Pathname=null;{
    while((Pathname=w.nextLine())!="") {
    File file=new File(Pathname);{
    try {
        FileReader fr=new FileReader(file);
        char temp[]=new char[4096];
        int b=0;
        int a= fr.read(temp);
        for(int i=0;i) {
            if(temp[i]==' ')
                b++;
            }
        if(a==-1) b=-1;
        System.out.println("文本的单词数为"+(b+1));
        fr.close();
    }catch(Exception e) {
        System.out.print("文件路径输入错误,请重新输入:");
    }
}}}}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Scanner;

public class Extra {
    Scanner e=new Scanner(System.in);
    String Pathname=null;
    String kregex="(\\s)*[{]?";{
    while((Pathname=e.nextLine())!="") {
        File file=new File(Pathname);{
        try {
            String s=null;
            int a=0,c=0,b=0;
            FileReader fr=new FileReader(file);
            BufferedReader bufr=new BufferedReader(fr);
            while((s=bufr.readLine())!=null) {
                if(s.contains("//"))
                    a++;
                else if(s.matches(kregex))
                    b++;
                else c++;
                }                                                               
            System.out.println("文本的空行数为:"+a);
            System.out.println("文本的注释行数为:"+b);
            System.out.println("文本的代码行数为:"+c);
            fr.close();
            bufr.close();
            }
        catch(Exception e) {
            e.printStackTrace();
            System.out.println("文件路径输入错误,请重新输入:");
                           }
                                      }
                                        }
                        
                    }
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Scanner;
public class Linecount {
    Scanner l=new Scanner(System.in);
    String Pathname=null;{
    while((Pathname=l.nextLine())!="") {
    File file=new File(Pathname);{
        try {
        FileReader fr=new FileReader(file);
        BufferedReader bufr=new BufferedReader(fr);
        int i=0;
        while((bufr.readLine())!=null) {
            i++;
        }
        System.out.println("文本行数为"+i);
        fr.close();
        bufr.close();
        }catch(Exception e) {
            System.out.println("文件路径输入错误,请重新输入:");
        }
    }
}}}

 

你可能感兴趣的:(WC个人项目(JAVA实现))