小学生数学练习题目自动生成系统JAVA课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程名称JAVA程序设计
课题名称小学生数学练习题目自动生成系统专业信息管理与信息系统
班级
学号
姓名
指导教师李峰、谢雅、赵锦元
2021年7 月2 日
湖南工程学院
课程设计任务书
课程名称JAVA程序设计
课题小学生数学练习题目自动生成系统专业班级
学生姓名
学号
指导教师李峰、谢雅、赵锦元
审批
任务书下达日期2021 年6 月14 日任务完成日期2021 年7 月 2 日
一、设计内容与设计要求
1.课程设计目
全面熟悉、掌握JAVA程序设计根本知识,增强对不同问题运用与灵活选择适宜数据构造以及JAVA程序设计本领,熟悉编制与调试程序技巧,掌握分析结果假设干有效方法,进一步提高上机动手能力,增强JAVA程序设计概念,熟悉java语言编程,养成提供文档资料习惯与标准编程思想,为后继课程实验以及课程设计打下较扎实根底。
进一步提高上机动手能力,培养使用计算机解决实际问题能力,为后继课程实验以及课程设计,特别是自学、毕业论文完成打下扎实根底。
2.课题题目
⑴计算器
⑵简单投票管理系统
⑶小学生数学练习题目自动生成系统
⑷电子英汉词典
⑸标准化考试系统
[6]Hannoi塔
3.设计要求
⑴设计课题题目:按学号顺序〔每10位学生选择一题〕选择
相应题号课题。
换题者不记成绩。
⑵根据自己对应课题完成以下主要工作:①完成系统需求分析:包括系统设计目与意义;系统功能需求〔系统流程图〕;输入输出要求。
②完成系统总体设计:包括系统功能分析;系统功能模块划分与设计〔系统功能模块图〕。
③完成系统详细设计:包括需求分析;类层次图;界面设计与各功能模块实现。
④系统调试:调试出现主要问题,编译语法错误及修改,
重点是运行逻辑问题修改与调整。
⑤使用说明书及编程体会:说明如何使用你编写程序,详细列出每一步操作步骤。
⑥关键源程序〔带注释〕
⑶按规定格式完成课程设计报告(源代码),将其打印稿(A4纸)上交给教师存档。
⑷不得抄袭他人程序、课程设计报告,每个人应表达自己个性设计。
二、进度安排
第17周星期二下午14:30-18:30
星期五下午14:30-18:30
星期六下午14:30-18:30
星期日下午14:30-18:30
第18周周一上午8:00-12:00 下午14:30-18:30
目录
1需求分析
系统设计题目
小学生数学练习题目自动生成系统
目与要求
〔1〕设计要求
编写一个能够自动生成小学生数学练习题目程序。
设计一个程序,能够根据用户选择生成“10以内加法〞、“10以内减法〞、“20以内加法〞、“20以内减法〞、“100以内加法〞、“100以内减法〞、“100以内乘法〞、“100以内除法〞8种类型题目,要求每个题目能够随机生成,并符合以下要求:
10以内加法得数在不大于10范围内;
20以内加法得数在不大于20范围内;
100以内加法得数在不大于100范围内;
10以内减法两个运算数在不大于10范围内并且差为非负数;
20以内减法两个运算数在不大于20范围内并且差为非负数;
100以内减法两个运算数在不大于100范围内并且差为非负数;
100以内乘法得数在不大于100范围内;
100以内除法两个运算数在不大于100范围内并且被除数应该是除数整数倍;
要求程序具备以下功能:根据用户对“题目类型〞选择,在按下“出题〞按钮之后,每次显示20个相应类型题目,用户可以在界面上填写计算结果;答题完成之后,当用户按下“评卷〞按钮时,根据用户答题结果,在界面上可以显示红色“√〞或“╳〞符号,以作为对用户答题结果评判。
当用户按下“答案〞按钮时,在界面上显示正确运算结果。
〔2〕输入/输出要求
输入要求:用户能够在界面上输入题目计算结果;
输出要求:程序可以在界面上显示20个用户所需类型题目,以红色“√〞或“╳〞
符号显示对用户计算结果评判结果,以及所给出题目正确答案。
2总体设计
小学生数学练习题目自动生成系统主要包括用户信息、题目信息、选题情况信息、答题信息、历史成绩信息五个功能模块。
2.1 用户信息模板
用户信息模块主要包括用户信息以及用户实施操作。
用户信息模块包括:用户姓名,用户编号,所属班级,用户性别,联系,家庭住址等相关信息。
用户实施操作:用户可以通过其包含相关信息,与其他模块进展连接,可以在此系统中依次进展题型选择,用户答题,显示正确答案以及记录历史答题信息等功能。
2.2 题目信息模块
题目信息模块主要实现对数学练习题目信息管理记录。
题目信息模块主要包括:题目编号,甲空,题目题型,乙空,正确结果等相关信息。
2.3 选题情况信息模块
选题情况信息模块主要实现对所具有题目工程进展管理记录,根据对用户根底信息与题目信息相应连接可以实现不同用户对题型选择,从而可以形成不同题型,生成相对应试卷。
选题情况信息模块主要包括:用户编号,题目题型,题目编号等相关信息。
2.4 答题信息模块
答题信息模块主要是为了实现与选题情况信息进展对接,根据实现后答题信息可以直接录入到系统中进展记录。
答题信息模块主要包括:用户编号,题目题型,题目编号,所填答案等相
3详细设计
图3.1 系统E-R图
3.2 数据类型
public JLabel jlQuestion1;//题目标题
public JLabel jlQuestion2;//题目内容
public JLabel jlAnswer;//答案标题
public JLabel jlW;//题号
public JLabel jlT;//正确数
public JButton jbStart;//开场游戏
public JButton jbEnd;//停顿游戏
public JButton jbExit;//退出游戏
public JTextField jtfAnswer;//输入答案
public int m,n,l,answer,trueAnswer,x,y=20,a=0,b=0;//随机数m、n,计数参数
public JRadioButton radioButton1;
public JRadioButton radioButton2;
public JRadioButton radioButton3;
public JRadioButton radioButton4;
public JRadioButton radioButton5;
public JRadioButton radioButton6;
public ButtonGroup group1;
public ButtonGroup group2;
〔1〕符号模块:
符号选择只能有一个符号,所以选择单项选择按钮来实现符号选择功能,先建立一个标签为符号选择标签。
然后建立四个单项选择按钮,并用group方法实现其单项选择功能。
最后注册监听器,用ItemListener监听器实现。
〔2〕运算范围选择模块:
实现方法同符号选择模块,为单项选择按钮,注册ItemListener 监听器。
〔3〕题号与正确题数:
定义两个int型变量,将题号与正确题数传递给这两个变量。
〔4〕题目生成:
用Math.Random()*a生成随机数,将其赋值给两个int型变量。
〔5〕结果输入框:
建立一个输入框,将答案输入时候,可获得答案,将答案与之前定义answer进展比拟,比拟结果一样时正确题数加1,题号加1,生成新题目。
3.4 java源文件及其方法
没有表号
3.5 主要组件设计
根据要求软件要能选择运算符号,还有运算范围。
能根据测试者做对题数给予鼓励
运算符号选择界面,有四种符号,都分别用单项选择按钮来实现,再注册事件监听器。
运算范围界面,有两种,同样用单项选择按钮来实现,注册事件监听器。
题号,正确题数,题目分别是三个标签。
答
案输入框是一个文字输入框。
开场测试,完成测试,完毕测试是三个注册了事件监听器按钮。
3.6 类设计
定义一个主类,在里面定义构造方法,还有监听器等组件
4.1 10以内加减法测试.
〔1〕选择10以内加法进展测试。
图4,1 10以内加法测试
〔2〕选择10以内减法进展测试。
图10以内减法测试
4.2 100以内乘除法测试
〔1〕选择100以内乘法运算测试。
图4.3 100以内乘法测试
〔2〕选择100内除法运算结果。
图4.4 100内除法测试
〔1〕测试通过。
图4.5 测试通过
〔2〕测试没及格。
图4.6 测试没及格
5心得体会
课程设计对学生而言是其对所学课程内容掌握情况一次自我验证,从而有着极其重要意义。
通过课程设计能提高学生对所学知识综合应用能力,能全面检查并掌握所学内容;JAVA程序设计从课程性质上讲是一门专业根底课,它目与任务就是训练学生对java语言认识,让学生对计算机编程有更进一部认识,进而增加其对学习与应用相关
专业课兴趣。
通过这次课程设计使我懂得了理论与实际相结合是很重要,只有
理论知识是远远不够,只有把所学理论知识与实践相结合起来,从理论中得出结论,将结论用于实践,从而提高自己实际动手能力与独立思考能力。
在设计过程中当然遇到了问题,可以说得是困难重重,毕竟这是不可防止,同时在设计过程中发现了自己缺乏之处,对以前所学过知识理解得不够深刻,掌握得不够结实。
由于能力有限,其中文档编写是参考书上资料,我想在以后学习中,要更注重实践这一环节。
通过这次课程设计使我们懂得了理论与实际相结合是很重要,只有理论知识是远远不够,只有把所学理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己实际动手能力与独立思考能力。
在设计过程中遇到种种问题,同时在设计过程中发现了自己缺乏之处,对一些前面学过知识理解得不够深刻,掌握得不够结实,通过这次课程设计之后,我们把前面所学过知识又重新温故了一
遍。
从设计过程看,在整整两个星期日子里,做到精益求精,学到了
很多很多东西,同时不仅可以稳固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。
从设计结果看,设计要求完成任务,到达了预期目,设计、演示效果较好。
最主要是从中学到了知识。
通过这次课程设计,我学到了很多,得到了很多,不仅充分将在
书本中学到知识运用到解决实际问题上,而且加强了自己动手能力。
我会总结出这次课程设计所有成功以及失败经历与心得,并希望教师能够批评指出存在错误之处,期待有更多时机让我实践理论知识。
总来说,这次课程设计确实学到很多,不仅锻炼了我遇到问题解
决问题勇气与能力,还练就了遇到挫折不达目不罢休韧性,这在以后
工作与学习中将会非常重要。
6参考文献
[1] 刘万军,郑少京,王松波,梁清华.JAVA6程序设计实践教程[M].第
1版, 北京:清华大学出版社,2021
(根底篇)[M].第8版, 机械工业出版社出版社,2021
[3] 杨树林等,Java语言最新实用案例教程(第2版)[M]. 清华大学出
版社.
[4] 张帆等,Java范例开发大全. 清华大学出版社.
7附录
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class EnglishGame extends JFrame implements ActionListener,ItemListener
public JLabel jlQuestion1;//题目标题
public JLabel jlQuestion2;//题目内容
public JLabel jlAnswer;//答案标题
public JLabel jlW;//题号
public JLabel jlT;//正确数
public JButton jbStart;//开场游戏
public JButton jbEnd;//停顿游戏
public JButton jbExit;//退出游戏
public JTextField jtfAnswer;//输入答案
public int m,n,l,answer,trueAnswer,x,y=6,a=0,b=0;//随机数m、n,计数参数
public JRadioButton radioButton1;
public JRadioButton radioButton2;
public JRadioButton radioButton3;
public JRadioButton radioButton4;
public JRadioButton radioButton5;
public JRadioButton radioButton6;
public ButtonGroup group1;
public ButtonGroup group2;
public EnglishGame() //构造函数,设计面板
this.radioButton1=new JRadioButton("加法运算+");
radioButton1.addItemListener(this);
this.radioButton2=new JRadioButton("减法运算-");
radioButton2.addItemListener(this);
this.radioButton3=new JRadioButton("乘法运算*");
radioButton3.addItemListener(this);
this.radioButton4=new JRadioButton("除法运算/");
radioButton4.addItemListener(this);
this.group1=new ButtonGroup();
group1.add(radioButton1);
group1.add(radioButton2);
group1.add(radioButton3);
group1.add(radioButton4);
radioButton1.addItemListener(this);
radioButton2.addItemListener(this);
radioButton3.addItemListener(this);
radioButton4.addItemListener(this);
this.radioButton5=new JRadioButton("10以内运算");
this.radioButton6=new JRadioButton("100以内运算");
this.group2=new ButtonGroup();
group2.add(radioButton5);
group2.add(radioButton6);
radioButton5.addItemListener(this);
radioButton6.addItemListener(this);
this.x=0;//参数初始化
this.trueAnswer=0;
this.setTitle("小学生算术运算测试软件");//控件初始化
this.setLayout(new GridLayout(4,6));//7行2列布局
this.jlQuestion1=new JLabel();
jlQuestion1.setText("题目:");
this.jlQuestion2=new JLabel();
this.jlAnswer=new JLabel();
jlAnswer.setText("答案:");
//ImageIcon icon=new ImageIcon("QQ图片大兵.png");
this.jbStart=new JButton("开场测试");
jbStart.addActionListener(this);//添加事件监听器
this.jbEnd=new JButton("完成测试");
jbEnd.setEnabled(false);//开场时不可用
jbEnd.addActionListener(this);//添加事件监听器
this.jbExit=new JButton("退出游戏");
jbExit.addActionListener(this);//添加事件监听器
this.jtfAnswer=new JTextField();
jlW=new JLabel();
jlW.setText("题号:"+x);
jlT=new JLabel();
jlT.setText("正确提交:"+trueAnswer);
//控件第一行
this.add(new JLabel("请选择运算符:"));
this.add(radioButton1);
this.add(radioButton2);
this.add(radioButton3);
this.add(radioButton4);
//控件第二行
this.add(new JLabel("请选择运算范围:"));
this.add(radioButton5);
this.add(new JLabel());
this.add(new JLabel());
this.add(radioButton6);
//控件第三行
this.add(jlW);//添加控件题号1
this.add(jlT);//正确数2
this.add(new JLabel());
this.add(jlQuestion1);//题目标题2
this.add(jlQuestion2);//题目内容3
//控件第四行
this.add(jbStart);//开场游戏
this.add(jbEnd);//停顿游戏
this.add(jbExit);//退出游戏
this.add(jlAnswer);//答案标题4
this.add(jtfAnswer);//输入答案5
public void creatQuestion1()//新建题目,10以内加法
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=m+n;//加法结果
this.jlQuestion2.setText(m+""+"+"+n+"=");//使label 显示题目内
public void creatQuestion2() //新建题目,10以内减法
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=m-n; //减法结果
this.jlQuestion2.setText(m+""+"-"+n+"=");//使label 显示题目内容
public void creatQuestion3()//新建题目,10以内乘法
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=m*n;//乘法结果
this.jlQuestion2.setText(m+""+"*"+n+"=");//使label 显示题目内容
public void creatQuestion4()
{//新建题目,10以内除法
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=(int)(m/n);//除法结果
this.jlQuestion2.setText(m+""+"/"+n+"=");//使label 显示题目内容
public void creatQuestion5()
{//新建题目,100以内加法
this.m=(int)(Math.random()*101);//随机运算数
this.n=(int)(Math.random()*101);
answer=m+n;//加法结果
this.jlQuestion2.setText(m+""+"+"+n+"=");//使label 显示题目内容
public void creatQuestion6()
{//新建题目,100以内加减法
this.m=(int)(Math.random()*101);//随机运算数
this.n=(int)(Math.random()*101);
answer=m-n;//减法结果
this.jlQuestion2.setText(m+""+"-"+n+"=");//使label 显示题目内容
public void creatQuestion7()
{//新建题目,100以内乘法
this.m=(int)(Math.random()*101);//随机运算数
this.n=(int)(Math.random()*101);
answer=m*n;//乘法结果
this.jlQuestion2.setText(m+""+"*"+n+"=");//使label 显示题目内容
public void creatQuestion8()
{//新建题目,100以内除法
this.m=(int)(Math.random()*101);//随机运算数
this.n=(int)(Math.random()*101);
answer=(int)(m/n);//除法结果
this.jlQuestion2.setText(m+""+"/"+n+"=");//使label 显示题目内容
public void test()
{//检测函数,检测是否做到10道题
if(this.x==y)
{//如果做够数目
jlW.setText("题号:0");//界面初始化
jlT.setText("正确提交:0");
jbStart.setText("开场测试");
this.jtfAnswer.setText("");
this.jlQuestion2.setText("");
if(trueAnswer>(int)(y*0.6))
JOptionPane.showMessageDialog( null , "你真棒,及格了!!!题目数:"+y+",测试得分:"+(10*trueAnswer),"" , JOptionPaneRMATION_MESSAGE);//弹出统计对话框
else
JOptionPane.showMessageDialog( null , "努力吧,小盆友,沒及格题目数:"+y+",测试得分:"+(10*trueAnswer),"" , JOptionPaneRMATION_MESSAGE);//弹出统计对话框
x=0;//数据初始化
trueAnswer=0;
jbStart.setEnabled(true);//设置对应按钮是否可用
jbEnd.setEnabled(false);
public void showMe()//窗体显示函数
this.setSize(800,500);//窗体大小
this.setVisible(true);//窗体可见
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //窗体关闭方式
public void itemStateChanged(ItemEvent e) {
if(e.getSource() == radioButton1){
a=1;
else if(e.getSource() == radioButton2){
a=2;
else if(e.getSource() == radioButton3){
a=3;
else if(e.getSource() == radioButton4){
a=4;
else if(e.getSource() == radioButton5){
b=1;
else if(e.getSource() == radioButton6){
b=2;
public void actionPerformed(ActionEvent e) //事件处理
if(e.getSource()==jbStart)//开场游戏或下一题按钮
if((jbStart.getText()=="开场测试"))//按钮为开场游戏
jbStart.setText("第一题");
jbEnd.setEnabled(true);//设置按钮可用
x++;
jlW.setText("题号:"+x);
jbEnd.setEnabled(true);//设置按钮可用
else if((a==0)&&(b==0)){
JOptionPane.showMessageDialog( null , "请先选择运算符号与运算范围","" , JOptionPaneRMATION_MESSAGE);//提示正确
else if((jbStart.getText()=="第一题")&&(a==1)&&(b==1))
creatQuestion1();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题
")&&(a==2)&&(b==1))
creatQuestion2();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==3)&&(b==1))
creatQuestion3();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==4)&&(b==1))
creatQuestion4();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==1)&&(b==2))
creatQuestion5();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==2)&&(b==2))
creatQuestion6();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==3)&&(b==2))
creatQuestion7();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==4)&&(b==2))
creatQuestion8();
jbStart.setText("下一题");
else if((jbStart.getText()=="第一题")&&(a==1)&&(b==1))
creatQuestion1();
jbStart.setText("下一题");
else if((jbStart.getText()=="下一题")&&(a==1)&&(b==1))
int q=Integer.parseInt(jtfAnswer.getText());
System.out.println(answer);
System.out.println(trueAnswer);
try{
if(q==answer)//答案正确
trueAnswer++;//正确答复数增一
creatQuestion1();//新建题目
x++;
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//判断题目总数
this.jtfAnswer.setText("");//答案输入框置空
else
{ //答案错误
System.out.println("chuo");
x++;
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//判断题目总数
this.jtfAnswer.setText("");
catch(NumberFormatException nfe)
{//转换异常处理
JOptionPane.showMessageDialog( null , "输入有误!","" , JOptionPane.ERROR_MESSAGE);//提示有误
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//测试题目总数是否够10
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
else if((jbStart.getText()=="下一题")&&(a==2)&&(b==1))
{ int q=Integer.parseInt(jtfAnswer.getText());
System.out.println(answer);
System.out.println(trueAnswer);
try{
if(q==answer)//答案正确
trueAnswer++;//正确答复数增一
creatQuestion2();//新建题目
x++;
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//判断题目总数
this.jtfAnswer.setText("");//答案输入框置空
else
{ //答案错误
System.out.println("chuo");
x++;
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//判断题目总数
this.jtfAnswer.setText("");
catch(NumberFormatException nfe)
{//转换异常处理
JOptionPane.showMessageDialog( null , "输入有误!","" , JOptionPane.ERROR_MESSAGE);//提示有误
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//测试题目总数是否够10
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
else if((jbStart.getText()=="下一题")&&(a==3)&&(b==1)) int q=Integer.parseInt(jtfAnswer.getText());
System.out.println(answer);
System.out.println(trueAnswer);
try{
if(q==answer)//答案正确
trueAnswer++;//正确答复数增一
creatQuestion3();//新建题目
x++;
jlW.setText("题号:"+x);
jlT.setText("正确提交:"+trueAnswer);
test();//判断题目总数
this.jtfAnswer.setText("");//答案输入框置空else
{ //答案错误
System.out.println("chuo");。