java电子表程序_Java程序实现电子算盘

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

}

}

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值