作业2结对(升级版)

//第一个类:登陆界面

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

public class Login extends JFrame implements ActionListener{

    JTextField f1;

    JTextField f2;

    JButton b1;

    JButton b2;

    JPanel p5;

    Image img = Toolkit.getDefaultToolkit().getImage("1.jpg");

    Login(){

        this.setTitle("四则运算的系统登录");

        this.setSize(360,250);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();//截取屏幕大小

        this.setLocation(screensize.width/2-400/2, screensize.height/2-400/2);//居中计算

        Container cp=getContentPane();

        Label l1=new Label("用户:");

        Label l2=new Label("密码:");

        JPanel p1=new JPanel();

        JPanel p2=new JPanel();

        JPanel p3=new JPanel();

        JPanel p4=new JPanel();

        p5=new JPanel(){//将图片添加到面板5

            protected  void paintChildren(Graphics g) {

                int imgwidth=img.getWidth(this);//获得图片的宽高

                int imgheight=img.getHeight(this);

                int fwidth=getWidth();//获得窗口的大小

                int fheight=getHeight();

                int x=(fwidth-imgwidth)/2;

                int y=(fheight-imgheight)/2;

                g.drawImage(img,x,y,this);

                super.paintChildren(g);

            }

        };

        f1=new JTextField(15);

        f2=new JPasswordField(15);

        b1=new JButton("登录");

        b2=new JButton("重置");

        p1.setBackground(Color.orange);

        p2.add(l1);

        p2.add(f1);

        p2.setBorder(new MatteBorder(0,0,0,0,Color.black));//创建具有指定 insets和颜色的衬边边框

        p2.setBackground(Color.ORANGE);

        p3.add(l2);

        p3.add(f2);

        p3.setBackground(Color.ORANGE);

        p3.setBorder(new MatteBorder(0,0,0,0,Color.black));

        p4.add(b1);

        p4.add(b2);

        p4.setBorder(new MatteBorder(0,0,0,0,Color.black));

        p4.setBackground(Color.ORANGE);

        p5.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));

        p5.add(p2);

        p5.add(p3);

        p5.add(p4);

        cp.add(p5,BorderLayout.CENTER);

        b1.addActionListener(this);

        b2.addActionListener(this);

        this.setResizable(false);//设置不可以改变大小

        this.setVisible(true);//设置窗口可见

        }

    public void actionPerformed(ActionEvent e)

    {

        if(e.getSource()==b1)//当获取的资源是按钮1时

        {//当输入的用户名为”詹泽娟“并且密码为”123456“,则切换到四则运算的界面

            if((f1.getText()).equals("詹泽娟")&&(f2.getText()).equals("123456"))

            {

                new MyWindow();

                this.setVisible(false);

            }

            else 

                JOptionPane.showMessageDialog(null, "用户名或者密码不正确!");

        }

        if(e.getSource()==b2)

        {

            f1.setText("");

            f2.setText("");

        }

    }

 public static void main(String[] args){

     new Login();

 }

}



//第二个类:四则运算界面

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.math.*;

import java.text.DecimalFormat;

import java.util.Scanner;

import java.math.*;

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JMenuBar;

import javax.swing.JPanel;

import javax.swing.JRadioButtonMenuItem;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

import javax.swing.Timer;

import javax.swing.JOptionPane;//消息提示框

import javax.swing.UIManager;

class MyWindow extends JFrame implements ActionListener{

    JTextField text;//提示输入的个数

    JTextField  t;//随机题目

    JTextField at;//用于输入答案

    JTextField st;//判断对错

    JTextField tt;//显示时间

    JTextField lt;//设置时间

    JMenuBar menuBar;

    JMenu menu;

    JRadioButtonMenuItem item;

    private Timer tmr;

    JLabel L1;

    JLabel L2;

    JLabel L3;

    JLabel L4;

    JLabel L5;

    JLabel L6;

    JButton B1,B2;

    JPanel p1,p2,p3;

    String parten="0.00";//设置格式为“0.00”

    DecimalFormat decimal=new DecimalFormat(parten);

    String str;// str=decimal.format(sum);

    double seconds;//时间“秒”

    long startTime,endTime;

    char[]ch={'+','-','*','÷'};//存放加减乘除的符号数组

    float sum=0;//程序判断的答案

