个人项目:WC_Project

一、GitHub项目地址

GitHub项目地址:https://github.com/ting9500/WC_GNIT.git

二、PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30

40

  · Estimate

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

30

40

Development

开发

750

720

  · Analysis

· 需求分析

80

70

  · Design Spec

· 生成设计文档

40

30

  · Design Review

· 设计复审

40

40

  · Coding Standard

· 代码规范

40

30

  · Design

· 具体设计

100

90

  · Coding

· 具体编码

350

360

  · Code Review

· 代码复审

40

40

  · Test

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

60

60

Reporting

报告

180

160

  · Test Report

· 测试报告

60

50

  · Size Measurement

· 计算工作量

40

40

  · Postmortem & Process Improvement Plan

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

80

70

合计

960

920

三、解题思路

  看到题目之后我大概分析了一些程序的功能需求,决定使用自己较为熟悉的Java语言进行编码。根据需求我将项目分为三个版块进行:基本功能、扩展功能及高级功能。该项目要求写一个命令行程序,即在控制台输入正确的代码格式 [parameter] [file_name],回车,即能获取到对应的文件信息。我使用String.spilt( )将用户输入的文本分割成两部分放进数组array[ ]中,其中array[0]代表的是用户选择的功能代码,array[1]代表的是处理文件的路径。通过array[0]调用对应的功能函数,通过array[1]选择对应的处理文件。

1、基本功能

(1)统计字符数:使用String.replaceAll("\\s", "")将每行的空白字符删除,再统计字符串长度,得到字符数;

(2)统计单词数:使用String.split("\\s+")将每个单词分开,若所得单词长度大于1,即说明该字符串为单词,累加得到单词数;

(3)统计行数:使用br.readLine()判断每行字符串是否非空,若是,则说明该行有字符,累加得到行数。

2、扩展功能

(1)递归处理目录下符合条件的文件:

  访问用户输入的文件路径,将该文件目录下的所有文件全部放入数组,依次判断访问的路径是文件还是文件夹,若是文件夹,则递归再深入查找文件,若为文件,则继续判断该文件是否符合我们所要处理的文件要求,若是,则将该文件放入文件集合中,访问结束后再遍历集合中的文件,调用相应功能函数获取字符数、单词数及行数;

