• 201671010459张旭辉-词频统计软件项目报告


    课程名称

    2016级计算机科学与工程学院软件工程

    作业要求

    实验二 软件工程个人项目

    课程目标

    尝试按照《构建之法》第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发。

    作业意义

    1)掌握软件项目个人开发流程。

    2)掌握Github上发布软件项目的操作方法

     

    Github的仓库主页的链接地址:https://github.com/16rgzxh/zxh-/tree/master/test/src

    1.需求分析:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。

    2.功能设计

    1.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k单词的词频及单词。

    2.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt

    3. 设计实现,设计包括你会有哪些类,这些类分别负责什么功能。

    a)     public BufferedReader(Reader in,int sz)

    创建一个使用指定大小输入缓冲区的缓冲字符输入流。

    in - 一个 Reader

    sz - 输入缓冲区的大小

    b)   public BufferedReader(Reader in)

    创建一个使用默认大小输入缓冲区的缓冲字符输入流.

    c)   toLowerCase 方法
    字符串中的字母被转换为小写字母.

    d)   ArrayList 排序方法

    实现对数组的排序,给输出的单词频率高低进行排序.

    e)   PrintStream 打印输出流.

    实现统计文本的输出,输出文本结果保存在文档中.

    4. 测试运行请展示程序的运行截图,包括题目要求实现功能运行截图。

     

    5.代码片段博客园正确的代码控件来显示。(提示:要有必要的注释说明,提示:不要贴所有代码!不符合规定的要倒扣分)

    BufferedReader br = new BufferedReader(new FileReader("src/a.txt"));

                StringBuffer sb = new StringBuffer();

                String text="";

                System.out.println(br.readLine()!=null);

                while ((text=br.readLine())!=null){

                //遍历追加

                    sb.append(text);

                }

                //关闭流

                br.close();

                // stringBuffer转为字符并转换为小写

                String str = sb.toString().toLowerCase();

                // 正则表达式    非单词的字符来分割,得到所有单词

                String[] words = str.split("[^(a-zA-Z)]+");

                Map<String ,Integer> map = new HashMap<String, Integer>() ;

     

                for(String word :words){

                // 若不存在说明是第一次,则加入到map,出现次数为1

                    if(map.get(word)==null){ 

                        map.put(word,1);

                    }else{

                       // 若存在,次数累加1

                        map.put(word,map.get(word)+1);

                    }

                }

    6. 总结:

    所谓模块化就是将整体软件系统划分成许多个逻辑上相对独立且可独立访问的模块,不同的模块通常具有不同的功能。模块是程序中逻辑上相对独立的单元,每个模块可独立地进行设计、开发和测试,最后所有模块组装在—起从而形成一个完整的软件系统。在结构化方法中,一个模块可能是一个过程、函数或子程序等,它是构成软件的基本构件。

    设计原则:

    l  建立数据流,可输入的英文文本,遍历文本,统计各个单词出现次数。

    l  排序:对统计的单词书出现频率进行排序,一出现频率由高到低的顺序排序,

    l  输出单词总数并输出单词出现频率的结果,并且可以查询所需单词的次数。

    l  写入输出文本,存储统计结果。

    7. 展示PSP

    PSP2.1

    任务内容

    计划共完成需要的时间(min)

    实际完成需要的时间(min)

    Planning

    计划

    30

    40

    Estimate

    估计这个任务需要多少时间,并规划大致工作步骤

    20

    25

    Development

    开发

    300

    720

    Analysis

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

    120

    150

    Design Spec

    生成设计文档

    45

    60

    Design Review

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

    20

    10

    Coding Standard

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

    20

    30

    Design

    具体设计

    30

    60

    Coding

    具体编码

    300

    600

    Code Review

    代码复审

    40

    80

    Test

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

    120

    150

    Reporting

    报告

    60

    100

    Test Report

    测试报告

    20

    30

    Size Measurement

    计算工作量

    5

    10

    Postmortem & Process Improvement Plan

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

    30

    60

     

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood(度序列构图)
    poj1236
    poj1236
    有向图求强连通分量
    有向图求强连通分量
    zoj 2532(Internship )找割边
    zoj 2532(Internship )找割边
    Expedition POJ
    2016年第七届蓝桥杯C/C++ B组国赛 —— 第四题:机器人塔
    2016年第七届蓝桥杯C/C++ B组国赛 —— 第四题:机器人塔
  • 原文地址:https://www.cnblogs.com/16rgzxh/p/10558737.html
Copyright © 2020-2023  润新知