个人项目WC(java实现)

WC个人项目(JAVA实现)

一、Github地址:https://github.com/Gvonte/WC.exe

 


二、PSP表格

 

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

 

三、解题思路

  ①命令行参数处理

  在看到命令行的格式要求后,我马上想到是用java主函数main的args来写,通过对参数c、w、l、a、x的判断执行相应的操作。

  ②文件统计的处理

    1.关于基本功能的处理:对给定的文件路径创建一个BufferedReader,通过readline方法获取文件中的每一行字符串,然后执行相应的方法进行处理,最后通过控制台打印得到结果

    2.关于扩展功能的处理:对定的文件路径创建一个BufferedReader,通过readline方法获取文件中的每一行字符串,然后利用正则表达式进行处理,最后通过控制台打印得到结果

    3.关于递归方法的处理:我想到的是,根据给定的文件路径递归的遍历所有的子文件,如果是文件类型则执行前面的基本功能和扩展功能,如果是文件夹就跳过

  ③GUI的设计

    我直接用JFileChooser获取用户选择的文件,然后对这个文件路径执行之前的基本功能或扩展功能(代码复用)

四、设计实现过程

    设计了WC一个大类,通过对args的switch判断,执行相应的操作

 

    主要调用流程:个人项目WC(java实现)

 

 

 

 

 

五、测试运行

  测试文件:一个空文件、一个只有一个字符的文件、一个只有一个单词的文件、一个标准的源文件。

测试代码:

 

@org.junit.jupiter.api.Test
void test1() throws IOException{
String[] args1 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\1.c"};
WC.main(args1);
}
@org.junit.jupiter.api.Test
void test2() throws IOException{
String[] args2 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\2.c"};
WC.main(args2);
}
@org.junit.jupiter.api.Test
void test3() throws IOException{
String[] args3 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\3.c"};
WC.main(args3);
}
@org.junit.jupiter.api.Test
void test4() throws IOException{
String[] args4 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\4.c"};
WC.main(args4);
}
@org.junit.jupiter.api.Test
void test5() throws IOException{
String[] args5 = {"-c","-w","-l","-a","C:\\Users\\MI\\Desktop\\5.c"};
WC.main(args5);
}

 

测试截图:

 //空文件

 个人项目WC(java实现)

 

 

 

//一个字符的文件

 个人项目WC(java实现)

 

//一个单词的文件

个人项目WC(java实现)

 

 

 

//一个源代码的文件

 个人项目WC(java实现)

 

 

 

 

 

 代码覆盖率:

个人项目WC(java实现)

 

 

 

 

六、项目总结:

  在这次的项目中,我体会很深,很之前开发不一样,这次除了写代码还有项目分析,框架设计,用时估计和很多方面的测试、调试,检测代码覆盖率等工作,体会到了一个软件开发的粗略过程,对软件工程有了更深刻的理解。

上一篇:【Petrozavodsk WC 2018d2: ITMO U 1 Contest E】Enumeration of Tournaments 题解


下一篇:个人项目 wc(java实现)