首页 > 其他 > 详细

系统分析与设计个人作业:WordCount

时间:2018-09-25 00:22:53      阅读:130      评论:0      收藏:0      [点我收藏+]

本次作业gitee地址:https://gitee.com/ackary/WordCount

一、项目简介

本项目主要实现的功能是统计一个程序设计语言源文件的字符数、单词数、行数,之后将统计结果输出到result.txt文件。可执行程序为wc.exe,实现形式如下:

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

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

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

wc.exe -o result.txt  //将统计结果输出到文件result.txt

二、PSP表格

 

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30

 50

· Estimate

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

 600

 840

Development

开发

 500

 720

· Analysis

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

 100

 130

· Design Spec

· 生成设计文档

 

 

· Design Review

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

 

 

· Coding Standard

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

 30

 50

· Design

· 具体设计

 40

 30

· Coding

· 具体编码

 400

 450

· Code Review

· 代码复审

 30

 40

· Test

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

 90

 150

Reporting

报告

 30

 50

· Test Report

· 测试报告

 

 

· Size Measurement

· 计算工作量

 30

 30

· Postmortem & Process Improvement Plan

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

 30

 40

 

合计

 560

 820

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、解题思路

我实现了本项目的基础功能部分,对这部分功能的思路还是十分清晰。由于基础功能部分实现起来较为容易,因此我直接将所有代码全部写在一个类basicCount中,按功能划分主要有统计功能模块(由函数wordCount()实现)、结果输出模块(在main()主函数中实现)。

1、统计功能模块

该模块主要实现字符统计、单词统计、行数统计这三个基本功能,算法相对简单,基本思路就是使用Java IO流的知识逐字符的读取源文件file.c,通过readline()方法返回每一行字符的长度就是该行字符的个数;每次读完一行,对应的行数加1;当读取到 “ ,与 空格” 后对应的单词数加1。

2、结果输出模块

该模块就是通过获取对应指令然后输出对应的统计结果,‘-c’输出统计的字符总数,‘-w’输出统计的单词总数,‘-l’输出统计的总行数,‘-o’指定对应的输出文件。

四、程序设计

1、命令处理及判断

for(int i=0;i<args.length;i++)
{
switch(args[i]){
case "-c":{
System.out.println("字符个数:" + charNum);
break;
}
case "-w":{
System.out.println("单词个数:" + wordNum);
break;
}
case "-l":{
System.out.println("代码行数:" + lineNum);
break;
}
case "-o":{
String resultTxt="";
for(int j=0;j<args.length;j++){
if(args[j].equals("-c"))
resultTxt=resultTxt+"\r\n"+"字符个数:" + charNum;
if(args[j].equals("-w"))
resultTxt=resultTxt+"\r\n"+"单词个数:" + wordNum;
if(args[j].equals("-l"))
resultTxt=resultTxt+"\r\n"+"代码行数:" + lineNum;
}
}
}
}

2、文件读取和计数
public void wordCount(String inputFile) throws IOException{
String lineString = null;
String[] buffer;
File infile=new File(inputFile);
BufferedReader bf = new BufferedReader(new FileReader(infile));
while((lineString=bf.readLine())!=null){
buffer=lineString.split(",| "); //当读取到“ ,与 空格”后,结束赋值
for(int i=0;i<buffer.length;i++){
if(!buffer[i].equals(""))
wordNum++;
}
lineNum++;
charNum+=lineString.length();
}
bf.close();
}

3、输出结果到指定文件
File outfile = new File(outputFile);
outfile.createNewFile(); // 创建新文件
BufferedWriter bw = new BufferedWriter(new FileWriter(outfile));
bw.write(resultTxt);
bw.flush(); // 将缓存区内容压入文件
bw.close(); //关闭文件

五、代码测试

1、字符统计测试

输入:wc.exe –c file.c

期望输出:字符个数:244

实际输出:字符个数:244

技术分享图片

分析:符合预期

 

2、单词统计测试

输入:wc.exe –w file.c

期望输出:单词个数:49

实际输出:单词个数:49

技术分享图片

分析:符合预期

 

3、行数统计测试

输入:wc.exe –l file.c

期望输出:代码行数:19

实际输出:代码行数:19

技术分享图片

分析:符合预期

 

4、输出文件测试

输入:wc.exe -c -w -l file.c -o result.txt

期望输出:

字符个数:244
单词个数:49
代码行数:19

实际输出:

字符个数:244
单词个数:49
代码行数:19

 

技术分享图片

技术分享图片

分析:符合预期

 

六、参考文献链接

使用exe4j将java文件打成exe文件运行详细教程:https://blog.csdn.net/zzzgd_666/article/details/80756430

FileInputStream、InputStreamReader和BufferedReader几种读取文件的区别:https://blog.csdn.net/pkx1993/article/details/80991812

Java中main方法参数String args[]的使用:https://www.cnblogs.com/xy-hong/p/7197725.html

七、项目总结

总的来说,我个人认为我这次的项目还存在很大的不足之处,我所实现的功能有限,代码也存在一定的问题,但是通过本次的项目,我还是有较大的收获。首先,通过本次作业,我对于Java的知识有了进一步的了解,因为我本身对Java的了解不是很多,而这次的作业我之所以选择用Java语言来编写,最主要还是想要通过实际的编程来提高我对这门语言的了解,结果我还是比较满意的,我确实收获了许多有关Java的知识,特别是Java IO部分的知识,这对于我的学习非常有用;其次呢,通过本次作业,我也对《系统分析与设计》这门课程理解更深了,作为程序员,我们不仅要有良好的编程基础,还要熟练掌握对代码的测试能力,更要有对一个项目的整体把控能力,我认为这次填写的PSP表格就是对于我们有关这方面的很好训练,我也会在今后的项目过程中不断强调自己这样去做,这是我们所需要具备的能力。

 

 

 
 

 

 

 

系统分析与设计个人作业:WordCount

原文:https://www.cnblogs.com/ackary/p/9697199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!