个人项目(JAVA实现)
一:Github项目地址:https://github.com/candy07213/WC
二:PSP表格
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
25 |
25 |
|
· Estimate |
· 估计这个任务需要多少时间 |
25 |
25 |
|
Development |
开发 |
1555 |
1720 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
110 |
125 |
|
· Design Spec |
· 生成设计文档 |
70 |
60 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
50 |
65 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
25 |
40 |
|
· Design |
· 具体设计 |
100 |
100 |
|
· Coding |
· 具体编码 |
1000 |
1150 |
|
· Code Review |
· 代码复审 |
80 |
70 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 |
110 |
|
Reporting |
报告 |
120 |
120 |
|
· Test Report |
· 测试报告 |
70 |
60 |
|
· Size Measurement |
· 计算工作量 |
20 |
20 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
40 |
|
合计 |
1700 |
1865 |
三:解题思路
1, 刚开始看到题目没有注意好需求,以及有两个点不够明确,首先写一个命令行程序,怎么算一个命令行程序?因为以前也在cmd页面运行过java程序,所以这部分实现方式就比较了解,但是相应的需求格式要求完成的并不好,出现了一些错误,最后还是按照以往的格式完成的项目,其次就是给出某源程序设计语言的相关信息,这一点由于刚开始重点放在了模仿wc.exe的统计文本文件的相关信息,所以在完成基础功能后才突然意识到重点是统计程序文件的信息,就开始做了相应的修改。
2, 基础功能部分之前在java作业中有过练习,所以主要是思考源程序代码与文本文件在统计的过程中的区别,最大的区别就在于单词数的统计上,因为源程序的单词之间不是简单的空格等分开,会有一些别的分隔单词的字符,所以这里就利用了正则表达式来分隔单词,其他计算字符数与行数实现就比较常规。
3, 扩展功能就实现了计算空行,代码行以及注释行的部分,这一部分在判断空行处也利用到了正则表达式的知识,其次由于自己设置的情况总是不能覆盖到所有的地方,也在百度上参考了别的代码,有了新的收获,也设置了两个变量isSign(是注释行)notSign来为之后的代码行和注释行做准备,要注意的是注释行主要是有两种,//形式和/*…*/尤其是多行注释比较麻烦,利用了两个方法startsWith和endsWith方法来判断多行注释,首先就是判断/*是否存在,若出现/*并且没有出现*/标志则表示进入了多行注释处,并且没有出来,注释行数就开始增加,设置isSign为true,就根据是否遇到了*/以及它出现的位置设置加数,isSign的真假,在最后主要计算注释时要减去notSign,就是只出现/*没有*/的部分,以及代码行要加上之前的notSign,除了空行和注释行都是代码行
4, 高级功能不够完善,实现了图形界面,但是不能通过输出x调用,只能在cmd中直接执行图形界面类,或者eclipse的console处,由于在图形界面处要使用到之前的统计方法,所以在设计时有些混乱,测试调用处会出错,出现堆栈溢出的异常,做了尝试后还是没有解决,所以目前只能实现在命令行调用相关的类之后在命令行弹出图形界面,图像界面主要按照设计的按钮分了两个部分,一个是选择文件按钮,利用了JFileChooser,以及上传文件对话框,设置里将之前选择的文件路径通过JTextField的setText方法将路径打印到文本框处,再点击第二个按钮之后,会根据路径调用相应的统计结果将内容返回到JTextArea中,这里设计监听器也有些混乱,最后在第二个按钮的actionPerformed方法中调用之前的方法就可以了。
四:设计实现过程
分类: WC主类,Count基本功能类,Extend扩展类,GraInterface图形界面类,处理按钮ButtonHandler类
调用:首先WC主类中调用Count以及Extend类来实现对数据的查询,在Count类中利用Count1方法完成了基本功能c,w,l的实现,通过if语句判断输入的字符来实现相应的功能以及对Extend中完成的a参数的扩展功能。然后GraInterface图形界面设置了JTextField文本框,以及两个按钮,按钮1是点击选择文件,按钮1的actionPerformed方法会根据选择的文件把文件路径返回到JTextField文本框中,然后点击按钮2统计结果之后,该文件的相关统计结果就会通过按钮2的actionPerformed方法对ButtonHandler的调用把结果显示在JTextArea中,从而实现了图形界面
流程图:

函数代码组织:

五:测试运行
1:空文件

2:一个字符文件


3:一个词的文件

4:一行文件

5:典型源文件

图像界面:

