WC个人项目(JAVA实现)
Posted yejianting
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)字符统计
(2)单词统计
(3)行数统计
(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<a;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实现)的主要内容,如果未能解决你的问题,请参考以下文章