个人项目(java实现)
一、github地址:https://github.com/Moyjing/Moy
二、psp表格
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
30 | 30 |
|
· Estimate |
· 估计这个任务需要多少时间 |
30 | 20 |
|
Development |
开发 |
2010 | 1985 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
90 | 110 |
|
· Design Spec |
· 生成设计文档 |
60 | 75 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 | 30 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 20 |
|
· Design |
· 具体设计 |
120 | 100 |
|
· Coding |
· 具体编码 |
1500 | 1440 |
|
· Code Review |
· 代码复审 |
60 | 80 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 | 130 |
|
Reporting |
报告 |
120 | 140 |
|
· Test Report |
· 测试报告 |
60 | 50 |
|
· Size Measurement |
· 计算工作量 |
30 | 40 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 | 50 |
|
合计 |
2160 | 2155 |
三、解题思路分析
首先说明代码运行的环境:eclipse,JRE System Library[J2SE-1.5]
看到题目,先把三个功能的每一点要求弄清楚,其次就是有疑问:这三个功能之间是否有依赖关系,如果要实现图形界面,各个功能之间应该如何调用?
1)基本功能:
-c统计程序代码的字符数,一个可行方法是利用缓冲流来一行一行读取(readLine)文件内容,字符串有求长度的方法;
-w统计词数,词,何为一个词,汉字算,英文单词算,还有其他?参考了网上一篇博客对词的定义:汉字+不以数字开头(允许以下划线开头)的连续的词字符组成的词,具体实现则利用java的正则表达式进行匹配,其中汉字([\u4e00-\u9fa5]),其他词([a-zA-Z_][\\w]{0,});
-l统计行数,这里行数的定义是光标所移动到的最大的行所在的行号,实现起来也比较简单:readLine方法可以统计所有的行包括空格行。
2)扩展功能:
-s递归处理多个文件,只要得到用户要求的目录下的所有文件路径就好办了,所以思路就是递归得到一个目录下的所有子目录的所有文件,首先定义一个装文件路径的List容器,再写一个递归函数(List容器和指定目录路径作为参数传进)自己调用自己,有了指定目录下所有的文件路径,就可以从中挑选符合指定后缀的文件,我这里分了三种情况:*.java(用户没有指定目录只指定了文件后缀,此时目录设为当前目录);C:\java\test\*.java(用户既指定了目录又指定了文件后缀);C:\java(用户只指定了目录),采用substring和lastIndexOf这两个方法,可以分别得到文件所在的目录和文件的后缀,能够灵活处理*和?等通配符,挑选出符合条件的路径后就将其作为其他功能的参数传进,输出相应的统计数据;
-a处理更加程序代码中更加复杂的行,这里的空行,注释行,代码行,我自己定义为互斥的三种不同类型的行(加起来为总的行数),也就是即使注释行中有空行,也不当作空行了,只统计为注释行,空行按照项目要求的定义,要求中的可显示字符我理解为任意的一个能打印出来的字符。由于代码行的注释不被当作注释行,因而也无需考虑双引号里面出现// , /* , */的情况,这里仍是用正则表达式来统计。
3)高级功能:
-x图形界面我直接布局了五个按钮和一个文本输出框,在选择了文件后,文本输出框可以将代码显示出来,点击按钮就有消息窗显示对应统计信息。
4)总体的框架就是Counter类(计数器),继承了JFrame,类里面定义图形界面需要的各种组件,以及分别写-c,-w,-l,-a,-s的函数来实现统计功能,-x命令则将已经创建好的Counter实例可视化,函数与函数之间互相调用,输出各自的统计结果。
四、设计实现
一个Counter类,函数有countchar,countword,countline,countcomplex_line,dealwith_multifile,multi_file,一个构造方法(初始化图形界面的组件)以及事件监听函数,main函数用Scanner从命令行接收用户输入的命令,-c,-w,-l,-a,-s分别调用countchar,countword,countline,countcomplex_line,dealwith_multifile函数,-x命令使Counter的一个实例可视化,以-s开头的命令处理多个文件,这个命令的第二个参数可以是-c,-w,-l,-a,也能调用其他函数输出统计结果,multi_file是一个递归函数,dealwith_multifile调用multi_file获得文件路径,事件监听函数里面也可以根据用户点击图形界面的相应的button显示结果。

五、运行测试
用户输入命令的格式:命令参数(-c,-w,-l,-s,-a,-x) 文件路径
测试文件目录

1、空文件(-c,-w,-l,-a)


3、只有一个词的文件(-c,-w,-l,-a)

4、只有一行的文件(-c,-w,-l,-a)

5、一个典型的文件

6、处理多个文件(支持通配符)




7、图形界面



六、项目总结
这次写软工作业有几点不足之处,其一:java基础不扎实,分析完需求之后,差不多是边查资料边打代码,降低了开发的效率,所以这次的项目我在开发阶段用的时间最多;其二:并没有以一种锻炼个人能力的态度去做这次的项目,特别是测试方面没有做到单元测试,回归测试,效能测试等要求,这也是我后期的其他项目需要改进的地方。总体来说收获是蛮大的,从软件开发的一个比较全面的流程中学到了如何用PSP表记录开发各阶段的花费时间,以及如何细致全面的分析需求,还有如何用各种测试来保证代码的质量。
个人项目(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 ...
随机推荐
- Java基础 awt Frame 窗体在屏幕的中间显示
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- python开源项目聚合推荐【1】
******************************************************* 01项目名:unimatrix 功能介绍:Python模拟“黑客帝国”影片中的终端动画脚 ...
- android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件
//android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件 遇到这个问题好久了,一直没解决今天搜集了大量的资料,有的说什么Java没配置好,不是扯犊子吗 ...
- C语言 按位异或实现加法
/* C语言 按位异或实现加法 */ #include <stdio.h> #include <stdlib.h> #include <string.h> void ...
- iOS 基于 itemServices 进行本地安装 ipa 应用安装包
itemServices 协议 itemServices 是苹果推出的一款协议.基于这款协议,我们在本地部署一个服务器,将 ipa 包存放到本地服务器.然后,测试人员只要通过 iOS 测试设备的 Sa ...
- java 正则 replace 忽略大小写
String description = model.getDescription(); if (!"".equals(description)) { //replace(/\&l ...
- WebDriver常用的api
WebDriver常用的api 获取window对象 Window window = driver.manage().window(); 1) 窗口最大化 Maximize() 2) 窗口大小 g ...
- 2019-7-01 python基础数据类型
一.python的注释 python的注释分类: 单行注释: # 单行注释 多行注释:(可以是三个单也可以是三个双) ''' 单三引号多行注释 ''' """ 双 ...
- coco2dx--Permission denied
在终端输入./cocos.py....创建项目时,出现Permission denied,是权限问题,可以先使用chmod命令获得权限,输入chmod u+x ./cocos.py 回车,接着再使用c ...
- PB 修改datawindow 的背景色
1.修改标题行的背景色 rgb(235, 235, 235) 2.修改选择行的背景色(即选择行高亮) if(currentrow() = getrow(), rgb(235,235,235), rgb ...