个人项目 wc(java实现)

一、Github网址:

https://github.com/Clarazhangbw/Wc.exe

二、PSP表


PSP2.1


Personal Software Process Stages


预估耗时(分钟)


实际耗时(分钟)


Planning


计划


100


120


· Estimate


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


100


120


Development


开发


1080


1620


· Analysis


· 需求分析 (包括学习新技术)


240


360


· Design Spec


· 生成设计文档


60


60


· Design Review


· 设计复审 (和同事审核设计文档)


15


15


· Coding Standard


· 代码规范 (为目前的开发制定合适的规范)


30


40


· Design


· 具体设计


40


40


· Coding


· 具体编码


720


1020


· Code Review


· 代码复审


30


25


· Test


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


30


60


Reporting


报告


145


175


· Test Report


· 测试报告


90


120


· Size Measurement


· 计算工作量


25


25


· Postmortem & Process Improvement Plan


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


30


30


合计


1325


1915

三、遇到的困难及解决办法

困难描述:

  1. 由于较长时间没有接触到java,所以在编程过程中比如利用哪一类,用什么方法实现哪一些功能,甚至在语法上也出现了比较大的困难;
  2. 最初没有先构建好程序框架,导致后面写代码时东一块西一块,没有一个比较清晰的结构;
  3. 对单元测试和递归这一类的知识不熟悉;

       做过哪些尝试:

  1. 在重温java上,一方面是看回以前写过的代码,另一方面是在遇到不懂的时候就翻阅书籍或者是百度;
  2. 对于程序框架,流程图这些,在几次较大的代码模块更更改改后,决定放弃之前原先比较乱的代码,重新梳理了一遍项目要求和各个模块之间的关系;
  3. 翻阅《构建之法》,上网查看学习单元测试等知识;

       是否解决:

    对于java的重温还有代码框架上,都在自己不断学习的过程中找到了感觉,先规划后写,这样在后期打码当中也会思路比较清晰;但是由于到最后时间的不充分以及自己知识储备不充分,对单元测试还是没有理解太清晰。

有何收获:

    重温了很多关于java的内容,比如构建图形界面,输入输出流等;对自己未来打码有大体的规划,知道应该先计划,再实施,而不是兴冲冲就干。然后虽然了解了挺多关于单元测试的知识,但是运用起来还是有困难。

四、解题思路

  •     刚开始拿到题目的时候,其实极度恐慌的。首先是因为对java生疏了,对于实现各个功能函数也不清晰,所以在分析题目以及想该从哪里下手这里起步比较困难。后来决定先解决好本质java运用问题,重温之后再开始分析题目,制定计划。
  •     对与重温java上,也不是盲目的看一些视频或者什么的,我主要是看回以前自己做过的课设,因为发现这个题目的一些功能跟之前做过的文本编辑器之间有一些相似的地方,比如统计字符数,单词数,还有图形界面打开文件的一些操作。
  •     有了基础知识储备后,对项目需求进行分析。
  •     首先是整体框架,最开始没有想很多,主要的思路就是先将各个功能分别实现了,然后主函数调用这些函数去实现功能。
  •     主函数:用户输入命令,判断是否需要通过图形界面选择文件来进行查看统计的操作,再根据用户输入选择统计量调用“功能函数”“图形界面函数”来获取显示相应的变量值。
  •     功能函数:一开始比较懊恼,就是我对整个程序代码的框架构建得不是很清晰,停留在,所有的功能,比如统计字符数,注释行数等扩展和基本的功能都放在一个函数里,然后每一次用户选择统计某一个值,都会调用功能函数,功能函数把每一个变量值都计算完成后,再将用户需要的那个值返回给主函数。这样做的弊端就是,程序执行时间较长而且有多余的计算,遗憾的是,我到了最后才发现这样做的弱点。也为之后打码提供了一些经验教训。
  •     -c,-w,-l这些都比较简单,用read()方法依次扫描文件内的每一个字符,再根据字符,单词特性做判断后累加就可以了。对于统计单词这个比较麻烦,最后决定标准就是,只要两个字母及以上连续且该单词后面是个“\n”或者其他非字母字符,words++,但是这样出现了一个问题就是,单词量每次都会少一个,因为在最后面的那个单词,因为他最后没有任何字符,所以如果一个句子没有句号,那该句子最后那个单词就算不进去。因此我增加了一个word变量去控制,一有连续两个字母字符,单词数就加1,然后直到遇到下一个空格数才计算进行单词数累加操作。
  •     -s 递归处理目录下的文件,一开始对这个比较陌生,可能是比较抵触吧一看到递归两个字就,所以后面研究也学不出所以然。今天突然知道了解决方案,但是由于整个框架设置的不合理,所以到最后没有办法大改框架后把该功能添加进去。
  •     -a 这些特殊行的统计最主要就是规定,了解好各种特殊行的划分依据,细节问题比如说注释行是有分两种的,一种是/*,*/可分行写注释的,另一种是//,所以要针对特殊情况进行特殊处理。然后调用readline()方法逐行扫描文件内的每一行进行统计就可以了。
  •     -x图形界面函数:先是在CSDN上重温会JFrame,JPanel,JLabel等java类,掌握了继承JFrame,定义组件,创建组件,添加组件,对窗体设置,显示窗体,设置监听等步骤之后,针对需求需要设计代码。在调用JTextArea类设置文本框组件的时候,由于对JPanel,还有整个窗口的布局没设置好,导致文本框一直没有达到预期显示效果,通过查询百度,找到了设置文本框的大小以及几种布局方式,不断尝试后最后也成功达到了预期的效果。
  •     单元测试:创造基础的测试文件以测试代码。翻阅《构建之法》了解了单元测试的重要性并上网查询了相关步骤。

