WordCount 个人项目

 

Github项目地址:https://github.com/dft123/WordCount

一、题目描述

  •  实现一个简单而完整的软件工具(源程序特征统计程序)。
  •  进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
  •  进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。

二、WC 项目要求

  • wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
  • 实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
  • 具体功能要求:程序处理用户需求的模式为:wc.exe [parameter] [file_name]

三、核心代码

package dft.wc.cn;

import java.io.BufferedReader;
import java.io.File;

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class WordCount2 {
	
	private static Scanner scanner;

	public static void main(String[] args) throws IOException {
		String str =null;
		scanner = new Scanner(System.in);
		while (true) {
			System.out.println("输入您的操作,空一格后输入文件路径");
			 str = scanner.nextLine();
			String[] strArr = str.split(" ");
			switch (strArr[0]) {
			case "-c":
				charcount(strArr[1]);
				break;
			case "-w":
				wordcount(strArr[1]);
				break;
			case "-l":
				linecount(strArr[1]);
				break;
			default:
				System.out.println("操作不存在.");
			}
		}
	}

	// 统计行数
	public static void linecount(String path) throws IOException {
		File src = new File(path);
		int linenum = 0;
		if (src.exists()) {
			BufferedReader br = new BufferedReader(new FileReader(src));
			while (true) {

				if (br.readLine() == null)
					break;
				else
					linenum++;
			}
			br.close();
			System.out.println("文件" + src.getName() + "的行数为: " + linenum);
			System.out.println();
		} else {
			System.out.println(src.getName() + " 文件不存在!");
		}
	}

	// 统计字符数
	public static void charcount(String path) throws IOException {
		File src = new File(path);
		int charnum = 0;
		int a = 0;
		if (src.exists()) {
			BufferedReader br2 = new BufferedReader(new FileReader(src));
			while (a != -1) {
				a = br2.read();
				if (a >= 33 && a <= 126)
					charnum++;
				else
					continue;
			}
			br2.close();
			System.out.println("文件" + src.getName() + "的字符数为: " + charnum);
			System.out.println();
		} else {
			System.out.println(src.getPath() + " 文件不存在!");
		}
	}

	// 统计词数
	public static void wordcount(String path) throws IOException {
		File src = new File(path);
		int wordnum = 0;
		int a = 0, flag = 0;
		if (src.exists()) {
			BufferedReader br2 = new BufferedReader(new FileReader(src));
			while (a != -1) {
				a = br2.read();
				if ((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z')) {
					if (flag == 0)
						flag = 1;
				} else {
					if (flag == 1) {
						wordnum++;
						flag = 0;
					} else
						continue;
				}
			}
			br2.close();
			System.out.println("文件" + src.getName() + "的词数数为: " + wordnum);
			System.out.println();
		} else {
			System.out.println(src.getName() + " 文件不存在!");

		}
	}
}
 

四、测试结果

空文件

 

只有一个字符的文件

 

                

 

 

 只有一个词的文件

               

 

 

只有一行的文件

          

 

 一个典型的源文件

            

 

 

 

 

 

 

 

 

 

 

五、psp

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 10

 20

· Estimate

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

720

 1450

Development

开发

 120

 200 

· Analysis

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

360

 420

· Design Spec

· 生成设计文档

 10

 10

· Design Review

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

 10

 10

· Coding Standard

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

 10

 30

· Design

· 具体设计

 30

 60

· Coding

· 具体编码

 100

140

· Code Review

· 代码复审

 10

 15

· Test

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

 30

 50

Reporting

报告

 10

 20

· Test Report

· 测试报告

 10

 10

· Size Measurement

· 计算工作量

 15

 0

· Postmortem & Process Improvement Plan

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

 15

 30

合计

 

740

 

1330

 

 

 

 六、总结

  一开始想使用比较熟悉的C语言来完成这个作业的,但是最近又正在学java,于是决定用java来完成这个任务,结果遇到了很多问题。比如对io流的操作还不熟悉,只能实现基本功能,而且花的时间有点多而且可能有点不标准。通过这次的作业我知道了怎么用eclipse来测试代码,学习了如何使用GitHub,加深了对java文件操作和io的理解,学习了如何使用exe4j将jar文件生成exe文件,其中这个环节花了我很多时间,原因只是因为我的粗心,console operation选项没有√导致exe文件打不开,归根结底之前学的不够多,导致很多只是都是需要用了才临时学,导致花了很多时间,我认识到了自己的不足,以后还需要更加的努力,多学点知识。

 

posted @ 2020-03-17 21:11  刺眼d  阅读(196)  评论(0编辑  收藏  举报