小学生数学练习题目自动生成系统JAVA课程设计.docx
《小学生数学练习题目自动生成系统JAVA课程设计.docx》由会员分享,可在线阅读,更多相关《小学生数学练习题目自动生成系统JAVA课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
![小学生数学练习题目自动生成系统JAVA课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/14/9686b4b3-1cc8-4652-9968-1b639c410d6b/9686b4b3-1cc8-4652-9968-1b639c410d6b1.gif)
小学生数学练习题目自动生成系统JAVA课程设计
课程设计报告
课程名称JAVA程序设计
课题名称小学生数学练习题目自动生成系统
专业信息管理与信息系统
班级
学号
姓名
指导教师李峰、谢雅、赵锦元
2016年7月2日
湖南工程学院
课程设计任务书
课程名称JAVA程序设计
课题小学生数学练习题目自动生成系统
专业班级
学生姓名
学号
指导老师李峰、谢雅、赵锦元
审批
任务书下达日期2016年6月14日
任务完成日期2016年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.1系统设计题目
小学生数学练习题目自动生成系统
1.2目的与要求
(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.1系统E-R图
3.2数据类型
publicJLabeljlQuestion1;//题目标题
publicJLabeljlQuestion2;//题目内容
publicJLabeljlAnswer;//答案标题
publicJLabeljlW;//题号
publicJLabeljlT;//正确数
publicJButtonjbStart;//开始游戏
publicJButtonjbEnd;//停止游戏
publicJButtonjbExit;//退出游戏
publicJTextFieldjtfAnswer;//输入答案
publicintm,n,l,answer,trueAnswer,x,y=20,a=0,b=0;//随机数m、n,计数参数
publicJRadioButtonradioButton1;
publicJRadioButtonradioButton2;
publicJRadioButtonradioButton3;
publicJRadioButtonradioButton4;
publicJRadioButtonradioButton5;
publicJRadioButtonradioButton6;
publicButtonGroupgroup1;
publicButtonGroupgroup2;
3.3功能模块实现
(1)符号模块:
符号选择只能有一个符号,所以选择单选按钮来实现符号选择功能,先建立一个标签为符号选择标签。
然后建立四个单选按钮,并用group方法实现其单选功能。
最后注册监听器,用ItemListener监听器实现。
(2)运算范围选择模块:
实现方法同符号选择模块,为单选按钮,注册ItemListener监听器。
(3)题号与正确题数:
定义两个int型变量,将题号和正确题数传递给这两个变量。
(4)题目生成:
用Math.Random()*a生成随机数,将其赋值给两个int型变量。
(5)结果输入框:
建立一个输入框,将答案输入的时候,可获得答案,将答案与之前定义的answer进行比较,比较结果相同时正确题数加1,题号加1,生成新题目。
3.4java源文件及其方法
没有表号
序号
类名
功能
1
JFrame
框架
2
ActionListener
监听器
3
Container
容器
4
ActionEvent
事件
3.5主要组件设计
根据要求软件要能选择运算符号,还有运算范围。
能根据测试者做对的题数给予鼓励
运算符号选择界面,有四种符号,都分别用单选按钮来实现,再注册事件监听器。
运算范围界面,有两种,同样用单选按钮来实现,注册事件监听器。
题号,正确题数,题目分别是三个标签。
答案输入框是一个文字输入框。
开始测试,完成测试,结束测试是三个注册了事件监听器的按钮。
3.6类的设计
定义一个主类,在里面定义构造方法,还有监听器等组件
4.调试及运行结果
4.110以内的加减法测试.
(1)选择10以内的加法进行测试。
图4,110以内加法测试
(2)选择10以内的减法进行测试。
图4.210以内的减法测试
4.2100以内乘除法测试
(1)选择100以内乘法运算测试。
图4.3100以内乘法测试
(2)选择100内的除法运算结果。
图4.4100内的除法测试
4.3完成测试
(1)测试通过。
图4.5测试通过
(2)测试没及格。
图4.6测试没及格
5心得体会
课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。
通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容;《JAVA程序设计》从课程性质上讲是一门专业基础课,它的目的和任务就是训练学生对java语言的认识,让学生对计算机编程有更进一部的认识,进而增加其对学习和应用相关专业课的兴趣。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,将结论用于实践,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中当然遇到了问题,可以说得是困难重重,毕竟这是不可避免的,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
由于能力有限,其中文档的编写是参考书上资料,我想在以后的学习中,要更注重实践这一环节。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到种种问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
从设计过程看,在整整两个星期的日子里,做到精益求精,学到了很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
从设计结果看,设计要求完成任务,达到了预期的目的,设计、演示效果较好。
最主要是从中学到了知识。
通过这次课程设计,我学到了很多,得到了很多,不仅充分的将在书本中学到的知识运用到解决实际问题上,而且加强了自己的动手能力。
我会总结出这次课程设计的所有的成功以及失败的经验和心得,并希望老师能够批评指出存在的错误之处,期待有更多的机会让我实践理论知识。
总的来说,这次课程设计确实学到很多,不仅锻炼了我遇到问题解决问题的勇气和能力,还练就了遇到挫折不达目的不罢休的韧性,这在以后的工作与学习中将会非常重要。
6参考文献
[1]刘万军,郑少京,王松波,梁清华.JAVA6程序设计实践教程[M].第1版,北京:
清华大学出版社,2009
[2]Y.DanielLiang.Java语言程序设计(基础篇)[M].第8版,机械工业出版社出版社,2011
[3]杨树林等,Java语言最新实用案例教程(第2版)[M]. 清华大学出版社. 2010.7
[4]张帆等,Java范例开发大全. 清华大学出版社. 2009.8
[5]陈天河,Struts,Hibernate,Spring集成开发宝典.电子工业出版社,2007.12
[6]CraigWalls,RyanBreidenbach.SpringinAction.人民邮电出版社,2008.10
[7]韩万江,姜立新,软件项目管理案例教程.机械工业出版社,2007.12
7附录
7.1源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classEnglishGameextendsJFrameimplementsActionListener,ItemListener
{
publicJLabeljlQuestion1;//题目标题
publicJLabeljlQuestion2;//题目内容
publicJLabeljlAnswer;//答案标题
publicJLabeljlW;//题号
publicJLabeljlT;//正确数
publicJButtonjbStart;//开始游戏
publicJButtonjbEnd;//停止游戏
publicJButtonjbExit;//退出游戏
publicJTextFieldjtfAnswer;//输入答案
publicintm,n,l,answer,trueAnswer,x,y=6,a=0,b=0;//随机数m、n,计数参数
publicJRadioButtonradioButton1;
publicJRadioButtonradioButton2;
publicJRadioButtonradioButton3;
publicJRadioButtonradioButton4;
publicJRadioButtonradioButton5;
publicJRadioButtonradioButton6;
publicButtonGroupgroup1;
publicButtonGroupgroup2;
publicEnglishGame()//构造函数,设计面板
{
this.radioButton1=newJRadioButton("加法运算+");
radioButton1.addItemListener(this);
this.radioButton2=newJRadioButton("减法运算-");
radioButton2.addItemListener(this);
this.radioButton3=newJRadioButton("乘法运算*");
radioButton3.addItemListener(this);
this.radioButton4=newJRadioButton("除法运算/");
radioButton4.addItemListener(this);
this.group1=newButtonGroup();
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=newJRadioButton("10以内的运算");
this.radioButton6=newJRadioButton("100以内的运算");
this.group2=newButtonGroup();
group2.add(radioButton5);
group2.add(radioButton6);
radioButton5.addItemListener(this);
radioButton6.addItemListener(this);
this.x=0;//参数初始化
this.trueAnswer=0;
this.setTitle("小学生算术运算测试软件");//控件初始化
this.setLayout(newGridLayout(4,6));//7行2列布局
this.jlQuestion1=newJLabel();
jlQuestion1.setText("题目:
");
this.jlQuestion2=newJLabel();
this.jlAnswer=newJLabel();
jlAnswer.setText("答案:
");
//ImageIconicon=newImageIcon("QQ图片大兵.png");
this.jbStart=newJButton("开始测试");
jbStart.addActionListener(this);//添加事件监听器
this.jbEnd=newJButton("完成测试");
jbEnd.setEnabled(false);//开始时不可用
jbEnd.addActionListener(this);//添加事件监听器
this.jbExit=newJButton("退出游戏");
jbExit.addActionListener(this);//添加事件监听器
this.jtfAnswer=newJTextField();
jlW=newJLabel();
jlW.setText("题号:
"+x);
jlT=newJLabel();
jlT.setText("正确提交:
"+trueAnswer);
//控件第一行
this.add(newJLabel("请选择运算符:
"));
this.add(radioButton1);
this.add(radioButton2);
this.add(radioButton3);
this.add(radioButton4);
//控件第二行
this.add(newJLabel("请选择运算范围:
"));
this.add(radioButton5);
this.add(newJLabel());
this.add(newJLabel());
this.add(radioButton6);
//控件第三行
this.add(jlW);//添加控件题号1
this.add(jlT);//正确数2
this.add(newJLabel());
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
}
publicvoidcreatQuestion1()//新建题目,10以内加法
{
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=m+n;//加法结果
this.jlQuestion2.setText(m+""+"+"+n+"=?
");//使label显示题目内
}
publicvoidcreatQuestion2()//新建题目,10以内减法
{
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=m-n;//减法结果
this.jlQuestion2.setText(m+""+"-"+n+"=?
");//使label显示题目内容
}
publicvoidcreatQuestion3()//新建题目,10以内乘法
{
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=m*n;//乘法结果
this.jlQuestion2.setText(m+""+"*"+n+"=?
");//使label显示题目内容
}
publicvoidcreatQuestion4()
{//新建题目,10以内除法
this.m=(int)(Math.random()*11);//随机运算数
this.n=(int)(Math.random()*11);
answer=(int)(m/n);//除法结果
this.jlQuestion2.setText(m+""+"/"+n+"=?
");//使label显示题目内容
}
publicvoidcreatQuestion5()
{//新建题目,100以内加法
this.m=(int)(Math.random()*101);//随机运算数
this.n=(int)(Math.random()*101);
answer=m+n;//加法结果
this.jlQuestion2.setText(m+""+"+"+n+"=?
");//使label显示题目内容
}
publicvoidcreatQuestion6()
{//新建题目,100以内加减法
this.m=(int)(Math.random()*101);//随机运算数
this.n=(int)(Math.random()*101);
answer=m-n;//减法结果
this.jlQuestion2.setText(m+""+"-"+n+"=?
");//使label显示题目内容
}
publicvoidcreatQuestion7()
{//新建题目,100以内乘法
this.m=(int)(Math.random()*101);//随机运算数
th