求一个能够 自动生成小学生数学练习题目 的Java程序。

小学生数学练习题目自动生成系统
设计一个程序,能够根据用户的选择生成“10以内加法”、“10以内减法”、“20以内加法”、“20以内减法”、“100以内加法”、“100以内减法”、“100以内乘法”、“100以内除法”8种类型的题目。

源代码去下:

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.JMenu;
import  javax.swing.JMenuBar;
import  javax.swing.JMenuItem;
import  javax.swing.JOptionPane;
import  javax.swing.JPanel;
import  javax.swing.JTextField;
public  class  extends  JFrame  implements  ActionListener{
  int  max= 20 ;
  int  MAX= 10 ;
  int  TYPE= 1 ;
  JLabel jlTitle= new  JLabel();
  JLabel jl= new  JLabel( "" );
  JLabel jlAnswer= new  JLabel( "" );
  JLabel jlTotal= new  JLabel( "共" +max+ "题" );
  JLabel jlcorrect= new  JLabel();
  JTextField jtf= new  JTextField( 3 );
  JMenuBar jmb= new  JMenuBar();
  JMenu jm= new  JMenu( "类型 " );
  JMenuItem jmi1= new  JMenuItem( "10以内加法" );
  JMenuItem jmi2= new  JMenuItem( "10以内减法" );
  JMenuItem jmi3= new  JMenuItem( "20以内加法" );
  JMenuItem jmi4= new  JMenuItem( "20以内减法" );
  JMenuItem jmi5= new  JMenuItem( "100以内加法" );
  JMenuItem jmi6= new  JMenuItem( "100以内减法" );
  JMenuItem jmi7= new  JMenuItem( "100以内乘法" );
  JMenuItem jmi8= new  JMenuItem( "100以内除法" );
  JButton jb1= new  JButton( "上一题" );
  JButton jb2= new  JButton( "下一题" );
  JButton jb3= new  JButton( "评卷" );
  JButton jb4= 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 ));
   jlAnswer.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 ));
   fillQuestion();
   jb1.addActionListener( this );
   jb2.addActionListener( this );
   jb3.addActionListener( this );
   jb4.addActionListener( this );
   jmi1.addActionListener( this );
   jmi2.addActionListener( this );
   jmi3.addActionListener( this );
   jmi4.addActionListener( this );
   jmi5.addActionListener( this );
   jmi6.addActionListener( this );
   jmi7.addActionListener( this );
   jmi8.addActionListener( this );
   jm.add(jmi1);jm.add(jmi2);jm.add(jmi3);jm.add(jmi4);jm.add(jmi5);jm.add(jmi6);jm.add(jmi7);jm.add(jmi8);
   jmb.add(jm);
   setJMenuBar(jmb);
   jp1.add(jlTitle);jp1.add(jlTotal);jp1.add(jb3);jp1.add(jb4);
   jp2.add(jl);jp2.add(jtf);jp2.add(jlcorrect);jp2.add(jlAnswer);
   jp3.add(jb1);jp3.add(jb2);
   add(jp1,BorderLayout.NORTH);
   add(jp2,BorderLayout.CENTER);
   add(jp3,BorderLayout.SOUTH);
   setSize( 300 200 );
   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 ]);
     jlAnswer.setText( "" );
     jtf.setEnabled( false );
     jtf.setText(studentAnswer[count- 1 ]);
     jb4.setEnabled( true );
     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 ]);
     jlAnswer.setText( "" );
     jtf.setEnabled( false );
     jtf.setText(studentAnswer[count- 1 ]);
     jb4.setEnabled( true );
     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 ;
     jb4.setEnabled( 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();
    }
   }
   if (ae.getSource()==jb4){
    jlAnswer.setText(String.valueOf(answer[count- 1 ]));
   }
   if (ae.getSource()==jmi1){
    MAX= 10 ;TYPE= 1 ;fillQuestion();
   }
   if (ae.getSource()==jmi2){
    MAX= 10 ;TYPE= 2 ;fillQuestion();
   }
   if (ae.getSource()==jmi3){
    MAX= 20 ;TYPE= 1 ;fillQuestion();
   }
   if (ae.getSource()==jmi4){
    MAX= 20 ;TYPE= 2 ;fillQuestion();
   }
   if (ae.getSource()==jmi5){
    MAX= 100 ;TYPE= 1 ;fillQuestion();
   }
   if (ae.getSource()==jmi6){
    MAX= 100 ;TYPE= 2 ;fillQuestion();
   }
   if (ae.getSource()==jmi7){
    MAX= 100 ;TYPE= 3 ;fillQuestion();
   }
   if (ae.getSource()==jmi8){
    MAX= 100 ;TYPE= 4 ;fillQuestion();
   }
  }
  public  static  void  main(String[] args) {
   new  B();
  }
  public  void  fillQuestion(){
   count= 1 ;
   for ( int  i= 0 ;i<max;i++){
    String s=randomQuestion(MAX,TYPE);
    question[i]=s.substring( 0 ,s.indexOf( "=" )+ 1 );
    answer[i]=Integer.parseInt(s.substring(s.indexOf( "=" )+ 1 ));
   }
   studentAnswer= new  String[max];
   correct= new  boolean [max];
   jl.setText(question[ 0 ]);
   jlTitle.setText( "第" +count+ "题" );
   jlcorrect.setText( "" );
   jlAnswer.setText( "" );
   submitFlag= false ;
   jtf.setEnabled( true );
   jtf.setText( "" );
   jb4.setEnabled( false );
  }
  public  String randomQuestion( int  MAX, int  TYPE) {
   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 );
    switch (TYPE){
     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 (TYPE){
      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;
  }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值