五、设计实现过程

              wc类:包括一个函数wc(File file),该函数实现统计字符数,行数,单词书,特殊行的基本和扩展功能。调用该函数能够得出所有的统计结果。

gui0类:包括函数gui0()函数,用户高级功能-x,当用户输入-x,命令时,会出现选择文件框,用户可以选择文件获得相应统计结果。

gui类:有gui0类衍生出来的一个类,当用户选择文件后,所弹出来的选择想要获得的统计数据的界面,该界面允许调用gui0函数重新选择文件。

test类:该类为主类,获取用户指令,判断是否进入图形界面,若不进入则通过获取用户选择的统计条件,来调用wc方法去显示统计结果。

   总的来说,由于设计的时候对Java类和函数这些掌握的不清晰,所以很多方功能都是放在一个类的一整个函数里头,所以实现起整个程序的时候,会出现很多没必要的复杂调用。以下是我各个类之间的调用关系:

六、测试运行

1.测试目录

2.程序启动

3.基本功能

测试基本功能-c,测试文件为只有一个字符“c"的文档

测试基本功能-l,测试文件为只有一行”you are so cute“的文档

测试基本功能-w,测试文件为只有一个词”cute"的文档

测试扩展功能-a,测试文件为基本源代码文件

测试多个功能一起出现统计结果,测试文件为只有一行”you are so cute“的文档

测试高级功能-x,图形界面打开文件并点击显示统计结果, 测试文件为只有一行”you are so cute“的文档

六、总结

              在本次项目完成前期,我因为对java的学习不够充分,很多java语法还有一些类,构造函数之类的都忘了,所以面对这个项目是手无足措的,面对详细的需求也没有想法。比如说看到统计字数,脑海里只有一些以前做过的比较模糊的记忆,不知道应该具体怎么写。最后通过查阅资料和翻看以前自己写过的代码找回了一些感觉。在重新学习java上也花了不少时间,也警醒了自己之后要经常练习,保持对代码的熟悉感。

