首页 > Java程序实现电子算盘

Java程序实现电子算盘

给小朋友设计一个珠算测试器,要求能够完成珠算加减法的测试。具体的要求功能如下:
(1) 用户启动测试,输入用户名后系统随机生成特定数目的加减法测试题;
(2) 要求测试使用表盘式或数字时秒表进行界面计时显示(参考如上图示);
(3) 对于每道测试题目,要求用户使用电子算盘完成珠算过程,当按下确认键时,将珠
算结果与正确答案比对,并在界面上显示总题数、已答题数和已做对题数;
(4) 当测试完成,界面显示本次测试情况(包括用户名、测试题目及答题明细、对错情
况、测试用时和测试成绩)

并要实现这个界面。

大神们,在线急等,我是真不会啊


import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Container;

import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextField;

import java.awt.event.*;
import java.lang.*;
import java.util.Timer;
import java.util.TimerTask;


public class Suanpan extends JFrame
{
    public static void main(String[]args)
    {
        Suanpan f = new Suanpan();
    }
    public int totalNumber;    
    public int answer;
    public boolean isAnswer = true;
    public int t = 0;
    public int answeredQuestion = 0;
    public int rightA_Number = 0;
    public int question_Number;
    public boolean[] isAddFive = new boolean[4];
    public int number[] = new int[4];
    public ImageIcon picture = new ImageIcon(System.getProperty("user.dir") + "/算珠.jpg" );

    Container con = getContentPane();
    JPanel j1 = new JPanel();
    JPanel j2 = new JPanel();
    JPanel j3 = new JPanel();
    JLabel q = new JLabel();
    JLabel nA = new JLabel();
    JLabel nB = new JLabel();    
    JLabel n = new JLabel();
    JLabel b = new JLabel();
    JLabel s = new JLabel();
    JLabel sN = new JLabel();
    JLabel tM = new JLabel();
    JTextField userName = new JTextField();
    JTextField sNumber = new JTextField();
    JButton beginAnswer = new JButton("开始答题");
    JButton oK = new JButton("确定");
    JButton nQ = new JButton("下一题");
    JTextField a = new JTextField();
    JButton labels_1[][] = new JButton[2][4];
    JButton labels_2[][] = new JButton[5][4];
    GridLayout gl_1 = new GridLayout(2,4);
    GridLayout gl_2 = new GridLayout(5,4);
    public Suanpan()
    {
    super("模拟算盘");    
    Init();    
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    setBounds(100,100,600,500);    
    setVisible(true);    
    setLayout(null);        
    AbacusPanel();    
    DrawMnue();
    
    }
    Timer timer;
    // 计时器
    public void QuestionTimer()
    {
    timer = new Timer();
    timer.schedule(new RunTask(),1000,1000);
    }
    class RunTask extends TimerTask
    {
    public void run()
    {
        t = t + 1;
        String ss = "";
        if(t / 60 < 10)    
        ss = ss + "0";    
        ss = ss + Integer.toString(t / 60) + ":";    
        if(t % 60 < 10)        
        ss = ss + "0";    
        ss = ss + Integer.toString(t % 60);    
        tM.setText("计时:   " + ss);    
    }
    }
   
    
    