六:项目总结
不足:首先在java编程能力上就比较弱,平时的代码练习太少,所以即使完成的功能不多,并且一些格式也不规范,没有达到相应的要求,但是还是花了不少的时间去完成项目,包括复习java的内容,主要是在文本输入输出流,正则表达式,图形界面的地方加深了一些认识。面对代码异常以及出错,不能保持好一个平和的心态,以及没有足够的耐心,所以效率也很低。其次这次做项目最大的教训在于没有花费足够的时间去做前期的准备,以及理解项目要求时不够认真,总是以一个大概的态度去做大概的规划,最后也因为没有做好这些,导致之后的代码就比较混乱,结构也就不够清晰,如果是和团队交接,肯定还会因为这样造成更糟糕的后果,所以意识到了前期思考的重要性。最后是认识到正确实现方法的重要性,有时不是你写不出来想要的代码,而是你一开始的想法就是错的,逻辑不对,就会在实现的过程中遇到各种的问题,当方法对了的时候代码就相当于完成了一部分,以及实现的时候一定要一步一步的明确要实现的东西,而不是只是笼统的想一个大概。
收获:完成了基本项目要求,以及掌握了一些其他利用eclipse调试程序时的操作,但还是不太熟练,以及意识到了在整个设计过程中自己的一些问题
有待改进:项目方面还有比较多的地方需要改进,首先在处理模式上不够规范,,其次在统计各种数时只考虑到了英文输入,扩展处的剩下两个部分也没有实现,图像界面虽然实现了,但是没有和主类建立x连接,异常没有处理好所以只能在图形界面类实现,以及操作均为常规正常操作,没有做好出错处理,以及一些错误文件的反馈。个人方面还是要加强编程能力,此次项目还停留在代码设计阶段并且这个阶段完成的也不好,离软件工程还有很大的距离,之后还需要在增强个人技术的同时不断的向软件工程设计的方向靠拢。
个人项目(JAVA实现)的更多相关文章
- maven项目Java resources 上面有个红叉但是代码里面并没有什么报错
maven项目Java resources 上面有个红叉但是代码里面并没有什么报错 解决办法: 1.通过: windows菜单 -> show view/other 菜单 -> o ...
- 在IDEA中关于项目java版本问题
在IDEA中关于项目java版本问题 当出现错误如:java无效的源发行版11或IDEA Error:java:Compliation failed:internal java complier er ...
- Eclipse导入项目java文件中文乱码
感谢大佬:https://blog.csdn.net/ordinaryprogrammerc/article/details/83013710 本文链接:https://blog.csdn.net/o ...
- 异常处理_Maven之web项目java.lang.LinkageError
浏览器运行项目异常如下: HTTP Status 500 - type Exception report message description The server encountered an i ...
- ssh项目java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade错误
错误: 导入别人的ssh项目后出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade错误, 错 ...
- Maven项目java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错
本文转载自:http://www.javaweb1024.com/info/894.jspx maven管理的项目,里面已经引入了log4j的包 maven引入如下: <dependency&g ...
- maven项目 Java compiler level does not match the version of the installed Java project facet
因工作的关系,Eclipse开发的Java项目拷来拷去,有时候会报一个很奇怪的错误.明明源码一模一样,为什么项目复制到另一台机器上,就会报“java compiler level does not m ...
- eclipse中的项目Java build path (Java创建路径)详解
1.Source标签页,指定本工程的源码目录和输出目录.Projects标签页,指定本工程所依赖的其他工程.Libraries标签页,指定本工程所需的jar包和class目录等.Order And E ...
- MyEclipse导入ant项目——Java编程思想
北门煎饼东门串儿: <JAVA编程思想(Think in Java)>一书中提供了大量源代码,可是项目是用ant构建的.对于用惯了eclipse,netbeans等IDE的同学们可能有些手 ...
- vscode + gradle 创建 java 项目 - java language server无法启动
1.在系统上安装一个版本的gradle,用`gradle init --type java-application`创建一个默认的java项目,假设项目目录是hellojava 2.vscode写ja ...
随机推荐
- deformable conv
在原feature map上经过卷积生成与原feature map一样w.h大小的feature map,但是channel变为2倍,即2N.2N代表的是每个像素x.y两个方向的偏移量. 这个偏移量生 ...
- nodejs命令行执行时带参数
nodejs命令行执行时带参数 转 https://www.jianshu.com/p/474e6d76f867 今天项目里突然想在初始化时跑一些数据,于是想起以前在python时可以在命令行里带 ...
- Multi-Channel Buffers
This describes a 4 channels buffer of 16 bit samples.Data organisation :Sample 1, front left speaker ...
- linux 下core文件生成、路径、格式设置及调试
core文件生成及调试1 代码 #include<stdio.h> int main() { int *p = NULL; *p = 0; return 0; } 2 在当前shell执行 ...
- C# Task 暂停与取消 或 C#中可取消的Task
(1)https://www.cnblogs.com/zhengzc/p/10724839.html (2)https://blog.csdn.net/hxfhq1314/article/detail ...
- 封装redis操作 php版本
<?php namespace App\Service; use App\Service\BaseService; use Illuminate\Support\Facades\Redis; / ...
- CentOS 7上重新编译安装nginx
CentOS 7的源所提供的nginx几乎不包含任何扩展模块:为了能够使用一些扩展模块,我们需要从源代码重新编译安装nginx. 目前最新版的源代码是1.6.1.下载解压后先不要急着configure ...
- Mac home目录下,创建文件夹,修改权限
http://php-note.com/article/detail/35e782e145a94042923946cb142b5cd1 1.关闭 SIP 2.sudo mount -uw /
- 超级简单,把PuppyLinux安装到U盘
先说说使用感受:上网全是乱码!不支持中文 下载最新版puppylinux,从官网下载 现在U盘引导程序制作工具Unetbootin 打开下载的UNetbootin,进行下面的操作: 制作完毕后,修改U ...
- oracle 在列名后的 (+)是什么意思,如何转换为mysql
外连接的意思select *from a,bwhere a.id=b.id(+)意思就是返回a,b中匹配的行 和 a中有但是b中没有的行. 参考https://www.cnblogs.com/Aaro ...