数学题自动生成系统

余年寄山水
910次浏览
2020年11月04日 09:17
最佳经验
本文由作者推荐

桃花园-长春大学招生网

2020年11月4日发(作者:欧其)



目录
一、需求分析
.................... ........................................ 错误!未定义书签。
二、概要设计
................................... .................................................. ......... 3
三、详细设计
....................... .................................................. ..................... 4

3.1 系统E-R图
................................................. ....................4

3.2 关系模式
...... .................................................. ............... 4

3.3系统数据流图
...... .................................................. ..........5

3.4基本数据类型操作
.......... .................................................5
四、调试分析
................................... .................................................. ....... 13
五、用户手册
........................ .................................................. .................. 13
六、测试数据
............. .................................................. ............................. 14
七、附录
.... .................................................. ............................................. 17





一、需求分析
小学生数学练习题目自动生成系统
要求:编写一个能够自动生成小学生数学练习题目的程序。设计一个 程序,能够
根据用户的选择生成“10以内加法”、“10以内减法”、“20以内加法”、“20以内
减法”、“100以内加法”、“100以内减法”、“100以内乘法”、“100以内除法”8种类型的题目,要求每个题目能够随机生成。此外,用户还能输入答题的数量。
答完题后,即可查看 统计答题情况,对于答错的题,可显示正确答案。答题数据
要求保存到文件中,并可调出查看。

1.1将该系统分割为五个大致模块,主要是由用户信息,题目信息和历史成绩
信息相互连接而成,用数据库的方式对其进行记录。
1.2.通过分析可以依次实现,选择题型 ->设置题目数量->产生随机题目->用户
答题->显示答题结果->查询历史答题结果等一系列具体 操作。
可简约为:
1.2.1 用户打开系统成功后,则可以开始进行对所具有不同类题目的选
择,实现学生自主选题
1.2.3 在选择题目后,便可自主的对其进行填写答题数目
1.2.4 在点击按键“设置”之后,点击“下一题”系统会自动生成显示
所选题型的题目
1.3 通过对Java语言的运用,将其与数据库进行对接,则可以完成对系统的
实现。而且可以直接在运行成 功的界面上进行一系列的具体操作。

二、概要设计
小学生数学练习题目自动生成 系统主要包括用户信息、题目信息、选题情况
信息、答题信息、历史成绩信息五个功能模块。

2.1 用户信息模板
用户信息模块主要包括用户的信息以及用户的实施操作。



用户信息模块包括:用户姓名,用户编号,所属班级,用户性别,联系电
话,家庭住址等相关信息。 < br>用户的实施操作:用户可以通过其包含的相关信息,与其他模块进行连接,
可以在此系统中依次的 进行题型选择,用户答题,显示正确答案以及记录历史答
题信息等功能。

2.2 题目信息模块
题目信息模块主要实现对数学练习题目信息的管理记录。
题目信息模块主要包括:题目编号,甲空,题目题型,乙空,正确结果等
相关信息。

2.3 选题情况信息模块
选题情况信息模块主要实现对所具有的题目项目进行管 理记录,根据对用
户的基础信息和题目信息的相应连接可以实现不同用户对题型的选择,从而可以
形成不同的题型,生成相对应的试卷。
选题情况信息模块主要包括:用户编号,题目题型,题目编号等相关信息。

2.4 答题信息模块
答题信息模块主要是为了实现与选题情况信息进行对接,根据实现后的答题信息可以直接录入到系统中进行记录。
答题信息模块主要包括:用户编号,题目题型,题目编号,所填答案等相
关信息。

2.5 历史成绩信息模块
历史成绩信息模块主要是通过与选题情况信息模块相连 接,实现小学生对
数学练习习题答题历史成绩的记录。
历史成绩信息模块主要包括:用户编号,答题时间,正确数目,错误数目
等相关信息。



三、详细设计
3.1 系统E-R图
在系统功能作了详细分析后,可以从中抽象出系统E-R模型,如图:
答题内容

3.2关系模式