    // 算盘面板
    public void AbacusPanel() 
    {    
    j1.setLayout(null);        
    j1.setBounds(15,160,400,300);
    j1.setBackground(Color.black);    
    con.add(j1);    
    JPanel j2 = new JPanel();    
    j2.setLayout(gl_1);
    j2.setBounds(10, 10, 380, 80);
    j1.add(j2);
    JPanel j3 = new JPanel();    
    j3.setLayout(gl_2);    
    j3.setBounds(10, 100, 380, 190);
    j1.add(j3);        
    for(int i = 0;i < 2;i++)
    {    
        for(int j = 0;j < 4;j++)
        {
        labels_1[i][j] = new JButton("");
        labels_1[i][j].addActionListener(new ClickIt());
        labels_1[i][j].setBorderPainted(false);
        labels_1[i][j].setContentAreaFilled(false);
        if(i != 1)
            labels_1[i][j].setIcon(picture);
        j2.add(labels_1[i][j]);
        }    
    }
    for(int i = 0;i < 5;i++)
    {        
        for(int j = 0;j < 4;j++)
        {
        labels_2[i][j] = new JButton("");
        labels_2[i][j].addActionListener(new ClickIt());
        labels_2[i][j].setBorderPainted(false);
        labels_2[i][j].setContentAreaFilled(false);
        if(i != 0)
            labels_2[i][j].setIcon(picture);
        j3.add(labels_2[i][j]);    
        }
    }
    }
    //编辑选项
    public void DrawMnue()
    {
    Font f1 = new Font("",Font.BOLD,30);
    Font f2 = new Font("",Font.BOLD,14);
    Font f3 = new Font("",Font.PLAIN,18);
        
    q.setBounds(20, 50, 280, 40);
    q.setFont(f1);
    con.add(q);
        
    a.setFont(f1);
    a.setBounds(270,50,80,40);
    a.setVisible(false);
    con.add(a);
        
    oK.setFont(f2);    
    oK.setBounds(350, 50, 65, 40);
    oK.addActionListener(new ClickOk());
    oK.setVisible(false);
    con.add(oK);
        
    nA.setText("");
    nA.setBounds(20,100,300,40);
    nA.setFont(f1);
    con.add(nA);
        
    nQ.setFont(f2);
    nQ.setBounds(420, 50, 80, 40);
    nQ.addActionListener(new ClickNext());
    nQ.setVisible(false);
    con.add(nQ);
        
    nB.setText("已做对题数:" + rightA_Number);
    nB.setFont(f3);
    nB.setForeground(Color.red);
    nB.setBounds(430, 150, 140, 40);
    con.add(nB);
        
    n.setText("已答题数:" + answeredQuestion);
    n.setFont(f3);
    n.setForeground(Color.red);
    n.setBounds(430, 200, 140, 40);
    con.add(n);
        
    sN.setText("总题数:" + question_Number);
    sN.setFont(f3);
    sN.setBounds(430, 250, 140, 40);
    con.add(sN);
        
    b.setText("用户名:");
    b.setFont(f3);
    b.setBounds(20, 0, 80, 40);
    con.add(b);

    userName.setText("");
    userName.setFont(f3);
    userName.setBounds(100, 10, 60, 30);
    userName.setHorizontalAlignment(0);
    con.add(userName);
        
    s.setText("设置题目总数:");
    s.setFont(f3);
    s.setBounds(180,0,130,40);
    con.add(s);
        
    sNumber.setText("");
    sNumber.setFont(f3);
    sNumber.setBounds(300, 10, 60, 30);
    sNumber.setHorizontalAlignment(0);
    con.add(sNumber);
        
    beginAnswer.setFont(new Font("",Font.PLAIN,12));
    beginAnswer.setBounds(400, 5, 85,30);
    beginAnswer.addActionListener(new ClickLogin());
    con.add(beginAnswer);
        
    tM.setText("计时:   00:00");
    tM.setFont(f3);
    tM.setBounds(430, 300, 200, 40);
    con.add(tM);
    }
    
    
    // 生成题目
    private void Question()
    {    
    int i1 = 1 + (int)(Math.random()*9999);
    int i2 = 1 + (int)(Math.random()*9999);
    int number1 = Math.max(i1, i2);
    int number2 = Math.min(i1, i2);
    int m = (int)(Math.random()*2);
    if(m == 0)
    {
        while(i1 + i2 > 10000)
        {
            i1 = 1 + (int)(Math.random()*9999);
            i2 = 1 + (int)(Math.random()*9999);
        }    
        q.setText(Integer.toString(i1) + "   +   " + Integer.toString(i2) + "   =   ");
        answer = i1 + i2;
    }
    else
    {
        q.setText(Integer.toString(number1) + "   -   " + Integer.toString(number2) + "   =   ");
        answer = number1 - number2;    
    }
    }
    
    // 计算算盘的结果
    private void addTotalNumber()
    {    
    for(int j = 0;j < 4;j++)
    {
        if(isAddFive[j] == true && number[j] < 5)
        number[j] = number[j] + 5;        
        else 
        if(isAddFive[j] == false && number[j] >= 5)
            number[j] = number[j] - 5;
    }    
    totalNumber = 0;
    for(int j = 0;j < 4;j++)
    {
        totalNumber = totalNumber + number[j] * (int)Math.pow(10,(double)j);
    }    
    System.out.println(totalNumber);
    }
    
    // 初始化数据
    private void Init()
    {
    totalNumber = 0;
    for(int j = 0;j < 4;j++)
    {
        number[j] = 0;
        isAddFive[j] = false;    
    }
    }
    
    // 绘制j列算珠
    private void DrawCol(int j)
    {
    for(int i = 1; i <=4;i++)
    {
        labels_2[i][j].setIcon(picture);
    }
    }
    
