软工我的项目(Java实现)

1、 Github地址:java

 https://github.com/RuiBingo/PersonalWorkgit

2、我的PSP表格:github

PSP2.1正则表达式

PSP阶段数组

预估耗时(分钟)编辑器

实际耗时(分钟)布局

Planning学习

计划测试

60                  ui

20 

· Estimate

· 估计这个任务须要多少时间

60

20

Development

开发

1200

 1080

· Analysis

· 需求分析 

 120  100

· Design Spec

· 生成设计文档

 30  30

· Design Review

· 设计复审 

 30  30

· Coding Standard

· 代码规范

 60  50

· Design

· 具体设计

 60  30

· Coding

· 具体编码

 900  1000

· Code Review

· 代码复审

 30  30

· Test

· 测试(自我测试,修改代码,提交修改)

 180  150

Reporting

报告

 120  100

· Test Report

· 测试报告

 60  60

· Size Measurement

· 计算工做量

 30  20

· Postmortem & Process Improvement Plan

· 过后总结, 并提出过程改进计划

 60  50
 

 合计

 3000  2770

3、解题思路

       刚开始看到题目的时候就以为这个项目其实相似于以前java课设要求作的文本编辑器,首先循序渐进实现基础功能,扩展功能,最后再实现高级功能,而后将实现功能的方法都汇总到含有主程序功能的类里实现。首先基础功能即查询字符数、行数和单词数是同样的,而后对于扩展功能查询注释行数、空白行数和代码行数功能我一开始的想法就是查询代码其实相似于基础功能,但判断时能够采用正则表达式去判断,关键是那个递归调用的功能,一开始看项目的想法就是:递归其实也很简单,写一个方法调用上述功能而后设置条件语句进行判断后递归就能够。但恰恰在实践作的时候由于某些缘由让个人递归功能并不如意,我花了不少的时间在想办法改善,具体缘由就下面分开细讲了,高级功能就我认为最简单了,作个基本的图形界面,用java插件不用一分钟就作出来了,当基本功能和扩展功能都实现了,再把这些功能调用进去就ok了!接下来细讲下每一个功能的基本实现思路:

①    首先是基本功能,-c查询字符数,-l查询行数,-w查询单词数,这三个最简单的功能在以前已经实现过了,但因为以前的代码我找不到了,因而就从新打一遍,思路就是利用文件输入流获取内容,而后循环判断每行有多少字符,总共有多少行数,单词数的统计就利用简单的正则表达式就能够了。思路简单就不细讲了,代码看一眼都能懂。

②    而后接着实现扩展功能,我首先作的是-a,即查询注释行数,空白行数和代码行数,这个也是弄个文件输入流获取内容而后利用正则表达式对注释行数和空白行数进行判断,对于注释行的判断利用“//”和“/*,*/”这三种字符样式进行查找标记,即在每一行内容的查找中发现“//”就让注释行数+1,而后利用String类里的trim()方法切割掉每一行两端的空格字符,并用startsWith()方法对查找到的“/*”进行标记,用endsWith()方法对“*/”进行标记,从找到“/*”开始到找到“*/”结束统计注释行数,再加上以前统计的就是总的注释行数了。对于空白行数的判断一开始使用了正则表达式,但发现我写的正则表达式判断老是不许确,后来上网查资料知道了利用isEmpty()这个方法加上对每一行的“{”和“}”进行标记去判断空白行数,最后是对代码行的判断,个人想法是既然不是注释行也不是空白行那就是代码行咯!因而用条件语句把前两种都判断不是的行数算成代码行++,就获得代码行数了。

③    而后是这个一开始觉得简单的递归调用功能-s,一开始我并无利用好通配符这个条件,而是在一个方法里面让用户输入想匹配的后缀名(例如,用户相匹配后缀名为“txt”的就直接输入txt就能够了),而后用foreach循环找出路径中的全部文件,利用正则表达式去匹配这些文件名,若匹配到txt就输出文件名并调用上述查询功能输出统计结果,但这个方法有个bug,就是一旦循环到的是目录的话就是要从新递归这个方法,而后又要从新问一遍用户想匹配的后缀名,用户又要从新输入一遍,就很蠢,因而我开始尝试将用户输入的后缀名这段代码移出方法,就不用每次递归都要从新询问,但尝试了很久都失败了,这就是前面说的一开始以为递归很简单,但作的时候花了不少时间。后来跟同窗交流才发现他们都是去切割通配符而后匹配的,因而我删除了我原来的方法,而后利用正则表达式去切割用户输入的含有通配符的路径,切割完剩下前面的路径和后面的后缀名两部分存入数组,而后做为参数传回递归方法中,也是用foreach找出全部文件,若是匹配的数组前半部分的路径就从新递归调用,若是是匹配后半部分的后缀名就调用功能输出统计结果。

④    最后是图形界面GUI的实现,即功能-x的实现,java作图形界面我都是用插件直接设置好绝对布局后,添加按钮button和一个文本框TextArea,而后给按钮设置一个监听器,点击他既能够选择文件,而后调用方法对选择的文件进行统计,输出在文本框中。

⑤    上述四个步骤我都是放在三个类里面,其中①和②放在类countWord,③放在类fangfa中,④就是单独一个类GUI01。而后再建一个command类放执行程序,集合其他三个类的功能,并输出命令界面,供用户选择,当用户输入路径时,利用正则表达式判断用户输入格式的对错,并利用if和switch条件语句进行功能的选择。

 

4、设计实现过程

类command经过判断用户输入的路径进行判断,如果含有通配符的文件则调出-s功能,如果不含通配符的文件则调出-c,-l,-w,-a,-x功能。路径错误则从新让用户输入,-x功能直接弹出图形界面框。

 

 5、测试

①wc exe功能界面展现:

 

 

②创建测试文档:

 

 

③各个功能的测试:

 

-c,-l,-w,-a功能展示:

 

-x功能展示:

 

 

 

 

 

-s递归功能展示:

 

 

6、我的总结

  经过此次项目我意识到了之前学习的java知识都忘了不少,看来代码一段时间不打仍是很容易生疏啊,之后仍是要多打点代码,此次我的项目的设计我是边回顾之前的知识一边作,中途有不少忘记的方法也是经过找资料才想起来,在这个过程当中我遇到了几个bug,有时一直找不出问题在哪比较烦躁,但其实问题很显眼,过于浮躁大大下降了个人工做效率,遇到难题仍是要先休息下放空大脑,只要头脑清醒,而后把一个大的难题慢慢分红一个小难题去解决,很快你就会发现这个难题已经不算是难题了。

相关文章
相关标签/搜索