结对作业

1、代码地址:


2、PSP:

PSP

任务内容

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

Planning

计划

 10

Estimate

明确需求和其他相关因素

 5

Development

开发

 10

Design spec

生成设计文档

 10

Design review

设计复审

 11

Coding standard

代码规范

 10

Design

具体设计

 20

Coding

具体编码

 300

Code review

代码复审

 20

Test

测试

 10

Record time spent

记录用时

 10

Test report

测试报告

 50

Size measurement

计算工作量

 1

Postmortem

事后总结

 30

 

 


3、Information  Hiding:信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。代码模块应该采用定义良好的接口来封装,这些模块的内部结构应该是程序员的私有财产,外部是不可见的。

     Interface Design:接口设计是描述软件内部、软件和操作系统之间及软件和人之间如何通信。

     Loose Coupling:松耦合的目标是最小化依赖。松耦合这个概念主要用来处理可伸缩性、灵活性和容错这些需求。想让对象与对象间松耦合,通过增加抽象类(Abstract Class)或者接口来做到。


4、计算模块采用command类,和之前的个人项目差别不大。

import java.io.IOException;

public class Command {
    public static void main(String[] args)
    {
        int sum = 0, sumZF = 1, min = 1, max = 100;
        boolean cc = false;
        
        try {
            for(int i=0; i<args.length; i++) {
                
                if(args[i].equals("-n") ) {
                    sum = Integer.parseInt(args[++i]);
                }
                else if(args[i].equals("-m")) {
                    min = Integer.parseInt(args[++i]);
                    max = Integer.parseInt(args[++i]);
                    
                    if(min>max) {
                        System.out.println("设置的最小值 :" + min + "大于设置的最大值" + max);
                        return;
                    }
                }
                else if(args[i].equals("-o")) {
                    sumZF = Integer.parseInt(args[++i]);
                }
                else if(args[i].equals("-c")) {
                    cc = true;
                }
                else {
                    System.out.println(args[i] + "不是一个有效的命令,请输入有效的命令(-n, -m, -o, -c)");
                    return;
                }
            }
            
        } catch (Exception e) {
            System.out.println("请输入有效的命令及其对应的参数");
        }
        
        Lib.setSumZF(sumZF);
        Lib.setNum(min, max);
        Lib.setcc(cc);
        
        String[] list = new String[sum+3];
        
        for(int i=0; i<sum; i++){
            list[i] = Lib.makeAndCalQuestion();
        }
        try{
            Lib.print(list, sum);
        }
        catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

 


5、计算模块运用的最快速和简便的方法,效率和性能比较好所以不做修改。


6、单元测试Lib类

import java.io.IOException;

import org.junit.Test;

public class LibTest {
    Lib lib = new Lib();
    @Test
    public void testLib() {
    }

    @Test
    public void testSetSumZF() {
        Lib.setSumZF(5);
        Lib.setSumZF(-1);
    }

    @Test
    public void testSetcc() {
        Lib.setcc(false);
        Lib.setcc(true);
    }

    @Test
    public void testSetNum() {
        Lib.setNum(1, 5);
        Lib.setNum(2, 100);
    }

    @Test
    public void testMakeAndCalQuestion() {
        Lib.setcc(true);
        Lib.setNum(1, 20);
        Lib.setSumZF(5);
        Lib.makeAndCalQuestion();
        Lib.setcc(false);
        Lib.setNum(5, 100);
        Lib.setSumZF(4);
        Lib.makeAndCalQuestion();
    }

    @Test
    public void testPrint() {
        String[] list = new String[10];
        for(int i=0; i< 5; i++)
            list[i] = Lib.makeAndCalQuestion();
        try{
            Lib.print(list, 5);
        }
        catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

}
View Code

代码覆盖率为

 

 


 

8、界面设计采用gui类

import javax.swing.*;
import java.awt.*;

public class GUI extends JFrame{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public GUI() {
        Color color = new Color(200,200,200);
        Font font = new Font("SansSerif",Font.BOLD,18);
        Font font2 = new Font("SansSerif",Font.CENTER_BASELINE,26);
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(5,3));
        
        
        JLabel NOQ= new JLabel("需要的题目数量(1~10000):");
        NOQ.setFont(font);
        p1.add(NOQ);
        
        p1.add(new JTextField(4));
        p1.add(new JLabel(" "));
        
        JLabel RON = new JLabel("题目的数值范围(下界1~100,上界50~1000):");
        RON.setFont(font);
        p1.add(RON);
        
        p1.add(new JTextField(2));
        p1.add(new JTextField(2));
        
        JLabel NOO = new JLabel("题目中最多存在运算符数量:");
        NOO.setFont(font);
        p1.add(NOO);
        
        p1.add(new JTextField(2));
        p1.add(new JLabel(" "));
        
        JLabel isMul = new JLabel("题目中是否有乘除法(默认为无):");
        isMul.setFont(font);
        p1.add(isMul);
        
        JRadioButton b2 = new JRadioButton();
        p1.add(b2);
        b2.setBackground(new Color (200,200,200));
        p1.add(new JLabel(" "));
        
        JLabel isBracket = new JLabel("题目中是否有括号(默认为无):");
        isBracket.setFont(font);
        p1.add(isBracket);
        
        JRadioButton b1 = new JRadioButton();
        b1.setBackground(new Color(200,200,200));
        p1.add(b1);
        p1.add(new JLabel(" "));
        p1.setFont(font);
        
        JPanel p2 = new JPanel();
        JButton Cre = new JButton("开始生成!"); 
        Cre.setFont(font);
        Cre.setBackground(color);
        p2.add(Cre,BorderLayout.WEST);
        
        JButton exit = new JButton("退出系统"); 
        p2.add(exit,BorderLayout.EAST);
        exit.setFont(font);
        exit.setBackground(new Color(200,200,200));
        p2.add(exit,BorderLayout.EAST);
        
        add(p1,BorderLayout.CENTER);
        JLabel title = new JLabel("欢迎来到四则运算题目生成系统!"); 
        title.setFont(font2);
        
        JPanel p3 = new JPanel();
        p3.add(title,BorderLayout.CENTER);
        
        add(p3,BorderLayout.NORTH);
        add(p2,BorderLayout.SOUTH);
        setBackground(Color.cyan);
        p1.setBackground(new Color(200,200,200));
        p2.setBackground(new Color (200,200,200));
        p3.setBackground(new Color (100,100,100));
    }

    public static void main(String[] args) {
        GUI frame = new GUI();
        frame.setTitle("四则运算题目生成系统");
        frame.setSize(1250, 500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    
}
View Code

界面样式

 


 

9、界面模块与计算模块通过Java事件驱动完成连接。


 

10、


 

11、结对编程既有优点又有缺点。

优点:

  1. 增强代码和产品质量,并有效的减少BUG。 
  2. 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。 
  3. 在编程中,相互讨论,可能更快更有效地解决问题

缺点:

       1.有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用

       2.面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐

     队员优缺点:

  肖遥:做事认真,执着,技术比较好,能很好的融入团队并帮助其他队员。缺点:有时候比较马虎,不顾小节。

  自己:为人处事比较宽容,能很好的和别人交流,能认真做一件事。缺点:做事比较拖沓,散漫。

 

posted @ 2018-04-10 09:15  DLion  阅读(157)  评论(1编辑  收藏  举报