WC_Project
个人项目: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的更多相关文章
- 使用svnkit 的相关实例及相关问题汇总
SVNKIT操作SVN版本库的完整例子 http://www.cnblogs.com/wangjiyuan/p/svnkitwanchenglizi.html#!comments 2.SVNClien ...
- java调用svnkit工具类上传本地文件到svn服务器
package org.jenkinsci.plugins.svn.upload.step; import java.io.*; import org.tmatesoft.svn.core.SVNCo ...
随机推荐
- Xamarin.Forms Shell基础教程(1)
Xamarin.Forms Shell基础教程(1) 什么是Xamarin.Forms Shell Shell是Visual Studio为Xamarin Forms提供的解决方案模版.本质上,She ...
- 嵌入式开发之内核内存异常排查---关闭oom killer
通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解.uptimedmesg | tailvmstat 1mpstat -P ALL 1pidstat 1iostat -xz 1free ...
- (转)react 项目构建
原文:https://segmentfault.com/a/1190000016342792 写在前面 每次构建react项目的时候都会配置一大堆东西,时间久了就会忘记怎么配置.为了方便自己记忆也为了 ...
- 文档工具的王者Sphinx
Sphinx https://www.sphinx.org.cn/ Sphinx是一个工具,可以轻松创建由Georg Brandl编写并根据BSD许可证授权的智能和美观文档 它最初是为Python文档 ...
- a simple machine learning system demo, for ML study.
Machine Learning System introduction This project is a full stack Django/React/Redux app that uses t ...
- Spark Streaming反压机制
反压(Back Pressure)机制主要用来解决流处理系统中,处理速度比摄入速度慢的情况.是控制流处理中批次流量过载的有效手段. 1 反压机制原理 Spark Streaming中的反压机制是Spa ...
- elastalert 用import属性来组织,引入配置
对应rule的一些公用规则,可以放到一个或者多个头文件中.主的rule yaml文件引入即可.文件名随意,最好别用yaml后缀,要不会被当做一个rule.另外import在rule文件中只能出现一次. ...
- 一款新的好用的SSH工具——FinalShell
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...
- Ubuntu下局域网快速分享文件
本地主机名:zhang 本地环境:Ubuntu 18.04.3 工作中经常需要在多个机器上互传文件,本文分享一种便捷的方法,仅供应急使用. 利用了mdns和python3内置的httpServer.( ...
- kafka 如何保证数据不丢失
一般我们在用到这种消息中件的时候,肯定会考虑要怎样才能保证数据不丢失,在面试中也会问到相关的问题.但凡遇到这种问题,是指3个方面的数据不丢失,即:producer consumer 端数据不丢失 b ...