一、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)

2、只有一个字符的文件(-c,-w,-l,-a)

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

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

5、一个典型的文件

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

7、图形界面

      

六、项目总结

这次写软工作业有几点不足之处,其一:java基础不扎实,分析完需求之后,差不多是边查资料边打代码,降低了开发的效率,所以这次的项目我在开发阶段用的时间最多;其二:并没有以一种锻炼个人能力的态度去做这次的项目,特别是测试方面没有做到单元测试,回归测试,效能测试等要求,这也是我后期的其他项目需要改进的地方。总体来说收获是蛮大的,从软件开发的一个比较全面的流程中学到了如何用PSP表记录开发各阶段的花费时间,以及如何细致全面的分析需求,还有如何用各种测试来保证代码的质量。

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

  1. maven项目Java resources 上面有个红叉但是代码里面并没有什么报错

    maven项目Java resources 上面有个红叉但是代码里面并没有什么报错 解决办法: 1.通过: windows菜单  ->   show view/other 菜单  -> o ...

  2. 在IDEA中关于项目java版本问题

    在IDEA中关于项目java版本问题 当出现错误如:java无效的源发行版11或IDEA Error:java:Compliation failed:internal java complier er ...

  3. Eclipse导入项目java文件中文乱码

    感谢大佬:https://blog.csdn.net/ordinaryprogrammerc/article/details/83013710 本文链接:https://blog.csdn.net/o ...

  4. 异常处理_Maven之web项目java.lang.LinkageError

    浏览器运行项目异常如下: HTTP Status 500 - type Exception report message description The server encountered an i ...

  5. ssh项目java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade错误

    错误: 导入别人的ssh项目后出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade错误, 错 ...

  6. Maven项目java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错

    本文转载自:http://www.javaweb1024.com/info/894.jspx maven管理的项目,里面已经引入了log4j的包 maven引入如下: <dependency&g ...

  7. maven项目 Java compiler level does not match the version of the installed Java project facet

    因工作的关系,Eclipse开发的Java项目拷来拷去,有时候会报一个很奇怪的错误.明明源码一模一样,为什么项目复制到另一台机器上,就会报“java compiler level does not m ...

  8. eclipse中的项目Java build path (Java创建路径)详解

    1.Source标签页,指定本工程的源码目录和输出目录.Projects标签页,指定本工程所依赖的其他工程.Libraries标签页,指定本工程所需的jar包和class目录等.Order And E ...

  9. MyEclipse导入ant项目——Java编程思想

    北门煎饼东门串儿: <JAVA编程思想(Think in Java)>一书中提供了大量源代码,可是项目是用ant构建的.对于用惯了eclipse,netbeans等IDE的同学们可能有些手 ...

  10. vscode + gradle 创建 java 项目 - java language server无法启动

    1.在系统上安装一个版本的gradle,用`gradle init --type java-application`创建一个默认的java项目,假设项目目录是hellojava 2.vscode写ja ...

随机推荐

  1. IIS调优--增加并发处理能力

    一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态.因经验不足,花了很多时间精力解决这个 ...

  2. HTML a标签链接 设置点击下载文件

    通常情况下,为文件添加链接后,用户可以通过点击链接,直接将文件下载到本地,如下载 excel 表格等 <a href="/user/test/xxxx.excel">点 ...

  3. List containsKey 和Map contains 判断集合中是否包含某个值

    map集合 //1.第一种 HashMap map = new HashMap(); map.put("1", "value1"); map.put(" ...

  4. 给kali的Metasploit下添加一个新的exploit

    转载:https://blog.csdn.net/SilverMagic/article/details/40978081 首先在/usr/share/metasploit-framework/mod ...

  5. sublime text 文件列表如何忽略特定格式的文件名

    1.只需要Preferences (中文首选项)里面找到setting-default(设置默认)     2.在设置面板里面找到 "folder_exclude_patterns" ...

  6. openssl 和libcurl的安装

    /usr/lib/aarch64-linux-gnu/qt5/bin/qmake CONFIG+=release 1 SET(CMAKE_PREFIX_PATH /home/qilin64/Qt5.6 ...

  7. jstree: 获得根节点,checkbox事件处理

    $.jstree.defaults.core.themes.responsive = true; $.jstree.defaults.checkbox.three_state = false;// 如 ...

  8. 利用docker搭建RTMP直播流服务器实现直播

    一.rtmp服务器搭建 环境: centos 7.* 1.先安装docker(省略) 2.下载docker容器 docker pull alfg/nginx-rtmp 3.运行容器(记得打开防火墙端口 ...

  9. SaltStack 是一个服务器基础架构集中化管理平台

    SaltStack详细部署   一.基础介绍============================================================================== ...

  10. find和grep的使用

    1.find命令的使用 在Linux中可以使用find命令在指定的目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名,当使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目 ...