求一个能够 自动生成小学生数学练习题目 的Java程序。
作者&投稿:束静 (若有异议请与网页底部的电邮联系)
楼主,印好10000种不同的各100份,每次考试从中拿一份去考试
这个好像上次在一个论坛里看见过的,你可以索索一下,
按照你的要求编写的小学数学练习题目自动生成系统的Java程序如下
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 B 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+"道题
";
s=s+"答对"+correctAnswer+"道题
";
s=s+"答错"+(max-correctAnswer)+"道题
";
s=s+"成绩"+String.format("%.2f",(100*(float)correctAnswer/max))+"分
";
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;
}
}
运行结果
去淘宝上搜索脚本制作,就有了
没法选择题目类型
语吴骨痛:[答案] 可以使用冥王星软件工作室设计的少儿速算练习机软件,他可以产生小学1-4年级所有类型的计算题,还能保存,还能打印,真是太好啦!可以使用少儿速算练习机软件里面的卷王系统就行了.而且是免费使用的.
睢阳区17810656282: 小学数学出题软件什么最好? - ?
语吴骨痛: 可以使用冥王星软件工作室设计的少儿速算练习机软件,他可以产生小学1-4年级所有类型的计算题,还能保存,还能打印,真是太好啦!可以使用少儿速算练习机软件里面的卷王系统就行了.而且是免费使用的.
睢阳区17810656282: 求高人给编写一段自动生成混合运算的小学数学测试题的程序?
语吴骨痛: #include <stdio.h> #include <time.h> #include <stdlib.h> void main() { int a,b,c,d; int total1=0,total2=0; while(1) { srand(time(NULL)); d=a=rand()%100; b=(rand()%a+a)%100; if(a%4==1&&a<b)c=a,a=b,b=c; if(b==0&&...
睢阳区17810656282: 求大神用C语言设计一个程序帮助小学生练习数学.(具体要求见问题补充) - ?
语吴骨痛: 你自己修改修改:#include <stdio.h>#include <ctype.h>#include <time.h>#include <stdlib.h>#include <windows.h>#define IDNO_LENGTH 6#define CALC_KIND 4#define CALC_NUM 10 bool checkNo(char idNo[]); char getSignal(); int getResult(...
睢阳区17810656282: C语言小学算术程序 急. - ?
语吴骨痛: WinTC1.91+WinXP调试成功 VC6+WinXP调试成功 #include <stdio.h> #include <conio.h> #include <process.h> #include <stdlib.h> #include <time.h> int menu() { int choice; printf("1. 测试\n"); printf("2. 练习\n"); printf("3. 退出\n"); ...
睢阳区17810656282: 完成 "一个小学生二位数四则运算练习器" VB程序?
语吴骨痛: '启动窗体的代码如下: Private Sub Command1_Click() Me.Hide Form1.Show End Sub '计算窗体的代码如下: Dim jg Sub Command1_Click() Dim fh() fh = Array("+", "-", "*", "÷") i = Int((3 * Rnd) + 0) Label1.Caption = fh(i) a = Int((99 * ...
睢阳区17810656282: vb编程 小学数学计算题练习 - ?
语吴骨痛: 复制以下代码,运行后点击窗体即可! Private Sub Form_Click() For i = 1 To 10 Do Randomize a = Int(Rnd * 9 + 1) Loop While x = a x = a b = Int(Rnd * 9 + 1) c = Int(Rnd * 3 + 1) Select Case c Case 1 If a > b Then tm = a & " - " & b & " = " d = ...
睢阳区17810656282: 小学生十以内加减法运算程序(c语言编写),分练习模式和考试模式,急求!能用就加分! - ?
语吴骨痛: #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int a,b,dui_ti=0,cuo_ti=0,ti_mu=0; char ch; int sui_ji_shu_a()//生成随机数a { int a; a=rand()%9+1; return a; } int sui_ji_shu_b()//生成随机数b { int b; b=rand()%9+1...
睢阳区17810656282: 完成一个小学数学练习程序(C语言编程) - ?
语吴骨痛: #include <stdio.h>#include <stdlib.h>#include<string.h>#define MENU_NUM 7#define N 3 typedef struct s1 { char no[11]; /*学号由10个字符组成*/ char name[15]; /*学生姓名*/ float score[N]; /*各门课成绩*/ float sum; /*总分*/ float average; /*...
睢阳区17810656282: 小学生数学测试软件?
语吴骨痛: 代码如下,可实现全部功能,菜单做的不是很合理,可以自己更改!另外代码里输入输出换成c的方式就好了! // Note:Your choice is C++ IDE #include <iostream> using namespace std; #include <stdlib.h> #include <time.h> int main() { int count ...