E-R
图转化为关系模型:

User(user_id,user_nam,user_class,user_tel)
Timu(timu_id,timu_one,timu_two,timu_true)
History(user_id,answer_time,true_no,flase_no)
3.3系统数据流图







3.4基本数据类型操作
①界面设计(设置不同按钮、文本大小以及字体类型大小等):


area=new JTextArea(42,100);






























teacherZhang=new Teacher(this);
Integer(100);
setLayout(new FlowLayout());
setSize(1300,500);
menubar=new JMenuBar();
menu1=new JMenu(难度设置
menu2=new JMenu(历史档案
grade1=new JMenuItem(以内加法
grade2=new JMenuItem(以内减法
grade3=new JMenuItem(以内加法
grade4=new JMenuItem(以内减法
grade5=new JMenuItem(以内加法
grade6=new JMenuItem(以内减法
grade7=new JMenuItem(以内乘法
grade8=new JMenuItem(以内除法



message=new JLabel(你还没有回答呢
Start=new JButton(下一题
giveAnswer=new JButton(提交答案
item=new JMenuItem(答题记录
Qcount=new JLabel(题目数量
set=new JButton(设置
Text1=new JTextField(5);
t(
textOne=new JTextField(5);
textTwo=new JTextField(5);
textResult=new JTextField(5);
operatorLabel=new JLabel(
final FileDialog filedialog_load=new FileDialog(this,打开文件对话框

add(Qcount);
add(Text1);
add(set);
t(new Font(
(grade1);
(grade2);
(grade3);
(grade4);
(grade5);
(grade6);
(grade7);
(grade8);
(item);
(menu1);
(menu2);
setJMenuBar(menubar);
add(textOne);
add(operatorLabel);
add(textTwo);
add(new JLabel(
add(textResult);
add(giveAnswer);
add(message);
add(Start);
add(area);
tFocus();
table(false);
table(false);

②对不同按钮设置不同监视器:
ionCommand(



ionCommand(
ionCommand(
xtField(textOne,textTwo,textResult);
bel(operatorLabel,message);
ionListener(teacherZhang);
ionListener(teacherZhang);
ionListener(teacherZhang);
setVisible(true);
validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);

③对不同情况下的选择设置不同符号及能产生的最大随机数:
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(10);
}
});

ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(10);
}
});
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(20);
}
});
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(20);
}
});
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(100);
}
});
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){



































rator(
Integer(100);
}
});
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(100);
}
});
ionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rator(
Integer(100);
}
});


④对答题记录设置监视器:

ionListener(new ActionListener(){

@Override
TODO Auto-generated method stub
public void actionPerformed(ActionEvent e)
{
if(rce()==item)
{
filedialog_ible(true);
t(null);
String s;
if(filedialog_e()!=null)
{
try
{
File file=new
File(filedialog_ectory(),filedialog_e());
FileReader file_reader=new FileReader(file);
BufferedReader in=new BufferedReader(file_reader);
while((s=ne())!=null)
(s+'n');
();
file_();
}
catch (IOException e1)
{

























}
}
});


}
}
⑤对“设置”创建监视器:
ionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
TODO Auto-generated method stub
int n=0;
t(null);
n=nt(t());

if(n==0){
ssageDialog( null,请输入题目数量!提示

}else{
(n);
String s=f(n);
(s+'n');
}
}

});
}
}

⑥设置监视器从而控制答题数量:

