软工个人项目(Java实现)

一、 Github地址:

https://github.com/RuiBingo/PersonalWork

二、个人PSP表格:


PSP2.1


PSP阶段


预估耗时(分钟)


实际耗时(分钟)


Planning


计划


60                  


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

三、解题思路

刚开始看到题目的时候就觉得这个项目其实类似于之前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条件语句进行功能的选择。

四、设计实现过程

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

五、测试

①wc exe功能界面展示:

②建立测试文档:

③各个功能的测试:

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

-x功能展现:

-s递归功能展现:

六、个人总结

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

原文地址:https://www.cnblogs.com/RuiBingo/p/11588375.html

时间: 2024-08-23 11:50:35

软工个人项目(Java实现)的相关文章

软工2019_MucMuc项目个人总结

MucMuc项目个人总结 1.相关链接 原型界面设计链接 UML设计链接 github项目链接 2.项目个人分工 项目总体的部分设计 后端项目总体构建, 代码实现, 以及测试 阿里云后端服务器的配置和项目部署 3.开发过程 开始 在项目最初的阶段, 整个组对于要做怎样的工作并没有清晰的想法. 不知道如何开始工作, 从何做起, 开发工具为何, 是面临的最大难题. 因为没有任何有对于web开发有经验的成员. 从前后端开发工具的选择上, 到前后端通信的具体流程, 都没有一个较好的认知. 这也直接导致了

软工团队项目个人总结

经过了一个学期的软工课程学习,以及长期的团队开发,收获有下. 用户:创新就是极致的用户体验.在开发我们的这款游戏的开始阶段,我们与校内很多同学交流了一下他们对这款游戏的看法,并与他们在线下对游戏进行试玩,然后他们也对我们提出了很多意见,包括有些时候觉得我们某些地方设置的太傻了,随机性太大,博弈性不够等问题.而且有时候交流还会出现一些问题,但总的来说,我们还是从中挖掘了很多可以改进的点,分析了用户的需要,改进了挺多地方的规则的.然后,秉承着从软工课程上学到的,能让用户少点一下,绝不多点一下的类似的

软工个人项目WC(Python实现)

一.github地址:https://github.com/1371272989/WC.exe 实现功能: 1.-c:统计字符数: 2.-w:统计单词数: 3.-l:统计行数: 4.-a:统计复杂数据(空行.代码行和注释行): 5.-s:递归处理目录下符合条件的文件: 通配符没有全面,只能辨别后缀. 6.-x:通过图形界面选择文件: 可以通过图形界面选择文件,但输出还是在cmd上显示. 二.PSP PSP Personal Software Process Stages 预估耗时(分钟) 实际耗

软工个人项目——地铁最短路径分析

一.开发环境 IDEA(java) 二.需求分析 设计简单UI界面(Java Swing) 用户可以自行选择起点.终点的地铁线路和对应的站点 用户选择后后台返回一个或多个方案 三.设计思路 启动程序读取地铁站点和线路信息文件"subway.txt",并将站点和线路信息储存在有向图中 根据用户的选择输入起点终点等参数 UI界面提供地铁线路.起始站点和目的站点的选择 通过最短路径算法求解最优的出行线路(采用Dijkstra算法或Floyd算法),将结果输出到一个txt文件 测试优化 四.项

二、软工个人项目:文本信息统计器

本软件的代码:https://github.com/amekao/SE_work1 界面: 一.需求分析阶段: 需求分析: 总需求:需要用户在cmd运行程序,根据所输入的参数提供对应的计算模式 基本功能: -c -w -l 显示字符数,词数,行数 拓展功能:-a 显示具体行数, -s 可以递归遍历指定目录下的文件 高级功能: -x 弹出界面让用户选择要统计的文本,显示所有的信息 二.设计阶段: 考虑到python语言对文本操作提供了较好的接口,而且文件编码也比较丰富,因此决定使用python来完

软工实践项目课程的自我目标

对实践项目完成后学习到的能力的预期 组长说,攻坚安卓方向,那就希望首先懂得安卓这门语言吧 然后就是了解安卓应用的开发过程吧 对项目课程的期望 但愿难度不要太大,虽然越难越锻炼人,但我还是不希望难 有一定的补救机会就更好了 对项目的愿景规划 不懂,好好学习,天天向上!

软工团队项目之项目选择

项目基础:考试练习系统APP 项目扩展:能让客户坚持每天做题的APP 需求分析:首先,用户会选择这个APP,那么必然有做题的必要和需求,也许是为了即将来临的考试也可能是真的为了做题给自己填补漏洞,那么不管是哪种情况,大量的刷题是免不了的,那么我们这个APP就有了市场需求. 对市面上已有的类似的APP分析:其实在市场上已经有了很多成熟的类似的APP,那么我们所要制作的就必须有我们的特色.传统的考试系统或是练习系统,基本上都是能从数据库中抽取一定量的题,组合成一套试卷,来供用户使用,而在用户提交答案

2017BUAA软工个人项目之数独

1.项目GitHub地址:https://github.com/ZiJiaW/Soduko (由于一开始把sudoku看成了soduko,于是名字建错了,读起来可能有点奇怪-) 2.项目PSP表格如下: PSP2.1 Personal Software Process Stages 预估耗时 实际耗时 Planning 计划 0.5h 0.5h .Estimate .估计这个任务需要多少时间 0.5h 0.5h Development 开发 20.5h 21.5 .Analysis .需求分析(

三、软工结对项目:四则运算生成器

一. 1. github项目地址: https://github.com/amekao/SE_work2 2. 界面示例: 生成模式 批改模式 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 · Estimate · 估计这个任务需要多少时间 1200 1200 Development 开发 · Analysis · 需求分析 (包括学习新技术) 180 200 · Design Spec