作业5.2(封装及测试)

开发环境:eclipse

结对同伴 :37 施少涛

同伴博客:http://www.cnblogs.com/shishaotao/

预计用时:半天

实际用时:1天

新增功能:1.空值异常处理 2.做错题目可提示做错并给出正确答案 3.可继续做题

import java.awt.EventQueue;



import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.util.Random;

import java.awt.Font;



public class calculator {

    private JFrame frame;

    private JTextField []textField= new JTextField[5];

    JLabel []label = new JLabel[5];

    int []r1=new int[]{1,2,3,4,5};

    int []r2=new int[]{1,2,3,4,5};

    String str3="";

    int Sum;

    int n=1;

    int[]sum=new int[5];

    String []r3=new String[5];

    String []str=new String[5];



    /**

     * Launch the application.

     */

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    calculator window = new calculator();

                    window.frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

    }



    /**

     * Create the application.

     */

    public calculator() {

        initialize();

    }



    /**

     * Initialize the contents of the frame.

     */

    private void initialize() {

        frame = new JFrame();

        frame.setTitle("\u5C0F\u5B66\u56DB\u5219\u8FD0\u7B97");

        frame.setBounds(100, 100, 310, 362);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(null);        

         label[0] = new JLabel("",label[0].RIGHT);

         label[0].setFont(new Font("宋体", Font.PLAIN, 27));

        label[0].setBounds(10, 50, 159, 29);

        frame.getContentPane().add(label[0]);

        

        label[1] = new JLabel("",label[1].RIGHT);

        label[1].setFont(new Font("宋体", Font.PLAIN, 27));

        label[1].setBounds(10, 89, 159, 29);

        frame.getContentPane().add(label[1]);

        

        label[2] = new JLabel("",label[2].RIGHT);

        label[2].setFont(new Font("宋体", Font.PLAIN, 27));

        label[2].setBounds(10, 128, 159, 29);

        frame.getContentPane().add(label[2]);

        

        label[3] = new JLabel("",label[3].RIGHT);

        label[3].setFont(new Font("宋体", Font.PLAIN, 27));

        label[3].setBounds(10, 167, 159, 29);

        frame.getContentPane().add(label[3]);

        

        label[4] = new JLabel("",label[4].RIGHT);

        label[4].setFont(new Font("宋体", Font.PLAIN, 27));

        label[4].setBounds(10, 206, 159, 29);

        frame.getContentPane().add(label[4]);

        

        textField[0] = new JTextField();

        textField[0].setFont(new Font("宋体", Font.PLAIN, 27));

        textField[0].setBounds(188, 50, 66, 29);

        frame.getContentPane().add(textField[0]);

        textField[0].setColumns(10);

        

        textField[1] = new JTextField();

        textField[1].setFont(new Font("宋体", Font.PLAIN, 27));

        textField[1].setColumns(10);

        textField[1].setBounds(188, 93, 66, 29);

        frame.getContentPane().add(textField[1]);

        

        textField[2] = new JTextField();

        textField[2].setFont(new Font("宋体", Font.PLAIN, 27));

        textField[2].setColumns(10);

        textField[2].setBounds(188, 132, 66, 29);

        frame.getContentPane().add(textField[2]);

        

        textField[3] = new JTextField();

        textField[3].setFont(new Font("宋体", Font.PLAIN, 27));

        textField[3].setColumns(10);

        textField[3].setBounds(188, 171, 66, 29);

        frame.getContentPane().add(textField[3]);

        

        textField[4] = new JTextField();

        textField[4].setFont(new Font("宋体", Font.PLAIN, 27));

        textField[4].setColumns(10);

        textField[4].setBounds(188, 210, 66, 29);

        frame.getContentPane().add(textField[4]);

        Stamp st=new Stamp();

        sum=st.output(r1, r2, r3);

        for(int i=0;i<5;i++)

        {

            textField[i].setText(null);

            Sum=0;

            if(!r3[i].equals("!")){

                if(r2[i]<0) label[i].setText(r1[i]+r3[i]+"("+r2[i]+")"+"=");

                else

                    label[i].setText(r1[i]+r3[i]+r2[i]+"=");}

            else

            {

                if(r2[i]<0) label[i].setText(r1[i]+r3[i]+"("+r2[i]+")"+"=");

                else

                     label[i].setText(r2[i]+r3[i]+"=");}

            }    

        JButton button = new JButton("\u6362\u9898");

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0){

                Stamp st=new Stamp();

                sum=st.output(r1, r2, r3);

                for(int i=0;i<5;i++)

                {

                    textField[i].setText(null);

                    Sum=0;

                    if(!r3[i].equals("!")){

                        if(r2[i]<0) label[i].setText(r1[i]+r3[i]+"("+r2[i]+")"+"=");

                        else

                            label[i].setText(r1[i]+r3[i]+r2[i]+"=");}

                    else

                    {

                        if(r2[i]<0) label[i].setText(r1[i]+r3[i]+"("+r2[i]+")"+"=");

                        else

                             label[i].setText(r2[i]+r3[i]+"=");}

                    }        

            }

        });

        button.setBounds(27, 273, 93, 23);

        frame.getContentPane().add(button);

    

        JButton button_1 = new JButton("\u786E\u5B9A");

        button_1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {

                int q=1;int []a=new int[5];int l=0;

                for(int i=0;i<5;i++)

                {a[i]=-1;

                 str[i]=textField[i].getText();

                 char[] ch=str[i].toCharArray();

                 for(int j=str[i].length()-1;j>-1;j--)

                 {

                     if((ch[j]<'0'||ch[j]>'9')&&ch[j]!='-'){

                        a[l]=i;

                        l++;

                        q=0;

                        break;

                     }

                 }



                }if(a[0]!=-1){

                    JOptionPane w=new JOptionPane();

                    w.showMessageDialog(w,"输入有非法字符!", "温馨提示", 0);

                    for(int i=0;i<l;i++){

                    textField[a[i]].setText(null);

                    }

                }

                if(q==1){

                    frame.dispose();

                Output ou=new Output();

                ou.main(sum,str);

                        

                }

            }

        });

        button_1.setBounds(170, 273, 93, 23);

        frame.getContentPane().add(button_1);

    

    }

}