    int timushu;//用户输入的题目

    int count=0;//已经 出的题目

    int right=0;//计算答对的题目数

    int wrong=0;//计算答错的题目数

    MyWindow()

    {

        super("四则运算");

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setSize(400,250);

        Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();//截取屏幕大小

        this.setLocation(screensize.width/2-400/2, screensize.height/2-400/2);//居中计算

        L1=new JLabel("选择题数(不能超过5个)");

        L2=new JLabel("时间:");

        L3=new JLabel("设置时间(时间不超过120秒):");

        L4=new JLabel("随机题目:");

        L5=new JLabel("输入答案:");

        L6=new JLabel("判断对错:");

        text=new JTextField(15);

        B1=new JButton("开始");



            t=new JTextField(23);

            at=new JTextField(23);

            at.addActionListener(this);

            st=new JTextField(23);

            tt=new JTextField(15);

            tt.addActionListener(this);

            lt=new JTextField(5);

            lt.addActionListener(this);

            Timer tmr = new Timer(1000, this);//间隔1秒

            this.tmr = tmr;//添加时间

            menuBar=new JMenuBar();

            setJMenuBar(menuBar);

            menu=new JMenu("外观选择");

            UIManager.LookAndFeelInfo[] infos=UIManager.getInstalledLookAndFeels();//获取本地观感,置入数组

             for(UIManager.LookAndFeelInfo info:infos){

                  makeitem(info.getName(),info.getClassName());}

                 

                 add(menu);



        B2=new JButton("下一题");B2.addActionListener(this);

        text.addActionListener(this);B1.addActionListener(this);

        p1=new JPanel();p2=new JPanel();p3=new JPanel();

        getContentPane().add(p1,"North");getContentPane().add(p2,"Center");getContentPane().add(p3,"South");

        p1.add(L3);p1.add(lt);p2.add(L1);p2.add(text);p2.add(B1);

        p2.add(L4);p2.add(t);p2.add(L5);p2.add(at);p2.add(L6);p2.add(st);

        p3.add(L2);p3.add(tt);p3.add(B2);

        menuBar.add(menu);

        this.setResizable(false);//设置不可以改变大小

        this.setVisible(true);//设置窗口可见

    }

     void makeitem(String name,final String MyWindow)

        {

            JRadioButtonMenuItem item=new JRadioButtonMenuItem(name);

         menu.add(item);

         item.addActionListener(new ActionListener(){

          public void actionPerformed(ActionEvent event)//使用内部类的实例

          {

           try

           {

            UIManager.setLookAndFeel(MyWindow);//设置观感

            SwingUtilities.updateComponentTreeUI(MyWindow.this);//更新当前观感

           }

           catch(Exception e)

           {

            e.printStackTrace();

           }

          }

         });

        }





    

    public void actionPerformed(ActionEvent e)