    // 单击事件监听器
    class ClickIt implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
        // TODO 自动生成的方法存根
        if(isAnswer == false)
        {
        for(int i = 0;i < 2;i++)
            for(int j = 0;j < 4;j++)    
            if(e.getSource() == labels_1[i][j])
            {
                if(i == 1)    
                {
                isAddFive[4-j-1] = false;
                labels_1[0][j].setIcon(picture);
                labels_1[1][j].setIcon(null);    
                }    
                else 
                if(i == 0)
                {
                    isAddFive[4-j-1] = true;
                    labels_1[1][j].setIcon(picture);
                    labels_1[0][j].setIcon(null);    
                }
            }
        // 点击后动作
        for(int i = 0;i < 5;i++)
            for(int j = 0;j < 4;j++)
            if(e.getSource() == labels_2[i][j])
            {
                number[4-j-1] = i;        
                DrawCol(j);
                labels_2[0][j].setIcon(picture);
                labels_2[i][j].setIcon(null);
            }
        addTotalNumber();
        }
    }
    }

    class ClickOk implements ActionListener
    {
    public void actionPerformed(ActionEvent e) 
    {
        isAnswer = true;
        timer.cancel();    
        a.setText(Integer.toString(totalNumber));
        if(totalNumber == answer)
        {
        oK.setText("正确");
        oK.setForeground(Color.green);
        rightA_Number = rightA_Number + 1;
        }
        else
        {
        oK.setText("错误");
        oK.setForeground(Color.red);
        nA.setText("正确答案为 :  " + Integer.toString(answer));    
        nA.setForeground(Color.green);
        }
        answeredQuestion = answeredQuestion + 1;
        nB.setText("已做对题数:" + rightA_Number);
        nB.setForeground(Color.red);
        n.setText("已答题数:" + answeredQuestion);    
        n.setForeground(Color.red);
    }    
    }
    class ClickNext implements ActionListener
    {
    public void actionPerformed(ActionEvent e) 
    {
        if(isAnswer == true)
        {    
        isAnswer = false;
        if(nQ.getText() == "完成")
        {    
            timer.cancel();
            double x = ((double)rightA_Number / (double)question_Number) * 100;
            int option = JOptionPane.showConfirmDialog(null , "您的正确率为: " + x + "%\n用时" + t + "秒"+"\n是否重新开始?" , "提示", JOptionPane.YES_NO_OPTION );
            if(JOptionPane.YES_OPTION == option)
            {                     
            userName.setText("");
            userName.setEditable(true);        
            sNumber.setText("");        
            sNumber.setEditable(true);
            beginAnswer.setEnabled(true);
            nQ.setVisible(false);            
            oK.setVisible(false);    
            a.setVisible(false);            
            q.setVisible(false);
            oK.setText("确定");
            oK.setForeground(null);
            a.setText("");
            nA.setText("");                
            nQ.setText("下一题");
            Init();                        
            rightA_Number = 0;
            answeredQuestion = 0;
            t = 0;
            n.setText("已答题数:" + answeredQuestion);
            n.setForeground(Color.red);
            nB.setText("已做对题数:" + rightA_Number);
            nB.setForeground(Color.red);
            sN.setText("总题数:" + 0);
            sN.setForeground(Color.red);
            tM.setText("计时:" + 0);
            }    
        }    
        else
        {
            QuestionTimer();
            Question();
            oK.setText("确定");
            oK.setForeground(null);
            a.setText("");
            nA.setText("");        
            // 初始化算盘
            for(int i = 0;i < 4;i++)
            {
            DrawCol(i);
                labels_1[1][i].setIcon(null);
                labels_2[0][i].setIcon(null);
                 labels_1[0][i].setIcon(picture); 
            }
            Init();          
            if(answeredQuestion == question_Number - 1)    
            nQ.setText("完成");        
        }
        }    
    }
    }
    class ClickLogin implements ActionListener
    {
    public void actionPerformed(ActionEvent e) 
    {

        boolean isInt = true;
        for(int i = 0;i < sNumber.getText().length();i++)        
        if(!Character.isDigit(sNumber.getText().charAt(i)))
            isInt = false;
        if(userName.getText().equalsIgnoreCase(""))
        JOptionPane.showMessageDialog(null, "请输入用户名 !");    
        else 
        if(sNumber.getText().equalsIgnoreCase("") || isInt == false)    
            JOptionPane.showMessageDialog(null, "请输入题目总数 !");
        else
        {    
            isAnswer = false;
            Question();
            beginAnswer.setEnabled(false);
            q.setVisible(true);    
            nQ.setVisible(true);    
            oK.setVisible(true);    
            a.setVisible(true);            
            userName.setEditable(false);
            sNumber.setEditable(false);
            String xx = sNumber.getText();
            question_Number = Integer.parseInt(xx);    
            sN.setText("总题数:" + question_Number);    
            QuestionTimer();    
        }
    }    
    }    
}
【热门文章】
【热门文章】