import java.awt.EventQueue;



import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;



import java.awt.Font;

import javax.swing.SwingConstants;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;



public class Output {



    private JFrame frame;

    JLabel []label=new JLabel[5];

    static String []string=new String[5];

    static String st=null;

    int a=0;

    /**

     * Launch the application.

     */

    public static void main(int sum[],String str[]) {

        int fenshu=0;

        int s;

        try{

        for(int i=0;i<5;i++)

        {

            int n=Integer.valueOf(str[i]);

        string[i]=null; s=i+1;

            if(n==sum[i])

            {

                fenshu+=20;

                string[i]="第"+s+"答对了;";

            }

            else{

                string[i]="第"+s+"答错了;正确答案为"+sum[i];

            }            

            }}

            catch(NumberFormatException e){

                JOptionPane w=new JOptionPane();

                w.showMessageDialog(w,"答案不能为空!", "温馨提示", 0);

            }

        

        int x,y;x=fenshu/20;y=5-x;

        st="答对"+x+"题;答错"+y+"题;总得分:"+fenshu+"分";

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    Output window = new Output();

                    window.frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

        

    }



    /**

     * Create the application.

     */

    public Output() {

        //super();

        initialize();

    }



    /**

     * Initialize the contents of the frame.

     */

    private void initialize() {

        frame = new JFrame();

        frame.setBounds(100, 100, 450, 381);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(null);

        

        label[0] = new JLabel("New label");

        label[0].setFont(new Font("宋体", Font.PLAIN, 25));

        label[0].setBounds(10, 29, 414, 37);

        frame.getContentPane().add(label[0]);

        

        label[1] = new JLabel("New label");

        label[1].setFont(new Font("宋体", Font.PLAIN, 25));

        label[1].setBounds(10, 76, 414, 37);

        frame.getContentPane().add(label[1]);

        

        label[2] = new JLabel("New label");

        label[2].setFont(new Font("宋体", Font.PLAIN, 25));

        label[2].setBounds(10, 123, 414, 37);

        frame.getContentPane().add(label[2]);

        

        label[3] = new JLabel("New label");

        label[3].setFont(new Font("宋体", Font.PLAIN, 25));

        label[3].setBounds(10, 170, 414, 37);

        frame.getContentPane().add(label[3]);

        

        label[4] = new JLabel("New label");

        label[4].setFont(new Font("宋体", Font.PLAIN, 25));

        label[4].setBounds(10, 217, 414, 37);

        frame.getContentPane().add(label[4]);

        

        JLabel lblNewLabel = new JLabel("New label");

        lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 25));

        lblNewLabel.setBounds(10, 253, 414, 41);

        frame.getContentPane().add(lblNewLabel);

        

        JLabel lblNewLabel_1 = new JLabel("\u7B54\u9898\u60C5\u51B5\u603B\u7ED3");

        lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);

        lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 20));

        lblNewLabel_1.setBounds(10, 10, 414, 22);

        frame.getContentPane().add(lblNewLabel_1);

        for(int i=0;i<5;i++){

            label[i].setText(string[i]);

        }

        lblNewLabel.setText(st);

        

        JButton btnNewButton = new JButton("\u5173\u95ED");

        btnNewButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {

                frame.dispose();

                

            }

        });

        btnNewButton.setBounds(260, 304, 93, 28);

        frame.getContentPane().add(btnNewButton);

        

        JButton btnNewButton_1 = new JButton("\u7EE7\u7EED\u505A\u9898");

        btnNewButton_1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                frame.dispose();

                calculator w=new calculator();

                w.main(null);

            }

        });

        btnNewButton_1.setBounds(83, 304, 93, 28);

        frame.getContentPane().add(btnNewButton_1);

    }

        

}



