数学题自动生成系统.docx
- 文档编号:25527488
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:38
- 大小:285.10KB
数学题自动生成系统.docx
《数学题自动生成系统.docx》由会员分享,可在线阅读,更多相关《数学题自动生成系统.docx(38页珍藏版)》请在冰豆网上搜索。
数学题自动生成系统
3.1系统E-R图.....................................................................43.2关系模式.......................................................................4
3.3系统数据流图..................................................................5
3.4基本数据类型操作...........................................................5
1、需求分析
小学生数学练习题目自动生成系统
要求:
编写一个能够自动生成小学生数学练习题目的程序。
设计一个程序,能够根据用户的选择生成“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用户信息模板
用户信息模块主要包括用户的信息以及用户的实施操作。
用户信息模块包括:
用户姓名,用户编号,所属班级,用户性别,联系电话,家庭住址等相关信息。
用户的实施操作:
用户可以通过其包含的相关信息,与其他模块进行连接,可以在此系统中依次的进行题型选择,用户答题,显示正确答案以及记录历史答题信息等功能。
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=newJTextArea(42,100);
teacherZhang=newTeacher(this);
teacherZhang.setMaxInteger(100);
setLayout(newFlowLayout());
setSize(1300,500);
menubar=newJMenuBar();
menu1=newJMenu("难度设置");
menu2=newJMenu("历史档案");
grade1=newJMenuItem("10以内加法");
grade2=newJMenuItem("10以内减法");
grade3=newJMenuItem("20以内加法");
grade4=newJMenuItem("20以内减法");
grade5=newJMenuItem("100以内加法");
grade6=newJMenuItem("100以内减法");
grade7=newJMenuItem("100以内乘法");
grade8=newJMenuItem("100以内除法");
message=newJLabel("你还没有回答呢");
Start=newJButton("下一题");
giveAnswer=newJButton("提交答案");
item=newJMenuItem("答题记录");
Qcount=newJLabel("题目数量");
set=newJButton("设置");
Text1=newJTextField(5);
Text1.setText("0");
textOne=newJTextField(5);
textTwo=newJTextField(5);
textResult=newJTextField(5);
operatorLabel=newJLabel("");
finalFileDialogfiledialog_load=newFileDialog(this,"打开文件对话框",FileDialog.LOAD);
add(Qcount);
add(Text1);
add(set);
operatorLabel.setFont(newFont("Arial",Font.BOLD,20));
menu1.add(grade1);
menu1.add(grade2);
menu1.add(grade3);
menu1.add(grade4);
menu1.add(grade5);
menu1.add(grade6);
menu1.add(grade7);
menu1.add(grade8);
menu2.add(item);
menubar.add(menu1);
menubar.add(menu2);
setJMenuBar(menubar);
add(textOne);
add(operatorLabel);
add(textTwo);
add(newJLabel("="));
add(textResult);
add(giveAnswer);
add(message);
add(Start);
add(area);
textResult.requestFocus();
textOne.setEditable(false);
textTwo.setEditable(false);
②对不同按钮设置不同监视器:
Start.setActionCommand("getProblem");
textResult.setActionCommand("answer");
giveAnswer.setActionCommand("answer");
teacherZhang.setJTextField(textOne,textTwo,textResult);
teacherZhang.setJLabel(operatorLabel,message);
Start.addActionListener(teacherZhang);
giveAnswer.addActionListener(teacherZhang);
textResult.addActionListener(teacherZhang);
setVisible(true);
validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
③对不同情况下的选择设置不同符号及能产生的最大随机数:
grade1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("+");
teacherZhang.setMaxInteger(10);
}
});
grade2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("-");
teacherZhang.setMaxInteger(10);
}
});
grade3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("+");
teacherZhang.setMaxInteger(20);
}
});
grade4.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("-");
teacherZhang.setMaxInteger(20);
}
});
grade5.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("+");
teacherZhang.setMaxInteger(100);
}
});
grade6.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("-");
teacherZhang.setMaxInteger(100);
}
});
grade7.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("*");
teacherZhang.setMaxInteger(100);
}
});
grade8.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setOperator("/");
teacherZhang.setMaxInteger(100);
}
});
④对答题记录设置监视器:
item.addActionListener(newActionListener(){
@Override
//TODOAuto-generatedmethodstub
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==item)
{
filedialog_load.setVisible(true);
area.setText(null);
Strings;
if(filedialog_load.getFile()!
=null)
{
try
{
Filefile=newFile(filedialog_load.getDirectory(),filedialog_load.getFile());
FileReaderfile_reader=newFileReader(file);
BufferedReaderin=newBufferedReader(file_reader);
while((s=in.readLine())!
=null)
area.append(s+'\n');
in.close();
file_reader.close();
}
catch(IOExceptione1)
{
}
}
}
}
});
⑤对“设置”创建监视器:
set.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
intn=0;
area.setText(null);
n=Integer.parseInt(Text1.getText());
if(n==0){
JOptionPane.showMessageDialog(null,"请输入题目数量!
","提示",JOptionPane.OK_OPTION);
}else{
teacherZhang.setNum(n);
Strings=String.valueOf(n);
area.append(s+'\n');
}
}
});
}
}
⑥设置监视器从而控制答题数量:
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
Stringstr=e.getActionCommand();
try{
if(str.equals("getProblem")&&k textOne.setText(""+a[k]); textTwo.setText(""+b[k]); operatorLabel.setText(operator); message.setText("请回答"); textResult.setText(null); } elseif(str.equals("getProblem")&&k==num){ JOptionPane.showMessageDialog(null,"答题结束","提示",JOptionPane.OK_OPTION); SaveFile(operator); } ⑦通过if_else循环来计算统一答题情况: if(str.equals("answer")){ Stringanswer=textResult.getText(); intresult=Integer.parseInt(answer); c[k]=result; if(operator.equals("+")){ if(result==a[k]+b[k]){ message.setText("回答正确"); k++; setIsRight(true); x++; } else{ Strings="答案: "+String.valueOf(a[k]+b[k]); message.setText(s); k++; setIsRight(false); y++; } } elseif(operator.equals("-")){ if(result==a[k]-b[k]){ setIsRight(true); message.setText("回答正确"); k++; x++; } else{ setIsRight(false); Strings="答案: "+String.valueOf(a[k]-b[k]); message.setText(s); k++; y++; } } elseif(operator.equals("*")){ if(result==a[k]*b[k]){ setIsRight(true); message.setText("回答正确"); k++; x++; } else{ setIsRight(false); Strings="答案: "+String.valueOf(a[k]*b[k]); message.setText(s); k++; y++; } } elseif(operator.equals("/")){ if(result==a[k]/b[k]){ setIsRight(true); message.setText("回答正确"); c[k]=result; k++; x++; } else{ setIsRight(false); Strings="答案: "+String.valueOf(a[k]/b[k]); message.setText(s); k++; y++; } } } } catch(NumberFormatExceptionex){ message.setText("请输入数字字符"); }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } } ⑧该函数能够产生随机数: publicvoidsetNum(intn){ num=n; for(inti=0;i a[i]=random.nextInt(maxInteger)+1; b[i]=random.nextInt(maxInteger)+1; } } ⑨保存文件,能够借此找到历史答题情况: publicvoidSaveFile(Stringstr)throwsIOException{ FileWriterfw=null; try{ Filefile=newFile("station.txt"); fw=newFileWriter(file,true); }catch(IOExceptione){ e.printStackTrace(); } PrintWriterpw=newPrintWriter(fw); pw.flush(); Datedate=newDate(0161,8,22); DatenowTime=date; try{ pw.println("答题时间: "+nowTime); for(intj=0;j pw.println(a[j]+str+b[j]+"作答"+c[j]); pw.println("正确题数: "+x+""+"错误题数: "+y); pw.println(); pw.close(); fw.close(); }catch(IOExceptione){ e.printStackTrace(); } } publicvoidsetIsRight(booleanT){ this.isRight=T; } } ⑩主函数算法: packageSYSTEM; classMyFrame{ publicstaticvoidmain(Stringargs[]){ MathSystemframe; frame=newMathSystem(); frame.setTitle("小学生数学题目自动生成系统"); } } 四、调试分析 1.没有建立相应的监视器,将两个不同的类连接起来,不能产生随机数,无法进行之后的操作 2.没有设置参数,从而不能控制答题数目,导致可以一直答题,没有限度。 之后,设置了单独参数,利用for循环,当大于输入答题数量时,循环结束,系统无法再产生随机题 3.没有设置数据从而对答题情况进行统计,调试后,在判断回答正确否的地方,添加两个数据,分别对对错进行累加,则可以最后显示答题情况 4.在历史答题情况中没
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学题 自动 生成 系统