java 项目常用功能_软件工程:java实现wc项目基本功能

项目相关要求

项目地址:https://github.com/xiawork/wcwork

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:

基本功能列表:

wc.exe -c file.c //返回文件 file.c 的字符数

wc.exe -w file.c //返回文件 file.c 的词的数目

wc.exe -l file.c //返回文件 file.c 的行数

扩展功能:

-s 递归处理目录下符合条件的文件。

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

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

代码行:本行包括多于一个字符的代码。

注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

高级功能:

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

90

· Estimate

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

60

120

Development

开发

900

1360

· Analysis

· 需求分析 (包括学习新技术)

60

90

· Design Spec

· 生成设计文档

30

50

· Design Review

· 设计复审 (和同事审核设计文档)

30

40

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

20

15

· Design

· 具体设计

60

40

· Coding

· 具体编码

200

210

· Code Review

· 代码复审

30

40

· Test

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

100

110

Reporting

报告

120

150

· Test Report

· 测试报告

60

80

· Size Measurement

· 计算工作量

30

40

· Postmortem & Process Improvement Plan

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

60

20

合计

1760

2455

解题思路:

程序首先通过编写控制台,通过输入的文件路径获得文件,然后通过BuffeInputStream和FileReader对文件进行操作,获得文件具体对象,

通过这个对象给予我们的内容,在另一个方法类里调用相应的方法创建获取字符数,单词数,总行数的方法readcharacter(),readword(),readline(),

然后通过main函数运行,得出所要结果。

困难和解决

在设计方法时,使用正则表达式不准确,经常出现格式错误,后面通过大量搜集查找相关问题,初步解决了格式出错的问题

在文件目录输入过程中,忘记了控制台的编写,导致后面常出现编译成功,但是没有文件输入这功能

在文件调用过程中不熟悉具体内涵,对一些操作总是不明了

设计思路

本项目包含两个类,一个是包含主方法的wc类,一个是包含方法功能的fuctionn类。

1e14ba81a148cf77f9b291e08a1b369b.png

Wc的main函数表示

public static void main(String[] args) throws IOException {

File file=fuction.getFile(); //获取文件

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file)); //读取文件

FileReader reader = new FileReader(file);

int fileLen = (int)file.length();

char[] chars = new char[fileLen];

reader.read(chars);

String txt = String.valueOf(chars);

System.out.println("请输入命令:");

Scanner sc=new Scanner(System.in); //创建键盘录入对象

String line = sc.nextLine(); //具体输入实例对象

switch(line) {

case"-l":

fuction.readline(txt);

break;

case"-w":

fuction.readword(txt);

break;

case"-c":

fuction.readcharacter(txt);

break;

}

bis.close(); //关流释放资源

}

fuction类中的getfile()方法

public static File getFile() {

System.out.println("请录入一个文件路径:");

Scanner sc=new Scanner(System.in); //创建键盘录入对象

while(true) {

String line=sc.nextLine(); // 接收键盘录入的路径

File file=new File(line); //封装成File对象,对其进行判断

if(!file.exists()) {

System.out.println("您录入的文件路径不存在,请重新录入");

}else if(file.isDirectory()) {

System.out.println("你录入的是文件夹路径,请重新录入");

}else {

return file;

}

}

}

fuction中的readline()方法

用正则表达式,将文件内容分割成一个个的数组,再通过对数组的操作得到想要的结果

public static void readline(String file){

String[] array = file.split("\r");

int len = array.length;

System.out.print("代码行数为:" + len);

}

fuction中的readword()方法

public static void readword(String file) {

int i;

String[] array = file.split("\\s+");

int len = array.length;

System.out.print("单词数为:" + len);

}

fuction中的readcharacter()方法

public static void readcharacter(String file) {

int i;

String[] array = file.split("\\w");

int len = array.length;

System.out.print("字符数为:" + len);

}

测试结果

feed33b137ce58f7d8bef2268c1063d8.png

6809cac98bffd3ce02d101341119cbc8.png

c10e7453a044a60fafa9746e0146afcd.png

86e7137fabb5b3fc49928be73c796c25.png

代码覆盖率

ea0187384fcd12f413cceb7076027cfb.png

总结

通过这次项目的练习,我发现我对编写过程的不熟悉,编程语言的基础很薄弱,有很多的编程常识都不清楚,很多东西都要学习,很多以前学习过的基本内容也要重新学习一遍,第一次写项目,对这个过程很不熟悉,也因此花费了许多不必要的时间,所幸通过身边同学们的帮助,让我的项目进程有所推进,而在这个过程中,我也学习到了很多的知识,对项目开发这类多少也有了些许的经验。以后我也也需要多多努力,尽力的提升自己。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值