import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class B extends JFrame implements ActionListener{ int max=300; JLabel jlTitle=new JLabel(); JLabel jlTotal=new JLabel("共"+max+"题"); JLabel jl=new JLabel(""); JLabel jlcorrect=new JLabel(); JTextField jtf=new JTextField(3); JButton jb1=new JButton("上一题"); JButton jb2=new JButton("下一题"); JButton jb3=new JButton("交卷"); JPanel jp1=new JPanel(); JPanel jp2=new JPanel(); JPanel jp3=new JPanel(); String[] question=new String[max]; int[] answer=new int[max]; String[] studentAnswer=new String[max]; boolean[]correct=new boolean[max]; int count=1; boolean submitFlag=false; B(){ super("小学算术测试"); jlTitle.setFont(new Font(null,Font.PLAIN,20)); jlTotal.setFont(new Font(null,Font.PLAIN,20)); jl.setFont(new Font(null,Font.PLAIN,20)); jlcorrect.setFont(new Font(null,Font.PLAIN,20)); jlcorrect.setForeground(Color.RED); jtf.setFont(new Font(null,Font.PLAIN,20)); for(int i=0;i<max;i++){ String s=randomQuestion(100); question[i]=s.substring(0,s.indexOf("=")+1); answer[i]=Integer.parseInt(s.substring(s.indexOf("=")+1)); } jlTitle.setText("第"+count+"题"); jl.setText(question[0]); jlcorrect.setText(""); jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); jp1.add(jlTitle);jp1.add(jlTotal);jp1.add(jb3); jp2.add(jl);jp2.add(jtf);jp2.add(jlcorrect); jp3.add(jb1);jp3.add(jb2); add(jp1,BorderLayout.NORTH); add(jp2,BorderLayout.CENTER); add(jp3,BorderLayout.SOUTH); setSize(300, 160); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } @Override public void actionPerformed(ActionEvent ae) { if(ae.getSource()==jb1){ if(submitFlag==false){ try{ int tempanswer=Integer.parseInt(jtf.getText().trim()); studentAnswer[count-1]=jtf.getText().trim(); if(count==1)count=max; else count--; jlTitle.setText("第"+count+"题"); jl.setText(question[count-1]); jtf.setText(""); if(studentAnswer[count-1]==null||studentAnswer[count-1].equals("")){ }else{ jtf.setText(studentAnswer[count-1]); } }catch(NumberFormatException nfe){ JOptionPane.showMessageDialog(this, "请输入正整数!"); jtf.requestFocus(); } }else{ if(count==1)count=max; else count--; jlTitle.setText("第"+count+"题"); jl.setText(question[count-1]); jtf.setEnabled(false); jtf.setText(studentAnswer[count-1]); if(correct[count-1]==true){ jlcorrect.setText("√"); }else{ jlcorrect.setText("×"); } } } if(ae.getSource()==jb2){ if(submitFlag==false){ try{ int tempanswer=Integer.parseInt(jtf.getText().trim()); studentAnswer[count-1]=jtf.getText().trim(); if(count==max)count=1; else count++; jlTitle.setText("第"+count+"题"); jl.setText(question[count-1]); jtf.setText(""); if(studentAnswer[count-1]==null||studentAnswer[count-1].equals("")){ }else{ jtf.setText(studentAnswer[count-1]); } }catch(NumberFormatException nfe){ JOptionPane.showMessageDialog(this, "请输入正整数!"); jtf.requestFocus(); } }else{ if(count==max)count=1; else count++; jlTitle.setText("第"+count+"题"); jl.setText(question[count-1]); jtf.setEnabled(false); jtf.setText(studentAnswer[count-1]); if(correct[count-1]==true){ jlcorrect.setText("√"); }else{ jlcorrect.setText("×"); } } } if(ae.getSource()==jb3){ try{ int tempanswer=Integer.parseInt(jtf.getText().trim()); studentAnswer[count-1]=jtf.getText().trim(); for(int i=0;i<max;i++){ if(studentAnswer[i]==null||studentAnswer[i].equals("")){ correct[i]=false; }else if(Integer.parseInt(studentAnswer[i])==answer[i]){ correct[i]=true; }else{ correct[i]=false; } } int correctAnswer=0; for(int i=0;i<max;i++){ if(correct[i]==true){ correctAnswer++; } } String s="共"+max+"道题\n"; s=s+"答对"+correctAnswer+"道题\n"; s=s+"答错"+(max-correctAnswer)+"道题\n"; s=s+"成绩"+String.format("%.2f",(100*(float)correctAnswer/max))+"分\n"; JOptionPane.showMessageDialog(this, s); submitFlag=true; jtf.setEnabled(false); jtf.setText(studentAnswer[count-1]); if(correct[count-1]==true){ jlcorrect.setText("√"); }else{ jlcorrect.setText("×"); } }catch(NumberFormatException nfe){ JOptionPane.showMessageDialog(this, "请输入正整数!"); jtf.requestFocus(); } } } public static void main(String[] args) { new B(); } private String randomQuestion(int MAX) { String s=""; int answer=MAX+1; while(answer>MAX||answer<0){ int a=(int)(Math.random()*MAX+1); int b=(int)(Math.random()*MAX+1); int c=(int)(Math.random()*4+1); switch(c){ case 1:answer=a+b;break; case 2:answer=a-b;break; case 3:answer=a*b;break; case 4: if(a%b==0){ answer=a/b; } break; } if(answer<=MAX&&answer>=0){ s=s+a; switch(c){ case 1:s=s+"+";break; case 2:s=s+"-";break; case 3:s=s+"*";break; case 4:s=s+"/";break; } s=s+b+"="+answer; } } return s; } }