个人项目(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 ...
随机推荐
- [转]import xxx from 和 import {xxx} from的区别
原文地址:https://www.cnblogs.com/Abner5/p/7256043.html 1.vue import FunName from ‘../xxx’ 1.js export de ...
- cisco 交换机设置时区、时间、同步日志本地时间
Core-Switch-1#show clockCore-Switch-1#show ntp statusCore-Switch-1#conf tCore-Switch-1(config)# cloc ...
- bat/cmd批处理程序设计教程
序言 这是一篇技术教程,我真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识.我写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让 ...
- 《深入理解Linux内核》 读书笔记
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...
- 使用pkg打包node.js项目(egg框架)为可执行包
问题: 公司有个工具型项目使用node.js 开发,需要部署到客户的服务器中,遇到的问题: 1.客户的服务器没有外网.环境配置,依赖安装等都比较麻烦,只能手工上传,最好能一个文件直接搞定: 2.直接包 ...
- 【Docker学习之四】Docker自定义容器镜像
环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.使用已有容器创建镜像-docker commit1.查看本地已有镜像 [root@node105 ~]# do ...
- 解决chrome浏览器插件开发者模式每次启动要确认弹出框的问题
在日常工作中,我们经常会用到一些浏览器插件,有些插件因为没上架到浏览器的应用商店,只能以开发者模式运行,但是chrome浏览器出了限制,每次重新启动浏览器的时候,就会弹出该插件是否要禁止运行的对话框, ...
- 007 SpringCloud 学习笔记3-----Eureka注册中心
1.Eureka概述 (1)引子 网约车出现以前,人们出门叫车只能叫出租车.一些私家车想做出租却没有资格,被称为黑车.而很多人想要约车,但是无奈出租车太少,不方便.私家车很多却不敢拦,而且满大街的车, ...
- [转帖]插曲:大白话带你认识Kafka
插曲:大白话带你认识Kafka 2019-11-18 21:58:27 从事Java 阅读数 2更多 分类专栏: java Kafaka 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...
- 池化技术之Java线程池
https://blog.csdn.net/jcj_2012/article/details/84906657 作用 线程池,通过复用线程来提升性能; 背景 线程是一个操作系统概念.操作系统负责这个 ...