201671030102陈飞 《英文文本统计分析》结对项目报告

博文简要信息表

项目html

内容java

该做业所属课程git

软件工程github

这个做业的要求出处编程

实验四 软件工程结对项目数组

课程学习目标学习

熟悉软件开发总体流程,提高自身能力测试

本次做业在哪一个具体方面帮助咱们实现目标this

第一次体验一个完整的工程编码


点评信息

点评博客:

201671030102201671030107词频统计软件项目报告

Github连接地址:

源码地址

点评内容:

博文结构较规范,可是内容有一部分并无提到。好比程序结构(即类名),流程图都没有看见。就PSP而言,咱们并无培养出写规划的习惯,以致于如计划时间太短、生成文档时间过程等问题是没法避免的。 从代码来看,代码机构划分不明显,但功能基本实现。人机交互界面较为空难。

点评心得:

在读取代码以后发现了,使用hashmap这个存储结构可以极大的提高程序处理文件的速度,因为我使用泛型数组致使程序运行速度较慢


源码地址

源码可于此处查看

结对项目实施过程

需求分析
根据实验四 软件工程结对项目所提要求,咱们分析的主要需求有:
         a. 可处理任意用户输入的任意英文文本功能;
         b. 统计该文本的行数和字符数功能
         c. 指定单词词频统计功能;
         d. 前k个高频词统计功能;
         e. 统计该文本全部单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt功能
         f. 统计时计时功能;
         g. GUI人机交互界面;
         h. 统计文本中除冠词、代词、介词以外的高频词;

软件设计

在第二次实验中,我没有将各功能分开分别在几个类中实现,因此这一次吸收了上一次的经验教训
该软件共有10个类:
         1. frequency.java类用于调用文本输入界面MainWindows.java类
         2.MainWindows.java类用于实现文本输入界面,当输入一个文本名时若是存在,则顺利进入功能选择并实现界面OneWindows.java类,不然,弹出文件不存在的提示框;
         3. OneWindows.java类利用JFrameButton功能实现对各功能选择界面的监听,当获取到各按钮的id以后将实现各功能的界面,默认的界面是ChuLi.java类,当点击按值排序的按钮时调用GaoPin.java类,当点击查询单词的按钮时调用px.java类,当点击保存退出的按钮时将全部单词按照字母表顺序存放到result.txt文件中,将除了介词、代词、冠词之外的其他词汇按照词频从高到底的顺序保存到result1.txt文件中,以后弹出提示信息:“文件已经将除了介词、代词、冠词以外的单词按词频高低保存到result1.txt中\n将全部的单词按字典顺序保存到result.txt中\n注:此处为附加任务一所得结果”;
         4. ChuLi.java类所实现的处理信息,包括:文本名、文本行数、文本字符数、分离文本中的单词并统计各单词词频所花费的时间;
         5. px.java类用于实现输入须要输出的高频词汇的个数,点击确认后,会将按照词频从高到低的顺序输出到OneWindows.java类的界面中;
         6. GaoPin.java类用于实现从OneWindows.java类获取一个字符串,而后调用WordQuery.java类类对该字符串进行处理;
         7. wordQuery.java类用于将须要查询的特殊词对应的词频输出而且将其绘制成JFrame所实现可视化柱状图;
         8. SortMapByValue.java类根据映射的值排序,排序后可根据用户输入的k值进行输出
         9. SortMapByValue.java类根据映射的键排序,排序后将单词以及单词对应的词频保存至result.txt文件中
         10.TongJiGaoPinCi.java类用于实现除了介词、代词、冠词以外的其它词以及其对应的高频词保存至result1.txt文件中。

核心功能代码段展现

输入文本名界面,若文本不存在,则弹出提示框,不然处理文本并计时:

