码迷,mamicode.com
首页 > 其他好文 > 详细

结对作业

时间:2018-04-10 10:51:57      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:color   3.5   ref   sof   监听   标题   新技术   command   无法   

1.Coding.Net项目地址https://git.coding.net/Meloody/jieduizuoye.git

2.PSP表格

在末尾。

3.Information Hiding, Interface Design, Loose Coupling

Information Hiding(信息隐藏):指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的,是一种重要的软件开发手段,它与对象的封装(encapsulation)与模块化(modularity)密切相关。

我们在实现的过程中经常发生变量混乱的问题,导致经常会莫名的产生错误,导致我们去查看前面编写的代码,后来就经常运用privite ,需要的话就通过访问函数实现。

private String exe;
private Object answer;

Interface Design(接口设计):面向接口编程是软件工程领域常用的设计手段

Loose Coupling(松耦合):允许改变或者当问题发生在“电线的一端时”来避免影响到其他的端点,目标是最小化依赖。

4.计算模块接口的设计与实现过程

技术分享图片

     Command类:GUI界面;

     Calculate类:运行结果以及表达式中符号的转换;

     Expression类:产生满足要求的“题目“;

     Judge类:将输入数字与正确结果进行比较并记录总共正确的题数;

     Change类:替换符号;

     Answer类:GUI答题界面的后续模块;

算法的关键对我自己来说就是输入结果和正确结果的各种处理,刚开始由于没处理好,导致realyAnswe传的空值,程序无法正常运行,捣鼓了好久才弄好。至于独到之处,我们原本是想将“*“与”/“换成小学生所熟悉的计算符号,但是没成功,有点可惜。

5.计算模块接口部分的性能改进

通过参数传值,类间调用等实现模块的对接(主要是Command类和Expression类)。参考Frofile教程,学习软件用了约三小时,内存消耗如图:分析可知相对稳定。

技术分享图片

 

最初由项目的Command。java右键Profile As,进入性能分析,其次打开JVM虚拟机(可以用教程的密码破解Frofile软件)。

然后进入Live memory,最初消耗变化如图:

技术分享图片

 等待两分钟后,出现红色绿色并存现象:

技术分享图片

性能分析排查后,发现代码还有不足,进行优化处理。花费了约一小时,代码优化改进了,并且把占用内存的四则运算GUI小程序关闭,IO输入流关闭,性能如图明显提高。

技术分享图片

6.单元测试

技术分享图片

技术分享图片

技术分享图片技术分享图片

 

8.界面模块的详细设计过程

我们在设计的时候就想主要分成三个界面

第一个界面是用来进行对题目数量的要求,包括题目数量,数值范围,有无乘除法以及运算符的个数;

第二个界面是包括生成的题目,我们需要输入的答案,以及计时功能;

第三个界面则是提示我们结果的正确,以及历史所有的总正确数目;

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Command extends JFrame {
    private static final long serialVersionUID = 1L;
    // 定义登录界面的组件
    JButton jb1, jb2, jb3 = null;
    JPanel jp1, jp2, jp3, jp4,jp5,jp6= null;
    JTextField jtf = null;
    JTextField jpf = null;
    
    JTextField jpfM = null;
    
    JTextField jtf1 = null;
    JTextField jpf1= null;
    
    JLabel jlb1, jlb2,jlb3, jlb4= null;
    ButtonGroup bg = null;
    static int exepresionNum = 0;
    
    static int exepresionRangeNum;
    
    static int jtfNum = 0;
    static int jpfNum = 0;
    
    static int jpfMNum = 0;
    
    static int jtf1Num = 1;
    static int jpf1Num = 0;

    public static void main(String[] args) {
        new Command();
    }

    // 构造函数
    public Command() {
        // 创建组件
        jb1 = new JButton("确认");
        jb2 = new JButton("刷新");
        jb3 = new JButton("退出");
        // 设置监听
        jb1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                OK();
            }
        });
        jb2.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                clear(); 
            }
        });
        jb3.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        jp1 = new JPanel();
        jp2 = new JPanel();
        jp3 = new JPanel();
        jp4 = new JPanel();
        jp5 = new JPanel();
        jp6 = new JPanel();

        jlb1 = new JLabel("生成题目个数:");
        jlb2 = new JLabel("题目数值范围:");
        jlb3 = new JLabel("操作符个数:");
        jlb4 = new JLabel("乘除法 0无1有:");

        jtf = new JTextField(10);
        jpf = new JTextField(4);
        
        jpfM = new JTextField(4);
        
        jtf1 = new JTextField(10);
        jpf1 = new JTextField(10);
        // 加入到JPanel中
        jp1.add(jlb1);
        jp1.add(jtf);

        jp2.add(jlb2);//jpfM是最大值
        jp2.add(jpf);
        jp2.add(jpfM);
        
        
        jp5.add(jlb3);
        jp5.add(jtf1);

        jp6.add(jlb4);
        jp6.add(jpf1);

        jp4.add(jb1);
        jp4.add(jb2);
        jp4.add(jb3);
        // 加入JFrame中
        this.add(jp1);
        this.add(jp2);
        this.add(jp5);
        this.add(jp6);
        this.add(jp3);
        this.add(jp4);
        

        // 设置布局管理器
        jlb1.setFont(new java.awt.Font("Dialog", 0, 20));
        jlb2.setFont(new java.awt.Font("Dialog", 0, 20));
        jlb3.setFont(new java.awt.Font("Dialog", 0, 20));
        jlb4.setFont(new java.awt.Font("Dialog", 0, 20));
        jtf.setFont(new Font("宋体", Font.PLAIN, 20));
        jpf.setFont(new Font("宋体", Font.PLAIN, 20));
        
        jpfM.setFont(new Font("宋体", Font.PLAIN, 20));
        
        jtf1.setFont(new Font("宋体", Font.PLAIN, 20));
        jpf1.setFont(new Font("宋体", Font.PLAIN, 20));
        Font f = new Font("华文行楷", Font.BOLD, 20);
        jb1.setFont(f);
        jb2.setFont(f);
        jb3.setFont(f);
        this.setLayout(new GridLayout(4, 1));
        // 给窗口设置标题
        this.setTitle("小学生四则运算界面");
        // 设置窗体大小
        this.setSize(600, 300);
        // 设置窗体初始位置
        this.setLocation(700, 330);
        // 设置当关闭窗口时,保证JVM也退出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 显示窗体
        this.setVisible(true);
        this.setResizable(true);
    }

    // 清空文本框
    public void clear() {
        jtf.setText("");
        jpf.setText("");
        
        jpfM.setText("");
        
        jtf1.setText("");
        jpf1.setText("");
    }
