结对项目

 

项目代码地址:https://git.coding.net/bigben123/7897.git

暂时我们只实现了出题功能。

这是在开始开发前,预计消耗的时间

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

 

 

接口设计

Information Hiding:信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。信息隐藏是结构化设计与面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。软件业对这个原则的认同也是最近十年的事情。

Interface Design:接口设计,即对接口的逻辑等属性进行设计,来增强代码的可读性。

Loose Coupling:松耦合系统通常是基于消息的系统,此时客户端和服务端并不知道对方是如何实现的。就是我们在写程序前将其功能模块化。

四、计算模块接口的实现与实现过程。

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();
        }
    }
}

五、单元测试

我们用单元测试测试了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();
        }
    }

}

得到的代码覆盖率如下图

 五、页面设计模块

我们采用了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);
    }
    
    
}

七、结队编程感想

对于我们这种基础较弱的同学,结对编程也给了我们讨论与一起进步的空间,虽然做得不好,但是还是非常有收获,我相信在一次次的不好当中,我们会变强,总有一天,我们可以做得好。

缺点方面的话,可能就是我们都不强,做得很痛苦。

posted @ 2018-04-10 08:29  圣光背叛了我五次  阅读(120)  评论(1编辑  收藏  举报