JLabel l1=new JLabel("请输入文件名");
    j1.add(l1);
    JTextField FileName =new JTextField(15);
    j2.add(FileName);
    JButton en=new JButton("确认");
    j3.add(en);
    this.add(j1);
    this.add(j2);
    this.add(j3);
    en.addActionListener(event ->{
        Filename=FileName.getText();
        if(Filename.length()==0)
        {
            FileName.setText("文件名不能为空!");
        }
        else
        {   
            long date1=System.currentTimeMillis();
             String regex = "[1234567890”“…—‘’ 【】、.。,,。\"!--;:?\'\\]]";
                try {
                    // 读取要处理的文件
                    File f=new File(Filename);
                    if(!f.exists())
                    {
                        JOptionPane.showMessageDialog(null, "文件不存在", "警告", JOptionPane.ERROR_MESSAGE);
                        FileName.setText("");
                    }
                    else {
                        this.setVisible(false);
                        BufferedReader br = new BufferedReader(new FileReader(Filename));
                        
                        String value;
                        while ((value = br.readLine()) != null) {
                            hang++;
                            zifu+=value.length();
                            value = value.replaceAll(regex, " ");
                            // 使用StringTokenizer来分词
                            StringTokenizer tokenizer = new StringTokenizer(value);
                            while (tokenizer.hasMoreTokens()) {
                                String word = tokenizer.nextToken();
                                if (!hashMap.containsKey(word)) {
                                    hashMap.put(word, new Integer(1));
                                } else {
                                    int k = hashMap.get(word).intValue() + 1;
                                    hashMap.put(word, new Integer(k));
                                }
                            }
                        }
                        br.close();
                        long date2=System.currentTimeMillis();
                        time=date2-date1;
                        OneWindows o=new OneWindows();
                        o.setVisible(true);
                        o.setSize(600,300);
                        o.setLocation(300,200);
                        o.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    }

不一样功能根据按钮所获取的id来弹出相应的用户界面

ChuLi c=new ChuLi();
        this.add(c,BorderLayout.CENTER);
        c.setVisible(true);
        GaoPin g=new GaoPin();
        px p=new px();
        
        b1.addActionListener(event ->{
            this.add(c,BorderLayout.CENTER);
            c.setVisible(true);
            g.setVisible(false);
            p.setVisible(false);
        });
        b2.addActionListener(event ->{
            this.add(p,BorderLayout.CENTER);
            p.setVisible(true);
            g.setVisible(false);
            c.setVisible(false);
        });
        b3.addActionListener(event ->{
            this.add(g,BorderLayout.CENTER);
            g.setVisible(true);
            c.setVisible(false);
            p.setVisible(false);
        });
        b4.addActionListener(event ->{
            g.setVisible(false);
            c.setVisible(false);
            p.setVisible(false);
            TongJiGaoPinCi.tongjigaopinci();
            JOptionPane.showMessageDialog(null, "文件已经将除了介词、代词、冠词以外的单词按词频高低保存到result1.txt中\n将全部的单词按字典顺序保存到result.txt中\n注:此处为附加任务一所得结果", "保存", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        });


程序运行

文本处理功能,文本行数、字符数统计功能,词频统计所耗费的毫秒数功能(即计时功能):

文本未找到时弹出提示框功能:

按值排序功能:

查找单词并绘制柱状图功能:

保存并退出功能(将除了介词、代词、冠词的单词按照词频的高低顺序保存到result1.txt文件中,将全部单词按照字母表顺序保存到result.txt文件中):

result.txt文件的内容:

result1.txt文件的内容:


结对照片


结对做业的PSP

PSP2.1

任务内容

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

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

Planning

计划

10

8

Estimate

估计这个任务须要多少时间,并规划大体工做步骤

8

6

Development

开发

120

150

Analysis

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

6

10

Design Spec

生成设计文档

15

26

Design Review

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

4

5

Coding Standard

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

5

4

Design

具体设计

10

15

Coding

具体编码

240

300

Code Review

代码复审

10

9

Test

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

20

25

Reporting

报告

9

6

Test Report

测试报告

10

8

Size Measurement

计算工做量

2

2

Process Improvement Plan

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

3

3

      根据PSP表能够看到,咱们在开发和编码的时候实际时间远多于计划时间,这是因为在开发和编码的过程当中,JFrame图形用户界面的好多知识点已经忘了,因此在开发和编码的过程当中须要不断在网上和教材上去查找和从新学习相关的知识点,因此耗费的时间比较多。       在这次开发过程当中发现,不一样的人有不一样的编程风格,并且在不理解别人风格的状况下是很难进行沟通的       固然,实验二中存在的处理后文本有非单词的状况和没有面向对象的思想的问题,在此次的实验中也有努力的解决。

相关文章
相关标签/搜索