import javax.swing.*;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Answer extends JFrame {
    private static final long serialVersionUID = 1L;

    private static final String INITIAL_LABEL_TEXT = "00:00:00 000";
    // 线程
    private CountingThread thread = new CountingThread();
    // 开始时间
    private long programStart = System.currentTimeMillis();
    // 程序暂停
    private JLabel label = new JLabel(INITIAL_LABEL_TEXT);

    JButton button, quit = null;
    JPanel yh, yh1, yh2 = null;
    JLabel question = null;
    static JTextField answer = null;
    Expression exp;
if (answer.getText().isEmpty()) {
            JOptionPane.showMessageDialog(null, "请输入答案!", "提示消息",
                    JOptionPane.WARNING_MESSAGE);
        } else if (jud.judge(this.exp.getAnswer(), answer.getText())) {
            JOptionPane
                    .showMessageDialog(
                            null,
                            "正确答案为"
                                    + this.exp.getAnswer()
                                    + ".  "
                                    + "恭喜你答对了.  耗时"
                                    + (System.currentTimeMillis() - programStart)
                                    + "ms"
                                    + ".  "
                                    + "本次答对"
                                    + Judge.rightnum
                                    + ",共答对"
                                    + (Integer.parseInt(WriteReader.reader()
                                            .trim()) + Judge.rightnum) + "道题"/*+(Integer.parseDouble(Judge.rightnum/Four.jtfNum))*/,
                            "提示消息", JOptionPane.WARNING_MESSAGE);
            Command.create();
            dispose();
        } else { 
            JOptionPane
                    .showMessageDialog(
                            null,
                            "正确答案为"
                                    + this.exp.getAnswer()
                                    + ".  "
                                    + "很遗憾答错了.  耗时"
                                    + (System.currentTimeMillis() - programStart)
                                    + "ms"
                                    + ".  "
                                    + "本次答对"
                                    + Judge.rightnum
                                    + ",共答对"
                                    + (Integer.parseInt(WriteReader.reader()
                                            .trim()) + Judge.rightnum) + "道题",
                            "提示消息", JOptionPane.WARNING_MESSAGE);
            Command.create();
            dispose();
        }
    }

9.界面模块与计算模块的对接

通过依靠参数传值实现模块的对接(主要是Command类和Expression类)

界面具体介绍:

(1)第一个界面对题目要求的限制

技术分享图片

(2)要求信息输入完整(不完整)的界面

技术分享图片技术分享图片

(3)题目界面

技术分享图片

(4)答案正确(错误)的提示界面

技术分享图片技术分享图片

(5)不输答案直接提交的界面

技术分享图片

10.描述结对的过程

我们在结对的过程中花了很多时间在代码上,也在分析的阶段确定了各自的需要分工的范围,比如单元测试和性能分析的学习。

技术分享图片

11.结对编程的优点和缺点

遇到问题可以更好更快的解决,而且对一些细节可以进行分工,加快我们的实现进程,但是我们在结对的过程中彼此的想法会产生分歧,这有时也会浪费许多时间来达成共识。

成员优缺点:

卫小琼:代码能力强,能钻研,同学关系好,解决不了的问题能找到人帮忙,但是有时会钻牛角尖;

陈双林:脾气好,能坚持,有上进心,但是编码能力弱。

12.PSP表格

 

SP2.1

    Personal Software

       Process Stages

            Time 

     SeniorStudenth

 Time 

SDEh

           Planning

                 计划

5

      6

Estimate

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

                      1

                   1

         Development

                  开发

                      200

                  240

           Analysis

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

                       98

                   130

         Design Spec

           生成设计文档

                        0.5

                    1.5

        Design Review

               设计复审 

                         0

                    0

         Coding Standard

               代码规范 

                        1

                    1.5

             Design

               具体设计

                        2

                    2.5

             Coding

               具体编码

                       93  

                   98

           Code Review

               代码复审

                        2

                    5

              Test

                  测试

                        1.5

                    2

           Reporting

                  报告

                        4         

                    6

  • Test Report

                测试报告

                        3

                   3.5 

  • Size Measurement

              计算工作量

                        1

                     1.5   

  • Postmortem& ProcessImprovement Plan

                事后总结

       并提出过程改进计划

        1

结对作业

标签:color   3.5   ref   sof   监听   标题   新技术   command   无法   

原文地址:https://www.cnblogs.com/csl1314520/p/8776399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!