    {

        if(e.getSource()==B1)//当获取的资源是按钮1时

        {

            

            try

            {

                tt.setText(String.valueOf(lt.getText()));//在显示时间框里显示以获取的时间

                String reg="^[0-9]+$";

                String str1=lt.getText();

                String str2=text.getText();

                if(str1.matches(reg))

                {

                    tt.setText(String.valueOf(lt.getText()));

                }

                else

                {

                    this.setVisible(false);

                    JOptionPane.showMessageDialog(null, "输入非法错误!");

                }

                if(str2.matches(reg))

                {

                    text.setText(String.valueOf(text.getText()));

                }

                else

                {

                    this.setVisible(false);

                    JOptionPane.showMessageDialog(null, "输入非法错误!");

                }

            int n1=120,n2=5;

            if(n1<(Integer.parseInt(tt.getText())))

            {//当设置时间超过120秒,弹出对话框

                JOptionPane.showMessageDialog(null, "时间不能超过120秒!");

                this.setVisible(false);

            }

            if(n2<(Integer.parseInt(text.getText())))

            {//当选择题目个数超过5个,弹出对话框

                JOptionPane.showMessageDialog(null, "选择题数不能超过五个!");

                this.setVisible(false);

            }

            tmr.start();//开始计时

            }

            catch(NullPointerException o)

            {



            }

            suijishu();//调用产生随机数题目

        //    startTime= System.currentTimeMillis(); //获取开始时间

            tt.setText(String.valueOf(lt.getText()));

        }

        else{

            int m = Integer.parseInt(tt.getText());

            m--;

            tt.setText("" + m);

            if (m <= 0) 

            {

                 tmr.stop();

                 JOptionPane.showMessageDialog(null, "超出答题时间!");

                 this.setVisible(false);

            }

           if(e.getSource()==at)//当获取的资源是输入答案时

           {

                str=decimal.format(sum);

                if(Float.parseFloat(str)==Float.parseFloat(at.getText()))//判断输入的答案对错

                {

                    right++;

                    st.setText("输入的答案正确!");

                    st.setForeground(Color.red);

                }

                else

                {

                    wrong++;

                    st.setText("输入的答案不正确!正确答案为"+Float.parseFloat(str));

                    st.setForeground(Color.red);//当判断答案对错时,字体显示红色

                }

            }

            else if(e.getSource()==B2)//当获取的资源是按钮2

            {

                count++;//当未超过题目数时,继续出随机题

                if(count!=Integer.parseInt(text.getText()))

                {

                    t.setText(null);

                    at.setText(null);

                    st.setText(null);

                    suijishu();

                }



                else

                {//当超过输入的题目数时,弹出结束的消息框

                    tmr.stop();



                    //double endTime= System.currentTimeMillis() ;//获取结束时间

                    seconds=Double.parseDouble(lt.getText())-Double.parseDouble(tt.getText());//计算时间

                    //tt.setText(String.valueOf(seconds)+"s");//输出时间

                    JOptionPane.showMessageDialog(null, "答题结束!一共答对"+right+"道题目,答错"+wrong+"道题目!"+"答题时间为:"+seconds+"秒");

                   this.setVisible(false);

                }

            }

        }

    }

    private void suijishu() 

    {

        int x=(int)(Math.random()*4);

        switch(x)

        {

        case 0:

            fun0();//一个运算符,整数,整数

            break;

        case 1:

            fun1();//一个运算符,整数,分数

            break;

        case 2:

            fun2();//一个运算符,分数,分数

            break;

        case 3:

            fun3();//两个运算符

            break;

        case 4:

            fun4();//求阶乘

            break;

        case 5:

            fun5();//题目出现负数

            break;

        //case 4:

        //、    fun1();

    //、case 5:

    //、    fun1();

    //、case 6:

        //    fun1();

        }

    }

