Homework01

一.码云地址(码云上传失败,正在解决中,提供GitHub地址)

https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign

https://gitee.com/Crls7/Homework01

二.PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 30

 25

· Estimate

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

 300

 350

Development

开发

 240

 180

· Analysis

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

 30

 20

· Design Spec

· 生成设计文档

 30

 30

· Design Review

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

 0

 0

· Coding Standard

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

 0

 0

· Design

· 具体设计

 50

 30

· Coding

· 具体编码

 240

 180

· Code Review

· 代码复审

 50

 180

· Test

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

 30

 30

Reporting

报告

 200

 150

· Test Report

· 测试报告

 60

80 

· Size Measurement

· 计算工作量

 300

 400

· Postmortem & Process Improvement Plan

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

 40

 60

 

合计

 700

 600

三.需求功能分析

本项目主要基础功能是功能是实现文件的字符,单词数,行数统计。对于整个项目功能大家可能实现起来难度并不大,主要这次是我们对于软件工程项目的理解和实践,详细的去完成各个模块,才是我们本项工作的重点和学习的意义。
WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
可执行程序命名为:wc.exe,该程序处理用户需求的模式为:
wc.exe [parameter] [input_file_name]
存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

四.程序设计

对于文件的输入输出,Java语言提供了完善的io包,通过输入输出流的知识极易操作且安全有效的完成项目基础功能。
程序主要分为三个功能类,和主程序类。
  • 三个功能类,分别实现统计文件字符数,单词数和行数。

  • 主程序类主要完成对功能类的实例化和调用。

五.部分编码

  • CountChar类,统计字符数
package WordCount;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CountChar {
    public int CharNum(String filePath) throws IOException {
        int charNumber=0;
        String line;
        File file=new File(filePath);
        //从文件中读取数据入字符输入缓冲流,为后续的字符操作提供缓冲功能
        FileReader fr = null;
        FileWriter fw=null;
        try {
            fr = new FileReader(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        BufferedReader br=new BufferedReader(fr);
        //将数据存入缓冲字符串
        StringBuffer sb=new StringBuffer();
        //将数据一行一行的存入字符串
        line=br.readLine();
        while(line!=null) {
            sb=sb.append(line);
            line=br.readLine();
        }
        String info=sb.toString();
        charNumber=info.length();
        br.close();
        try {
            fw=new FileWriter("D:\\eclipse\\Homework01\\workdata\\result.txt",true);
            fw.write(filePath+" "+"字符数:"+charNumber);
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        ///错误实例,只能读入第一行数据并判断字符数。而后更改。
        /*if((line=br.readLine())!=null) {
            char[] ch=line.toCharArray();
            for(int i=0;i<ch.length;i++) {
                if(!Character.isWhitespace(ch[i])) {
                    charNumber++;
                }
            }
        }*/
        return charNumber;
}
}
  • CountWord类,统计单词数
package WordCount;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CountWord {
    public int countWord(String filePath) throws IOException {
        int wordNumber=0;
        String line;
        String [] saveWord;//字符串数组,存储分割的单词
        //从文件中读入数据
        File file=new File(filePath);
        FileReader fr=null;
        FileWriter fw=null;
        try {
            fr=new FileReader(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        BufferedReader br=new BufferedReader(fr);
        StringBuffer sb=new StringBuffer();
        //将全部数据存入缓冲字符串
        while((line=br.readLine())!=null) {
            sb.append(line);
        }
        //非字母字符全部用空格替换
        String str=sb.toString().replaceAll("[^a-zA-Z^]", " ");
        saveWord=str.split("\\s+");//匹配字符并进行分割
        wordNumber=saveWord.length;
        br.close();
        try {
            fw=new FileWriter("D:\\eclipse\\Homework01\\workdata\\result.txt",true);
            fw.write(filePath+" "+"单词数:"+wordNumber);
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return wordNumber;
    }
}
  • CountLine类,统计行数
package WordCount;

import java.io.*;

public class CountLine {
    public int CountLine(String filePath) {
        int lineNumber=0;
        String line;
        //从文件中读入数据
        File file=new File(filePath);
        FileReader fr=null;
        FileWriter fw=null;
        try {
            fr=new FileReader(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        BufferedReader br=new BufferedReader(fr);
        //通过行数增加,判断行数。
        try {
            while((line=br.readLine())!=null) {
                lineNumber++;
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            br.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            fw=new FileWriter("D:\\eclipse\\Homework01\\workdata\\result.txt",true);
            fw.write(filePath+" "+"行数:"+lineNumber);
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return lineNumber;
    }
}

 

 

六.程序测试

  • 单元测试

  • 上传git以及GitHub

  • 入口参数测试

  • 实际文件展示

七.项目总结

本次个人项目,对于项目功能的实现,单独并不大,对于代码实现,主要是完成了我们对于Java基础知识的复习,本次项目最大的收获是对于psp表格的运用,将我们的的工作过程量化到细节,使得我们对于自己工作量,工作效能,工作成果,都有一个直观的认识,这不仅有利于我们的学习,更对于我们以后的工作,职业发展有着深远的影响。谢谢大家。
posted @ 2018-09-24 22:43  Crls  阅读(294)  评论(0编辑  收藏  举报