(2)返回更复杂的数据(代码行 / 空行 / 注释行):

  注释行:注释包括多种情况,应考虑周全,使用String.startwith( )及String.endwith( )进行判断

     a. //注释文字

     b. /*注释文字

     c. /*注释文字

        注释文字

        注释文字*/

     d.  ……

  空行:本行全部是空格或格式控制字符,采用String.replaceAll("\\s", "").length()==0进行判断;

     本行包括代码,只有不超过一个可显示的字符,例如“{”;

  代码行:获取文件的行数,除去注释行和空行,剩余行数即为代码行;

(3)[file_name]: 文件或目录名,可以处理一般通配符

  * 表示匹配0或多个不是/的字符    ? 表示匹配1个任意字符

3、高级功能

这个功能比较简单,花费时间也较少,功能前面的代码基本也已经实现,直接调用函数。

4、心路历程

刚开始知道题目后,我第一印象就是大二时Java课程做过类似功能的课设,同样具有统计字符数、单词数、行数、获取文件等功能,所以感觉还不是特别难。但是由于挺长一段时间没有打码,对于Java语言也有些淡忘,所以在打代码之前先回顾了一下之前大二的学习笔记。其中编写“递归处理目录下符合条件的文件”的功能需求时花费的时间比较多,由于流无法读取文件夹,一开始总是报错,后来换了另一种方式遍历文件路径,才解决了问题。对于通配符,一开始不太清楚它的含义,后来百度了一下,找了一些参考例子才大概有一些了解,在这个功能上花费的时间较长。

四、设计实现过程

1. 代码类:

WC_Project类:主类,实现的是程序的界面;

Basic_Function类:实现基本功能,即统计文件的字符数、单词数及行数;

Extended_Function类:实现扩展功能,即可递归处理目录下符合条件的文件,可统计文件的代码行 、空行及注释行,可利用通配符找到查找类型的文件;

Advanced_Function类:实现高级功能,即支持通过图形界面选取文件,输出文件的信息。

2. 测试分析

(1)测试空文件

(2)测试只有一个词的文件

(3)测试只有一行的文件

(4)递归处理目录下符合条件的文件

(5)返回更复杂的数据(代码行 / 空行 / 注释行)

(6)[file_name]: 文件或目录名,可以处理一般通配符

(8)高级功能

(9)输入异常

操作说明

用户根据提示正确输入对应功能代码,可输出所要结果;可操作文件类型有:txt、java、class、docx、prefs、classpath等

心得

通过这次作业,进一步增强了我的编码能力,同时也意识到自己在许多方面的不足:

(1)未正确理解题意,做好需求分析,便急忙进行编码,导致后续代码改动较大,反而拖慢了进度;

(2)知识遗忘较多,未能及时巩固,导致边学边编码,进度缓慢;

(3)正则表达式的掌握程度不够,导致代码较为冗长

可改进地方:

(1)wc.exe -s -a *.c  返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数

由于一开始的需求分析做的不好,导致该功能未实现(需要重新修改输入模式),时间较为紧张,待后续改进;

(2)多采用一些正则表达式表示

WC_Project的更多相关文章

  1. 使用svnkit 的相关实例及相关问题汇总

    SVNKIT操作SVN版本库的完整例子 http://www.cnblogs.com/wangjiyuan/p/svnkitwanchenglizi.html#!comments 2.SVNClien ...

  2. java调用svnkit工具类上传本地文件到svn服务器

    package org.jenkinsci.plugins.svn.upload.step; import java.io.*; import org.tmatesoft.svn.core.SVNCo ...

随机推荐

  1. 【转】SQL2008 链接Oracle 调用存储过程

    1. SQL链接ORACLE 都是可视化的操作 如下图: 红色框选的是oracle的数据驱动,如果没有这个驱动 那需要单独安装oracle的client端 装完以后就有了. 2.在创建之前,在SQLS ...

  2. VS2015 创建C++动态库及使用

    转载:https://blog.csdn.net/w_x_myself/article/details/82252646 1.dll的特点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代 ...

  3. 查看ssh有没有被黑的IP

    #grep "Failed password " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr ...

  4. 【GMT43智能液晶模块】例程二十二:USB_CDC实验——高速数据传输

    源代码下载链接: 链接:https://pan.baidu.com/s/10KOWONWbNYlonyuX0W0Mcg 提取码:ggpo 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...

  5. 【GMT43智能液晶模块】例程十八:LAN_HTTP实验——网页服务器

    源代码下载链接: 链接:https://pan.baidu.com/s/1sr4a7TBPyvs18jTfCfVj8Q 提取码:jwfv 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...

  6. visual studio制作代码片段

    使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来.ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代 ...

  7. CKA认证考试题

    1.列出环境中所有的pv,并以name字段排序(使用kubectl自带排序功能) kubectl get pv --sort-by=.metadata.name 2.列出制定pod的日志中状态为err ...

  8. zabbix自动停用与开启agent

    我们在升级环境时遇到了一个问题,那就是zabbix会自动发送邮件给领导,此时领导心里会嘎嘣一下,为了给领导营造一个良好的环境,减少不必要的告警邮件,减少嘎嘣次数,于是在升级之前,取消zabbix监控的 ...

  9. 第1部分 Elasticsearch基础

    一.安装 es端口:9200 kibana端口:5601 brew install elasticsearch brew install elasticsearch brew services sta ...

  10. springboot 读取Jar 类路径下的文件

    Resource resource = new DefaultResourceLoader().getResource("classpath:download/WORKER_OVERTIME ...