    private void fun0()

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*4);//表示加减乘除

        switch(x1)

        {

        case 0:

            {

                t.setText(a+" "+String.valueOf(ch[0])+" "+b);

                sum=a+b; 

            }

            break;

        case 1:

            {

                t.setText(a+" "+String.valueOf(ch[1])+" "+b);

                sum=a-b;

            }

            break;

        case 2:

            {

                 t.setText(a+" "+String.valueOf(ch[2])+" "+b);

                sum=a*b;

            }

            break;

        case 3:

            {

                t.setText(a+" "+String.valueOf(ch[3])+" "+b);

                 sum=(float)a/(float)b;

            }

            break;

        }

    }

    private void fun1()

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int c=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*4);//表示加减乘除

        switch(x1)

        {

        case 0:

            {

                t.setText(a+" "+String.valueOf(ch[0])+" "+b+"/"+c);

                sum=a+((float)b/(float)c); 

            }break;

        case 1:

            {

                t.setText(a+" "+String.valueOf(ch[1])+" "+b+"/"+c);

                sum=a-((float)b/(float)c);

            }break;

        case 2:

            {

                 t.setText(a+" "+String.valueOf(ch[2])+" "+b+"/"+c);

                sum=a*((float)b/(float)c);

            }break;

        case 3:

            {

                t.setText(a+" "+String.valueOf(ch[3])+" "+b+"/"+c);

                 sum=(float)a/(float)b/(float)c;

            }break;

        }

    }

    private void fun2()

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int c=(int)(Math.random()*10+1);

        int d=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*4);//表示加减乘除

        switch(x1)

        {

        case 0:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[0])+" "+b+"/"+c);

                sum=((float)a/(float)d)+((float)b/(float)c); 

            }break;

        case 1:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[1])+" "+b+"/"+c);

                sum=((float)a/(float)d)-((float)b/(float)c);

            }break;

        case 2:

            {

                 t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c);

                sum=((float)a/(float)d)*((float)b/(float)c);

            }break;

        case 3:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c);

                 sum=((float)a/(float)d)/((float)b/(float)c);

            }break;

        }

    }

    private void fun3()

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int c=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*3);//表示加减乘除

        switch(x1)

        {

        case 0:

            fun31();//两个运算符,三个整数

            break;

        case 1:

            fun32();//两个运算符,两个整数,一个分数

            break;

        case 2:

            fun33();//两个运算符,一个整数,两个分数

            break;

    //    case 3:

      //      fun34();

      //      break;

        }

    }

    private void fun31()

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int c=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*11);//表示加减乘除

        switch(x1)

        {

        case 0:

            {

                t.setText(a+" "+String.valueOf(ch[0])+" "+b+" "+String.valueOf(ch[0])+" "+c);

                sum=a+b+c; 

            }break;

        case 1:

            {

                t.setText(a+" "+String.valueOf(ch[0])+" "+b+" "+String.valueOf(ch[1])+" "+c);

                sum=a+b-c; 

            }break;

        case 2:

            {

                t.setText(a+" "+String.valueOf(ch[1])+" "+b+" "+String.valueOf(ch[1])+" "+c);

                sum=a-b-c; 

            }break;

        case 3:

            {

                t.setText(a+" "+String.valueOf(ch[2])+" "+b+" "+String.valueOf(ch[0])+" "+c);

                sum=a*b+c; 

            }break;

        case 4:

            {

                t.setText(a+" "+String.valueOf(ch[2])+" "+b+" "+String.valueOf(ch[1])+" "+c);

                 sum=a*b-c; 

            }break;

        case 5:

            {

                t.setText(a+" "+String.valueOf(ch[2])+" "+b+" "+String.valueOf(ch[2])+" "+c);

                sum=a*b*c; 

               }break;

         case 6:

            {

                t.setText(a+" "+String.valueOf(ch[0])+" "+b+" "+String.valueOf(ch[1])+" "+c);

                 sum=a+b-c; 

            }break;

        case 7:

           {

                t.setText(a+" "+String.valueOf(ch[3])+" "+b+" "+String.valueOf(ch[0])+" "+c);

                sum=((float)a/(float)b)+c; 

           }break;

        case 8:

           {

                t.setText(a+" "+String.valueOf(ch[3])+" "+b+" "+String.valueOf(ch[1])+" "+c);

                 sum=((float)a/(float)b)-c; 

            }break;

        case 9:

           {

                t.setText(a+" "+String.valueOf(ch[3])+" "+b+" "+String.valueOf(ch[3])+" "+c);

                 sum=((float)a/(float)b)/(float)c;  

            }break;

        }

    }

    private void fun32()

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int c=(int)(Math.random()*10+1);

        int d=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*4);//表示加减乘除

        switch(x1)

        {

        case 0:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[0])+b+" "+String.valueOf(ch[0])+" "+c);

                sum=((float)a/(float)d)+b+c; 

            }break;

        case 1:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[0])+b+" "+String.valueOf(ch[1])+" "+c);

                sum=((float)a/(float)d)+b-c; 

            }break;

        case 2:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[1])+b+" "+String.valueOf(ch[1])+" "+c);

                sum=((float)a/(float)d)-b-c; 

            }break;

        case 3:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[0])+" "+c);

                 sum=((float)a/(float)d)*b+c; 

            }break;

        case 4:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[1])+" "+c);

            sum=((float)a/(float)d)*b-c; 

        }break;

        case 5:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[2])+" "+c);

            sum=((float)a/(float)d)*b*c; 

        }break;

        case 6:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[2])+b+" "+String.valueOf(ch[3])+" "+c);

            sum=((float)a/(float)d)*b/(float)c; 

        }

        case 7:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[3])+b+" "+String.valueOf(ch[0])+" "+c);

            sum=((float)a/(float)d)/(float)b+c; 

        }break;

        case 8:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[3])+b+" "+String.valueOf(ch[1])+" "+c);

            sum=((float)a/(float)d)/(float)b-c; 

        }break;

        case 9:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[3])+b+" "+String.valueOf(ch[3])+" "+c);

            sum=((float)a/(float)d)/(float)b/(float)c; 

        }break;

        }

    }

    private void fun33()//一个整数,两个分数

    {

        int a=(int)(Math.random()*10+1);

        int b=(int)(Math.random()*10+1);

        int c=(int)(Math.random()*10+1);

        int d=(int)(Math.random()*10+1);

        int e=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*4);//表示加减乘除

        switch(x1)

        {

        case 0:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[0])+" "+b+"/"+c+" "+String.valueOf(ch[0])+" "+e);

                sum=((float)a/(float)d)+((float)b/(float)c)+e; 

            }break;

        case 1:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[0])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e);

                sum=((float)a/(float)d)+((float)b/(float)c)-e; 

            }break;

        case 2:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[1])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e);

                sum=((float)a/(float)d)-((float)b/(float)c)-e; 

            }break;

        case 3:

            {

                t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[0])+" "+e);

                 sum=((float)a/(float)d)*((float)b/(float)c)+e; 

            }break;

        case 4:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e);

            sum=((float)a/(float)d)*((float)b/(float)c)-e; 

        }break;

        case 5:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[2])+" "+e);

            sum=((float)a/(float)d)*((float)b/(float)c)*e; 

        }break;

        case 6:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[2])+" "+b+"/"+c+" "+String.valueOf(ch[3])+" "+e);

            sum=((float)a/(float)d)*((float)b/(float)c)/(float)e; 

        }

        case 7:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c+" "+String.valueOf(ch[0])+" "+e);

            sum=((float)a/(float)d)/((float)b/(float)c)+e; 

        }break;

        case 8:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c+" "+String.valueOf(ch[1])+" "+e);

            sum=((float)a/(float)d)/((float)b/(float)c)-e; 

        }break;

        case 9:

        {

            t.setText(a+"/"+d+" "+String.valueOf(ch[3])+" "+b+"/"+c+" "+String.valueOf(ch[3])+" "+e);

            sum=((float)a/(float)d)/((float)b/(float)c)/(float)e; 

        }break;

        }

    }

    private void fun4()

    {

        int a=(int)(Math.random()*10+1);//求1~10的阶乘

        t.setText(a+"!");

        for(int i=1;i<=a;i++)

        {

            sum=1;

            sum=sum*i;

        }

    }

    private void fun5()

    {

        int a=(int)(Math.random()*99+1)*-1;//随机生成-1~-99的负整数

        int b=(int)(Math.random()*10+1);

        int x1=(int)(Math.random()*4);

        switch(x1)

        {

        case 0:

            {

                t.setText("("+a+") "+String.valueOf(ch[0])+" "+b);

                sum=a+b; 

            }

            break;

        case 1:

            {

                t.setText("("+a+") "+String.valueOf(ch[1])+" "+b);

                sum=a-b;

            }

            break;

        case 2:

            {

                 t.setText("("+a+") "+String.valueOf(ch[2])+" "+b);

                sum=a*b;

            }

            break;

        case 3:

            {

                t.setText("("+a+") "+String.valueOf(ch[3])+" "+b);

                 sum=(float)a/(float)b;

            }

            break;

        }

        

    }

}

一开始显示的登录界面

作业2结对(升级版)

当用户名或密码不正确时:

作业2结对(升级版)

当输入用户和密码都正确时,切换到四则运算界面:

作业2结对(升级版)

当输入时间不符合要求时,弹出下框:

作业2结对(升级版)

当输入选择题数不符合要求时,弹出下框:

作业2结对(升级版)

当都输入正确时,则自动出题:

作业2结对(升级版)

当输入答案后,回车,系统判断正确与否:

作业2结对(升级版)

作业2结对(升级版)

当答题结束时:

作业2结对(升级版)

当答题时间超过设置时:

作业2结对(升级版)

 

这次在原来的基础上,将所有功能都完善了。
在实现更换皮肤时,出了点错,发现不了出错在哪里。
在设置用户登录界面时,为了美观,添加了一个图片当背景,
运行时发现图片总是没出现,后来仔细检查,发现参数带入有误。
由于显示的界面老是在屏幕左上角出现,于是设置窗口都在屏幕上正中间显现。
还存在的缺点:
1:更换皮肤界面时,前两个皮肤更换没问题,可是后三个更换皮肤时,窗口里的布局盖面

你可能感兴趣的:(作业)