本次项目我学到了很多,首先当然是java的运用,通过实操项目,找回了一些比如说I/O流,函数调用,图形界面设计的知识。同时也从0到1实现了一个程序,从预估,设计,编码,开发,测试,文档等流程中锻炼自己。在Debug当中找自己的问题,最主要的就是,在开始项目之前要规划好项目期间每天的计划,每天要规划好当天内需要解决的事情。在开发的过程中,随时记录自己出现的问题,以便后续解决。总的来说,项目不仅增加了我对代码的熟悉感,而且也吸取了很多流程要点问题。

    在这次个人项目中,我还有不足之处,那就是由于我对递归处理文件这个知识点学习的不充分,导致于在临近截止的时候才想出解决方案,但是由于程序框架已经构建好,而且不够灵活,使得这个函数无法再插入我的程序里,修改起来很麻烦,因此没有实现-s功能。也是一个遗憾。另外一点就是,在做项目初期,对程序整体架构没有构建好,所以导致后面经常出现大幅度的修改,耗费时间长,这是非常不好的习惯。经过这次项目,我也意识到自己的不足。往后的项目中会先计划,边测试边开发,提高代码质量。

原文地址:https://www.cnblogs.com/clarazhang/p/11588221.html

时间: 2024-08-30 00:04:41

个人项目 wc(java实现)的相关文章

个人项目Wc.exe(JAVA)

1.个人项目WC.exe的github地址:https://github.com/jezing/WC-in-software 2.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 35 50 · Estimate · 估计这个任务需要多少时间 35 50 Development 开发 900 1300 · Analysis · 需求分析  30 60 · Design Spec · 生成设计文档

个人项目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

java web项目,java类中获得WEB-INF路径

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 private static String getWebInfPath() {         URL url = 当前类.class.getProtectionDomain().getCodeSource().getLocation();         String path = url.toString();         int index = pat

eclipse导入后将普通项目变为java项目build path,no action avilia

eclipse用subclipse导入svn项目时,没有选择项目类型. 这样就不能修改项目的buildpath no action aviliable 打开workspace下面的.projcet文件在标签<natures></natures>中间添加一行 <natures> <nature>org.eclipse.jdt.core.javanature</nature> </natures> 项目refresh一下就可以了,项目变为

如何将Java项目转换为Java Web项目?

上一篇文章讲了"如何将Java Web项目转换为Java项目?"这里就介绍一下如何将Java项目转换为Java Web项目. 在项目名称上单击鼠标右键>Properties>Project Facets 刚打开Utility Module是锁定的,需要解锁后其它选项才能显示出来. 显示出来之后,选中图中对应的项,Utility Module应该是没什么用的,取消选中,应用(Apply)就好了.

Maven—如何使用maven命令创建Java项目或Java Web项目

博客<Maven-Windows操作系统中安装配置Maven环境>介绍了如何在Windows操作系统中安装配置Maven,现总结一下如何借助maven命令创建Java项目或Java Web项目: 1.借助maven命令创建Java项目: 1.借助maven命令创建Java Web项目:

linux部署项目(Java项目+Tomcat+mysql)

项目做完了,要发布了,而Java的特长之一就是移植性好,面对着微软的XP的停止服务,Windows系统的"独裁",越来越多的商家选择了开源的免费的linux系统作为服务器.因为linux系统也有图形界面(虽然和Windows比起来很不一样),所以在图形界面中操作相对来说还是容易的,这就好比我们在Windows系统上部署项目一样,大部分人都是小Case.但是真正工作中,服务器都会在固定的机房,而且往往只有一台主机,更规模大一些的就是使用单片机,像摆书一样摆到机房的机器架上,而我们操作它的

【MyEcplise】导入项目报错:Errors running builder &#39;JavaScript Validator&#39; on project &#39;项目名&#39;. java.lang.ClassCastException

导入项目报错:Errors running builder 'JavaScript Validator' on project '项目名'. java.lang.ClassCastException 解决方法: project -->Properties Builbers -->JavaScript Validator勾选去掉 解决问题! [MyEcplise]导入项目报错:Errors running builder 'JavaScript Validator' on project '项目

Maven项目中java类报错-Cannot resolve symbol

电脑蓝屏了,强制重启之后再打开IDEA里面的项目,所有Java类文件都在报Cannot resolve symbo错误,可以确定所有依赖的包都有引用且jar包没有冲突. 经查询找到这个解决方法: 在IDEA中 点击 File   ->   Invalidate Caches/Restart,清理了缓存重启IDEA就解决了 原文地址:https://www.cnblogs.com/yw-ah/p/8508314.html