import java.util.Random;

public class Stamp {

    static Random r = new Random();

    int y;

    int []sum=new int[5];

    public int[] output(int r1[],int r2[],String r3[]){

        

         for(int i=0;i<5;i++){

             sum[i]=0;

             r1[i] = -100+r.nextInt(200);

             r2[i] =-100+r.nextInt(200);

             y = 42+r.nextInt(6);

             if(y==47)

                if(r2[i]==0){

                    r2[i]=42+r.nextInt(6);

                }

             while(y==46)

                {

                 y = 42+r.nextInt(6);

                }

                if(y==44)

                {

                    r2[i] = 2+r.nextInt(8);

                }

                switch(y)

                {

                case 42:

                    r3[i]="*";

                    sum[i]=r1[i]*r2[i];

                    //System.out.print(sum[i]+"="+r1[i]+"*"+r2[i]);

                    break;

                case 43:

                    r3[i]="+";

                    sum[i]=r1[i]+r2[i];

                    //System.out.println(sum[i]+"="+r1[i]+"+"+r2[i]);

                    break;

                case 44:

                    r3[i]="!";

                    sum[i]=1;

                    for(int n=r2[i];n>1;n--)

                    {

                    sum[i]=sum[i]*n;

                    }

                    //System.out.println(sum[i]+"="+r1[i]+"+"+r2[i]);

                    break;

                case 45:

                    r3[i]="-";

                    sum[i]=r1[i]-r2[i];

                    //System.out.println(sum[i]+"="+r1[i]+"-"+r2[i]);

                    break;

                case 47:

                    r3[i]="/";

                    sum[i]=r1[i]/r2[i];

                    //System.out.println(sum[i]+"="+r1[i]+"/"+r2[i]);

                    break;

                }

                     

         }

                 return sum;

    }

}



import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.util.Random;



import javax.swing.*;

public class MainJFrame extends JFrame {  

    JButton b1=new JButton("切换皮肤");JButton b2=new JButton("GOGOGO!");JButton b3=new JButton("开始/下一题");

    int xz, cc,count,max,min=1,jc,sum1,dt=0,tm=0,tm1=0,zs1,zs2,fs1,fs2,fs3,fs4;

    char ssfh[]={'+','-','*','/'};

    int fh;

    String Sum1,Sum2;

    long star,end;

    JLabel l1=new JLabel("   题目");JLabel l2=new JLabel("                  得数");

    JTextField t1=new JTextField(10);JTextField t2=new JTextField(8);

        String [] path={

        "0.jpg",

        "1.jpg",

        "2.jpg"};