public void actionPerformed(ActionEvent e){
TODO Auto- generated method stub
String str=ionCommand();
try{
if((
t(
t(
t(operator);
t(请回答
t(null);
}
else if((
ssageDialog( null,答题结束提示








}

SaveFile(operator);
⑦通过if_else循环来计算统一答题情况:
if((
String answer=t();
int result=nt(answer);
c[k]=result;
if((
if(result==a[k]+b[k]){
t(回答正确
k++;
setIsRight(true);
x++;
}
else {

String s=答案:
t(s);
k++;
setIsRight(false);
y++;
}

}
else if((
if(result==a[k]-b[k]){
setIsRight(true);
t(回答正确
k++;
x++;
}
else {
setIsRight(false);
String s=答案:
t(s);
k++;
y++;
}
}
else if((
if(result==a[k]*b[k]){
setIsRight(true);
t(回答正确
k++;






































}
































































}

































}
x++;
}
else {
setIsRight(false);
String s=答案:
t(s);
k++;
y++;
}
}
else if((
if(result==a[k]b[k]){
setIsRight(true);
t(回答正确
c[k]=result;
k++;
x++;
}
else {
setIsRight(false);
String s=答案:
t(s);
k++;
y++;
}
}

catch(NumberFormatException ex){
t(请输入数字字符
} catch (IOException e1) {
TODO Auto-generated catch block
tackTrace();
}
⑧该函数能够产生随机数:
public void setNum(int n){
num=n;
for(int i=0;i a[i]=t(maxInteger)+1;
b[i]=t(maxInteger)+1;
}
}



⑨保存文件,能够借此找到历史答题情况:
public void SaveFile(String str) throws IOException{
FileWriter fw=null;
try{
File file=new File(
fw=new FileWriter(file,true);

}catch(IOException e){
tackTrace();
}
PrintWriter pw=new PrintWriter(fw);
();
Date date = new Date(0161,8, 22);
Date nowTime=date;
try{

n(答题时间:
for(int j=0;j n(a[j]+str+b[j]+作答
n(正确题数: 错误题数:
n();
();
();
}catch(IOException e){
tackTrace();
}
}
public void setIsRight(boolean T){
t=T;
}
}
⑩主函数算法:
package SYSTEM;
class MyFrame{
public static void main(String args[]){
MathSystem frame;
frame=new MathSystem();
le(小学生数学题目自动生成系统
}
}




四、调试分析

1. 没有建立相应的监视器,将两个不同的类连接起来,不能产生随机数,无法
进行之后的操作
2. 没有设置参数,从而不能控制答题数目,导致可以一直答题,没有限度。之
后,设置了单 独参数,利用for循环,当大于输入答题数量时,循环结束,系统
无法再产生随机题
3. 没有设置数据从而对答题情况进行统计,调试后,在判断回答正确否的地方,
添加两个数据,分别对对错 进行累加,则可以最后显示答题情况
4. 在历史答题情况中没有把之前的答题情况分隔开来,导致查 看起来很繁琐,
在保存内容中添加了时间类Date,则可以显示每次回答问题的时间



五、用户手册

本程序的运行环境为windows操作系统
⒉ 进入演示程序后,即显示对话形式的操作过程,可开始进行系统运行
⒊ 用户对于所要回答的题目类型进行选择,可以分别选择八种不同类型的算术
类型
⒋ 选择题型后,用户自主输入所要回答的题目数量,点击“设置”进行保存,
以控制后面答题数目
⒌ 按“下一题”开始后,程序自动生成所选择的题型题目,用户可对此在相对
应的空中进行答题
⒍在回答一定数目后,点击“下一题”,系统会提示“答题结束”
⒎在答题结束之后,可以点 击菜单项“历史答题”,选择相对应的文件保存地址,
可显示之前的答题记录
⒏进行下一个小学生数学练习题目自动生成界面或退出程序。



六、测试数据

1、点击运行,打开界面:


2、在菜单项选择想要选择的题型:



3、填所要要答题数目,店“设置”保存,点击“下一题”便可随机生成所要题
目:





4、用户答题,当回答正确时,显示如下:



5、用户答题,当回答错误时,显示如下:




6、当回答题目到达要求时,继续如上操作,显示答题结束:



7、点击菜单项“历史档案”,弹出打开文件对话框,选择所要的文件:


8、所显示的历史答题档案:





七、附录
源程序

package SYSTEM;

import alog;
import yout;
import
import Event;
import Listener;
import edReader;
import
import ader;
import ption;
import n;
import



import
import
import ar;
import tem;
import nPane;
import rea;
import ield;


public class MathSystem extends JFrame{














**
*
*
private static final long serialVersionUID = 1L;
JMenuBar menubar;
JMenu menu1,menu2;
JMenuItem grade1,grade2 ,grade3,grade4,grade5,grade6,grade7,grade8,item;
JTextField textOne,textTwo,textResult,Text1;
JButton Start,giveAnswer,overanswer,set;
JLabel operatorLabel,message;
Teacher teacherZhang;
JLabel Qcount;
int L=0,K=0;
JTextArea area;



























public MathSystem(){























area=new JTextArea(42,100);
teacherZhang=new Teacher(this);
Integer(100);
setLayout(new FlowLayout());
setSize(1300,500);
menubar=new JMenuBar();
menu1=new JMenu(难度设置
menu2=new JMenu(历史档案
grade1=new JMenuItem(以内加法
grade2=new JMenuItem(以内减法
grade3=new JMenuItem(以内加法
grade4=new JMenuItem(以内减法
grade5=new JMenuItem(以内加法
grade6=new JMenuItem(以内减法
grade7=new JMenuItem(以内乘法
grade8=new JMenuItem(以内除法
message=new JLabel(你还没有回答呢
Start=new JButton(下一题
giveAnswer=new JButton(提交答案
item=new JMenuItem(答题记录
Qcount=new JLabel(题目数量
set=new JButton(设置
Text1=new JTextField(5);















t(
textOne=new JTextField(5);
textTwo=new JTextField(5);
textResult=new JTextField(5);
operatorLabel=new JLabel(

final FileDialog filedialog_load=new FileDialog(this,打开文件对话框

































add(Qcount);
add(Text1);
add(set);
t(new Font(
(grade1);
(grade2);
(grade3);
(grade4);
(grade5);
(grade6);
(grade7);
(grade8);
(item);
(menu1);
(menu2);
setJMenuBar(menubar);



























add(textOne);
add(operatorLabel);
add(textTwo);
add(new JLabel(
add(textResult);
add(giveAnswer);
add(message);
add(Start);
add(area);
tFocus();
table(false);
table(false);
ionCommand(
ionCommand(
ionCommand(
xtField(textOne,textTwo,textResult);
bel(operatorLabel,message);
ionListener(teacherZhang);
ionListener(teacherZhang);
ionListener(teacherZhang);
setVisible(true);
validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
ionListener(new ActionListener(){ 设置不同情况下的不同符号























































});

ionListener(new ActionListener(){




});
ionListener(new ActionListener(){




});
ionListener(new ActionListener(){




});
public void actionPerformed(ActionEvent e){


rator(
Integer(20);
public void actionPerformed(ActionEvent e){


rator(
Integer(20);
public void actionPerformed(ActionEvent e){


rator(
Integer(10);
public void actionPerformed(ActionEvent e){


rator(
Integer(10); 控制不同情况的最大随机数
}
}
}
}



















































ionListener(new ActionListener(){




});
ionListener(new ActionListener(){




});
ionListener(new ActionListener(){




});
ionListener(new ActionListener(){




});
public void actionPerformed(ActionEvent e){


rator(
Integer(100);
public void actionPerformed(ActionEvent e){


rator(
Integer(100);
public void actionPerformed(ActionEvent e){


rator(
Integer(100);
public void actionPerformed(ActionEvent e){


rator(
Integer(100);
}
}
}
}













































@Override












TODO Auto-generated method stub
public void actionPerformed(ActionEvent e)
{









if(rce()==item)
{







filedialog_ible(true);
t(null);
String s;
if(filedialog_e()!=null)
{


try
{



ionListener(new ActionListener(){ 设置答题记录的监视器
File file=new
File(filedialog_ectory(),filedialog_e());
FileReader file_reader=new FileReader(file);
读取字符输入流
BufferedReader in=new BufferedReader(file_reader);
缓冲字符输入流
















while((s=ne())!=null)
(s+'n');





















































}
});







}






}


}
catch (IOException e1)
{
}
();
file_();
ionListener(new ActionListener(){
设置“设置”监视器,要求答题数目填写不能为空
























@Override
public void actionPerformed(ActionEvent e) {






TODO Auto-generated method stub
int n=0;
t(null);
n=nt(t());

if(n==0){
ssageDialog( null,请输入题目数量!提示









}else{
(n);












package SYSTEM;
import Event;
import Listener;
import
import iter;
import ption;
import riter;
import
import
import
import nPane;
import rea;
import ield;
class Teacher implements ActionListener{
String operator=






}
}





});



}



}
String s=f(n);
(s+'n');



public boolean isRight;
int num=0;
int k=0;
int x=0,y=0;
Random random;
int maxInteger;
JTextField textOne,textTwo,textResult;
JLabel operatorLabel,message;
JTextArea ARE;
MathSystem M;
int[] a=new int[100];
int[] b=new int[100];
int[] c=new int[100];
Teacher(MathSystem M){
this.M=M;
for(int i=0;i


a[i]=0;
b[i]=0;
c[i]=0;
}
isRight=false;
random=new Random();
}
public void setMaxInteger(int n){



maxInteger=n;
}













@Override
public void actionPerformed(ActionEvent e){ 设置对答题数量的控制











TODO Auto-generated method stub
String str=ionCommand();
try{
if((





}
else if((
t(
t(
t(operator);
t(请回答
t(null);
ssageDialog( null,答题结束提示
















}
else if((




String answer=t();



int result=nt(answer);
c[k]=result;
if((
SaveFile(operator);






















































}
else if((







if(result==a[k]-b[k]){




}
else {
setIsRight(true);
t(回答正确
k++;
x++;
























































if(result==a[k]+b[k]){




}
else {






}
String s=答案:
t(s);
k++;
setIsRight(false);
y++;
t(回答正确
k++;
setIsRight(true);
x++;









































































































}
else if((













}
else if((
if(result==a[k]b[k]){
if(result==a[k]*b[k]){




}
else {





}
setIsRight(false);
String s=答案:
t(s);
k++;
y++;
setIsRight(true);
t(回答正确
k++;
x++;





}
setIsRight(false);
String s=答案:
t(s);
k++;
y++;















setIsRight(true);
t(回答正确














}






}
c[k]=result;
k++;
x++;
}
else {
setIsRight(false);
String s=答案:
t(s);
k++;
y++;
}
}

}
catch(NumberFormatException ex){
t(请输入数字字符
} catch (IOException e1) {
TODO Auto-generated catch block
tackTrace();
}



public void setOperator(String s){
operator=s;
}
public void setJTextField(JTextField...t){
textOne=t[0];
textTwo=t[1];
textResult=t[2];
}
public void setNum(int n){
num=n;
for(int i=0;i a[i]=t(maxInteger)+1;
b[i]=t(maxInteger)+1;
}
}
public void setJLabel(JLabel...label){
operatorLabel=label[0];
message=label[1];
}

public void SaveFile(String str) throws IOException{
FileWriter fw=null;
try{
File file=new File(
保存文件








































































}
public void setIsRight(boolean T){
t=T;


fw=new FileWriter(file,true);

}catch(IOException e){

}
PrintWriter pw=new PrintWriter(fw);
();
Date date = new Date(0161,8, 22); 创建时间类显示答题时间
Date nowTime=date;
try{






n(答题时间:
for(int j=0;j n(a[j]+str+b[j]+作答
tackTrace();
n(正确题数: 错误题数:
n();
();
();
}catch(IOException e){

}
tackTrace();




}

package SYSTEM;
class MyFrame{






public static void main(String args[]){



MathSystem frame;
frame=new MathSystem();
le(小学生数学题目自动生成系统
}
}
}

岳飞庙-师恩难忘教案


加拿大本科留学费用-广西三本大学排名


夜莺之歌-入党转正介绍人意见


东北过年风俗-大工教务


领导人-小学教导工作计划


咸阳师范-农村调研报告


五年级英语上册教案-qq加速升级


济南十一中-汪国真经典诗文