版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/目录一、需求分析 2二、概要设计 3三、详细设计 43.1系统E-R图4 3.2关系模式43.3系统数据流图53.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用户信息模板用户信息模块主要包括用户的信息以与用户的实施操作。用户信息模块包括:用户姓名,用户编号,所属班级,用户性别,联系,家庭住址等相关信息。用户的实施操作:用户可以通过其包含的相关信息,与其他模块进行连接,可以在此系统中依次的进行题型选择,用户答题,显示正确答案以与记录历史答题信息等功能。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(""); final(this,"打开文件对话框",); 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) { (true); area.setText(null); Strings; if(()!=null) { try { (),()); (file); BufferedReaderin=newBufferedReader(); while((s=in.readLine())!=null) area.append(s+'\n'); in.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<num){ 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); Save); }⑦通过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<n;i++){ a[i]=random.nextInt(maxInteger)+1; b[i]=random.nextInt(maxInteger)+1; } }⑨保存文件,能够借此找到历史答题情况:publicvoidSavestr)throwsIOException{ fw=null; try{ File("station.txt"); fw=new(); }catch(IOExceptione){ e.printStackTrace(); } PrintWriterpw=newPrintWriter(fw); pw.flush(); Datedate=newDate(0161,8,22); DatenowTime=date; try{ pw.println("答题时间:"+nowTime); for(intj=0;j<num;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.在历史答题情况中没有把之前的答题情况分隔开来,导致查看起来很繁琐,在保存内容中添加了时间类Date,则可以显示每次回答问题的时间五、用户手册⒈本程序的运行环境为windows操作系统⒉进入演示程序后,即显示对话形式的操作过程,可开始进行系统运行⒊用户对于所要回答的题目类型进行选择,可以分别选择八种不同类型的算术类型⒋选择题型后,用户自主输入所要回答的题目数量,点击"设置"进行保存,以控制后面答题数目⒌按"下一题"开始后,程序自动生成所选择的题型题目,用户可对此在相对应的空中进行答题⒍在回答一定数目后,点击“下一题",系统会提示“答题结束"⒎在答题结束之后,可以点击菜单项“历史答题”,选择相对应的文件保存地址,可显示之前的答题记录⒏进行下一个小学生数学练习题目自动生成界面或退出程序。六、测试数据1.点击运行,打开界面:2.在菜单项选择想要选择的题型:3.填所要要答题数目,店"设置"保存,点击"下一题"便可随机生成所要题目:4.用户答题,当回答正确时,显示如下:5.用户答题,当回答错误时,显示如下:6、当回答题目到达要求时,继续如上操作,显示答题结束:7、点击菜单项"历史档案",弹出打开文件对话框,选择所要的文件:8、所显示的历史答题档案:七、附录源程序:packageSYSTEM;importjava.awt.;importjava.awt.FlowLayout;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.File;importjava.io.;importjava.io.IOException;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;publicclassMathSystemextendsJFrame{ /** * */ privatestaticfinallongserialVersionUID=1L; JMenuBarmenubar; JMenumenu1,menu2; JMenuItemgrade1,grade2,grade3,grade4,grade5,grade6,grade7,grade8,item; JTextFieldtextOne,textTwo,textResult,Text1; JButtonStart,giveAnswer,overanswer,set; JLabeloperatorLabel,message; TeacherteacherZhang; JLabelQcount; intL=0,K=0; JTextAreaarea; publicMathSystem(){ 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(""); final(this,"打开文件对话框",); 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) { (true); area.setText(null); Strings; if(()!=null) { try { (),()); (file);//读取字符输入流 BufferedReaderin=newBufferedReader();//缓冲字符输入流 while((s=in.readLine())!=null) area.append(s+'\n'); in.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'); } } }); } }packageSYSTEM;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.File;importjava.io.;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.Date;importjava.util.Random;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;classTeacherimplementsActionListener{Stringoperator="";publicbooleanisRight;intnum=0;intk=0;intx=0,y=0;Randomrandom;intmaxInteger;JTextFieldtextOne,textTwo,textResult;JLabeloperatorLabel,message;JTextAreaARE;MathSystemM;int[]a=newint[100];int[]b=newint[100];int[]c=newint[100];Teacher(MathSystemM){ this.M=M;for(inti=0;i<num;i++){ a[i]=0; b[i]=0; c[i]=0;} isRight=false; random=newRandom();}publicvoidsetMaxInteger(intn){ maxInteger=n;} @Override publicvoidactionPerformed(ActionEvente){//设置对答题数量的控制 //TODOAuto-generatedmethodstub Stringstr=e.getActionCommand(); try{ if(str.equals("getProblem")&&k<num){ 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); Save); } elseif(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(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北涿州别墅项目营销整合方案
- 二年级美术下册教案
- 2026四上数学第八单元试讲课件
- 趣味女生智商测试题及答案呈现
- 数字成语考题分析及参考答案
- 写字楼物业专业试题及解析答案
- 新生校园生活适应常见问题及解决指南
- 股权投资管理测试题与答案解析
- 2025年7月住院医师规范化培训《中医骨伤科》考试模拟题含参考答案解析
- 2025年7月住院医师规范化培训《中医骨伤科》考试
- 2026年山东将军开元纸业有限公司招聘(13人)笔试模拟试题及答案详解
- 2025年农信社不良资产处置岗招聘考试题库附答案
- 2026年全国高考1卷高考数学真题(教师版)
- A 证(企业主要负责人)考试题库
- 2026年高考英语真题完全解读(全国一卷)(试卷点评)
- 2026年五四制小升初数学测试题及答案
- 体育与健康九年级人教版背越式跳高教案
- 县域经皮冠状动脉介入治疗合理用药与综合管理指南课件
- 2026四川省现代种业发展集团种芯农业有限公司招聘财务人员(会计岗)1人笔试历年常考点试题专练附带答案详解
- 反恐怖防范安全风险评估工作指南(试行)
- 江西省2026年重点学校初一新生入学分班考试试题及答案
评论
0/150
提交评论