    public MainJFrame(int count1,int cc1,int xz1,int max1,long star1) {  

        count=count1;

        cc=cc1;

        xz=xz1;

        max=max1;

        star=star1;

        //设置大小  

        setSize(500, 400);  

        //设置位置  

        setLocation(200, 50);  

        //背景图片的路径。(相对路径或者绝对路径。本例图片放于"java项目名"的文件下)  

        // 背景图片  

        ImageIcon background = new ImageIcon(path[1]);  

        // 把背景图片显示在一个标签里面  

        JLabel label = new JLabel(background);  

        // 把标签的大小位置设置为图片刚好填充整个面板  

        label.setBounds(0, 0, this.getWidth(), this.getHeight());  

        // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明  

        JPanel imagePanel = (JPanel) this.getContentPane();  

        imagePanel.setOpaque(false);  

        // 把背景图片添加到分层窗格的最底层作为背景  

        imagePanel.setLayout(new FlowLayout(FlowLayout.CENTER,20,100));

        this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));  

        imagePanel.add(l1);imagePanel.add(t1);imagePanel.add(l2);imagePanel.add(t2);imagePanel.add(b1);imagePanel.add(b3);imagePanel.add(b2);

        b3.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){

                if(xz==1)

                {

                    if(tm1<count){

                    tm1++;

                    zs1=new  Random().nextInt(max) + min;

                    zs2=new  Random().nextInt(max) + min;

                    fh=new Random().nextInt(4);

                    while(fh==3&&zs2==0){

                        zs2=new  Random().nextInt(max) + min;

                    }

                    Zhengshu zhengshu=new Zhengshu(zs1,fh,zs2);

                    if(fh==0){

                    t1.setText(zhengshu.getJiaf()); 

                    zhengshu.setJiaf(zs1, zs2);

                    }

                    else if(fh==1){

                        t1.setText(zhengshu.getJianf()); 

                        zhengshu.setJianf(zs1, zs2);

                    }

                    else if(fh==2){

                        t1.setText(zhengshu.getChengf());

                        zhengshu.setChengf(zs1, zs2);

                    }

                    else if(fh==3){

                        t1.setText(zhengshu.getChuf());

                        zhengshu.setChuf(zs1, zs2);

                        }

                    }

                }

                else if(xz==2){

                    if(tm1<count){

                        tm1++;

                    fs1=new  Random().nextInt(max) + min;

                    fs2=new  Random().nextInt(max) + min;

                    fs3=new  Random().nextInt(max) + min;

                    fs4=new  Random().nextInt(max) + min;

                    Fenshu fenshu=new Fenshu();

                    fh=new Random().nextInt(3);

                    t1.setText(fenshu.suanshi(fs1, fs2, fs3, fs4, fh));

                    }

                }

                else{

                    if(tm1<count){

                    

                    tm1++;

                    jc=new  Random().nextInt(max) + min;t1.setText("("+ tm1 +")"+jc+"!=");                   

                    

                    }

                }

               

                }

            });

        b2.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){

                if(xz==1)

                {

                    if(tm<count)

                    {

                    Zhengshu zhengshu=new Zhengshu();

                        if(fh==0){ 

                        zhengshu.setJiaf(zs1, zs2);

                        }

                        else if(fh==1){

                            zhengshu.setJianf(zs1, zs2);

                        }

                        else if(fh==2){

                            zhengshu.setChengf(zs1, zs2);

                        }

                        else if(fh==3){

                            zhengshu.setChuf(zs1, zs2);

                            }

                        if(fh==3)

                            {Sum2=t2.getText();

                            Sum1=zhengshu.getsum(zs1,zs2);

                            if(Sum1.equals(Sum2))

                                dt++;

                            

                            }

                        else{

                            if((sum1=Integer.valueOf(t2.getText()))==zhengshu.getSum())

                            dt++;                    

                        }

                        

                    tm++;

                    t2.setText(null);

                //    System.out.print(tm+"\t"+zs1+"\t"+fh+"\t"+zs2+"\t"+dt+"\t"+zhengshu.getSum()+"\t"+Sum1+"\n");

                    }

                    if(tm==count){

                        end=System.currentTimeMillis()/1000;

            //            System.out.print("\t"+end+"\t"+star+"\t"+(end-star));

                        JOptionPane.showMessageDialog(rootPane, "一共"+count+"道题,答对"+dt+"道题!\t" +"得分"+(100/count*dt)+"用时"+(end-star)+"s");

                    }

                

                    

                }

                else if(xz==2){

                    if(tm<count)

                    {

                        Fenshu fenshu=new Fenshu();

                        Sum1=fenshu.answer(fs1, fs2, fs3, fs4, fh);

                        Sum2=t2.getText();

                        if(Sum1.equals(Sum2))

                        {

                            dt++;

                        }

                        tm++;

                        t2.setText(null);

                //        System.out.print(tm+"\t"+dt+"\t"+fenshu.answer(fs1, fs2, fs3, fs4, fh)+"\t"+Sum2+"\t"+fh+"\n");

                        if(tm==count){

                            end=System.currentTimeMillis()/1000;

            //                System.out.print("\t"+end+"\t"+star+"\t"+(end-star));

                            JOptionPane.showMessageDialog(rootPane, "一共"+count+"道题,答对"+dt+"道题!\t" +"得分"+(100/count*dt)+"用时"+(end-star)+"s");

                        }

                    }

                }

                else{

                    if(tm<count)

                    {

                    Jiecheng jiecheng=new Jiecheng(jc);

                    if((sum1=Integer.valueOf(t2.getText()))==jiecheng.getJieguo())

                    {

                        dt++;

                    }

                    tm++;

                    t2.setText(null);

                    System.out.print(tm+"\t"+jc+"!\t"+dt+"\t"+jiecheng.getsum()+"\t"+sum1+"\n");

                    }

                    if(tm==count){

                        end=System.currentTimeMillis()/1000;

            //            System.out.print("\t"+end+"\t"+star+"\t"+(end-star));

                        JOptionPane.showMessageDialog(rootPane, "一共"+count+"道题,答对"+dt+"道题!\t" +"得分"+(100/count*dt)+"用时"+(end-star)+"s");

                    }

                }

               

                }

                });

        //设置可见  

        setVisible(true);  

        //点关闭按钮时退出  

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

    }  



 

    

    public static void main(String[] args) {  

        Baseframe frame=new Baseframe();

        

    }  

}  

    class Baseframe extends JFrame                                                                        //基础界面

    {

        public Baseframe(){

            super("四则运算 V2.0"); 

            this.getContentPane().add(new p1(),"Center");

            this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

            this.setSize(500, 400);

            this.setLocation(200, 50);

            this.setVisible(true);

            

        }



        public static void close() {

            // TODO Auto-generated method stub

            

        }

    }

    class p1 extends JPanel{

        int xz, cc,count,max,min=1;long star;

        JLabel l1=new JLabel("                  输入题目数");JLabel l2=new JLabel("                  是否有乘除法0/1");JLabel l3=new JLabel("                  数值范围是(1~)");JLabel l4=new JLabel("   1:整数运算.2:分数运算.3:阶乘运算.");

        JLabel l5=new JLabel();

        JButton b1=new JButton("确定");

        JTextField t1=new JTextField(8);JTextField t2=new JTextField(8);JTextField t3=new JTextField(8);JTextField t4=new JTextField(8);

        int str=0;

        int str1=0;

        p1(){

            super(new GridLayout(5,2,5,5));

            b1.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e){

                    count=Integer.valueOf(t1.getText());

                    cc=Integer.valueOf(t2.getText());

                    max=Integer.valueOf(t3.getText());

                    xz=Integer.valueOf(t4.getText());

                    star = System.currentTimeMillis()/1000;

                    MainJFrame Frame=new MainJFrame(count,cc,xz,max,star);

                }

            });

            add(l1);add(t1);add(l2);add(t2);add(l3);add(t3);add(l4);add(t4);add(l5);add(b1);

        }

        public int getcount()

        {

            return count;

        }

        public int getcc()

        {

            return cc;

        }

        public int getmax()

        {

            return max;

        }

        public int getxz()

        {

            return xz;

        }

        public long getstar()

        {

            return star;

        }

    }
import static org.junit.Assert.*;

import org.junit.Test;

public class Wqtext {



    @Test

    public void testStamp() {

        int d[]={0,0,0,0,0};

        int a[]={0,1,2,3,4};

        int b[]={0,1,2,3,4};

        String c[]={"+","+","+","+","+"};

        Stamp stamp=new Stamp();

        d=stamp.output(a, b, c);

        assertEquals(0,d[0]);

    //    fail("尚未实现");

    }

}

作业5.2(封装及测试)作业5.2(封装及测试)作业5.2(封装及测试)作业5.2(封装及测试)

感想:本次的作业,我的小伙伴表现的很好,由于时间的紧迫,我和他分工合作,不过,很多是由我的小伙伴完成的~本次结对子也学到了几个以前没有学过的知识,希望下次的合作同样愉快!

你可能感兴趣的:(测试)