数学测试题实验报告王春泽.docx
- 文档编号:12100898
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:23
- 大小:911.05KB
数学测试题实验报告王春泽.docx
《数学测试题实验报告王春泽.docx》由会员分享,可在线阅读,更多相关《数学测试题实验报告王春泽.docx(23页珍藏版)》请在冰豆网上搜索。
数学测试题实验报告王春泽
电子工程学院2014
计算机实习
题目:
数学测试题程序的制作
院(系):
电子工程学院
年级专业:
2012级1班
学生姓名:
王春泽
学号:
2012210812
开始时间:
2014年2月25日
完成时间:
2014年3月12日
目录
目录
摘要2
前言3
1实验要求4
1.1基本要求4
1.2功能设计4
2.概要设计5
2.1程序设计思路5
2.2程序运行界面5
2.3模块说明图7
(1)7
(2)7
2.4程序流程图7
2.5程序相关说明8
3.程序详细设计与分析8
3.1.面板布局8
3.2.按钮的监听响应事件10
3.2.1为开始按钮添加事件监听器,使之前被隐藏的组件设为可见,并初始化第一道题,10
3.3自定义的类的实现方法14
3.4异常处理15
4.测试分析16
5.实验设计总结16
6.致谢16
参考资料16
数学测试题程序的设计与制作
学生:
王春泽
(北京邮电大学电子工程学院12级1班,学号:
2012210812)
摘要
本倒计时程序使用java语言编写,能够实现数学测试题的功能,启动程序之后显示初始化界面,左上方的模块是计算模块,输入测试题数后,会出现测试试题输入答案后点击下一题按钮,在右边的显示结果模块中显示刚才做的题目,如果答案正确则显示“正确”,如果答案错误则显示“错误”,并给出正确的计算结果。
题目都做完后,会给出相应的提示,此时点击“查看成绩”按钮,在成绩烂显示此次做题的成绩,并且根据成绩,会给出相应的提示和动画表情,诸如不及格,优秀等等。
点击“重置”按钮,会再次达到初始化的状态,并清楚之前的数据。
该程序使用jdk1.6的开发环境,开发工具主要使用eclipse,用到的插件有windowbuilder,美工方面主要用到photoshop进行图片编辑美化;
该程序主要用到java图形用户界面,事件监听,媒体等。
关键字:
数学测试题;Java语言;eclipse;java图形用户界面。
前言
Java的前身是Oak,它一开始只是被应用于消费性电子产品中。
后来它的开发者们发现它还可以被用于更大范围的Internet上。
1995年,Java语言的名字从Oak编程了Java。
1997年J2SE1.1发布。
1998年J2SE1.2发布,标志Java2的诞生。
十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。
Java的体系结构由Java语言、Javaclass、JavaAPI、Java虚拟机组成。
它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。
Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。
Java的平台标准有JavaME,JavaSE和JavaEE。
Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。
目前在众多的支持Java的开发工具中主要的7有JavaDevelopmentKit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。
其中JavaDevelopmentKit简称JDK是大多开发工具的基础。
以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
在本程序设计中,虽然程序规模较小,内容较少,但出于本人开发android对开发工具eclipse的熟悉度较高,并且对eclipse安装了很多插件,比如windowbuilder等,因此选择目前应用较为广泛的eclipse作为开发工具。
1实验要求
1.1基本要求
制作一个小学数学测试题的程序,能自定义题目的数量。
能对做题的结果进行判断,如果错误则给出正确的结果。
能查看答题的成绩。
其他要求:
界面美观,操作便捷,程序无BUG,功能有创意。
1.2功能设计
考虑到功能完整,界面美观,操作便捷,强调良好的用户体验,本数学题测试程序的功能主要体现在以下几个方面:
(1)进入主程序后,显示最开始的初始化界面,
(2)程序面板分为三个模块,左上方是答题模块,左下方是显示成绩模块,右边是答题结果模块。
(3)在答题模块输入答题的数目,点击开始按钮,下方会给出相应的题目,并且无关的部分被隐藏,直到做题结束点重置按钮,隐藏的部分才会显示,这样防止用户误操作,并使界面整洁美观,形成良好的用户体验。
(4)右边的显示答题结果的模块整洁美观,并且用到滚动条,这样题目数量不管多少都可以完美显示。
(5)答题结果后,答题的相关按钮文本框等会被隐藏,代替的是答题结束的提示和相应的动画,很友好。
(6)查看成绩后,根据分数的高低同样给出相应的提示并且伴有有趣的动画效果。
2.概要设计
2.1程序设计思路
在本程序中,设计了一个程序版面和相关按钮以及显示标签。
设计过程中,程序的main类继承了JFrame,其中添加了JPanel,在JPanel中,分别添加了按钮JButton并添加相应的响应事件,显示文字和倒计时时间的标签JLabel,在面板的最下层添加JLabel用于显示背景图像,自定义在textfield中显示背景图片的方法,并且自定义了一个继承JLabel的DynamicLabel,用于显示动态图片效果。
2.2程序运行界面
2.3模块说明图
(1)
图1
首先创建一个名为MathTest的类并继承JFrame类作为最底层的容器。
(2)
对于创建的DaoJiShi的类,首先要初始化容器,在容器中添加相应的组件,并添加相关的程序响应事件。
2.4程序流程图
失败
2.5程序相关说明
整个数学测试题程序分为三个模块:
答题模块,显示结果模块,显示成绩模块。
(1)在答题模块输入答题的数目,点击开始按钮,下方会给出相应的题目,并且无关的部分被隐藏,直到做题结束点重置按钮,隐藏的部分才会显示,这样防止用户误操作,并使界面整洁美观,形成良好的用户体验。
(2)右边的显示答题结果的模块整洁美观,不仅显示结果的正确与否,还能给出正确的结果,并且用到滚动条,这样题目数量不管多少都可以完美显示
(3)答题结果后,答题的相关按钮文本框等会被隐藏,代替的是答题结束的提示和相应的动画,很友好。
查看成绩后,根据分数的高低同样给出相应的提示并且伴有有趣的动画效果。
3.程序详细设计与分析
3.1.面板布局
3.1.1、创建相关面板
//创建启动界面面板
finalJPanelstartPanel=newJPanel();
//创建水平分割面板
finalJSplitPanehSplitPane=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT);
//创建垂直分割面板
finalJSplitPanevSplitPane=newJSplitPane(JSplitPane.VERTICAL_SPLIT);
//实现两个普通面板
testPane=newJPanel();
resultPane=newJPanel();
//定义包含JTextArea的滚动面板
FinalImageIconimageIcon=newImageIcon(MathTest.class.getResource("/drawable/math_background.png"));
finalJTextAreataShow=newJTextArea(){
{
setOpaque(false);
}
Imageimage=imageIcon.getImage();
publicvoidpaintComponent(Graphicsg){
g.drawImage(imageIcon.getImage(),0,0,this);
super.paintComponent(g);
}
};
3.1.2、答题面板的布局
//标签“输入题数”
finalJLabellbNum=newJLabel("\u8BF7\u8F93\u5165\u672C\u6B21\u6D4B\u8BD5\u9898\u6570:
");
//题数输入框
finalJTextFieldtfNum=newJTextField();
//显示题数标签
finalJLabellbNumTitle=newJLabel("本次测试一共"+String.valueOf(count)+"道题");
/确定按钮
finalJButtonokButton=newJButton();
//题序号标签
finalJLabellbExerciseOrder=newJLabel("");
//数字标签1
finalJLabellbNum_1=newJLabel("");
//运算符号标签
finalJLabellbOperator=newJLabel("");
//数字标签2
finalJLabellbNum_2=newJLabel("");
//等号标签
finalJLabellbEqual=newJLabel("");
//添加文本输入框
finalJTextFieldtfResult=newJTextField();
//重置按钮
finalJButtonrestartButton=newJButton("");
//添加下一题按钮
finalJButtonnextButton=newJButton("");
//添加答题结束后的显示
finalJLabellbShowAtLast=newJLabel("耶耶耶!
终于做完了……");
3.1.3、显示结果面板的布局
//在textfield中添加JTextare,即文本域
finalJTextAreataShow=newJTextArea(){
{
setOpaque(false);
}
3.1.4、显示成绩面板布局
//添加显示成绩标签
finalJLabelshowResultLabel=newJLabel("");
//添加动态显示标签,该类是自定义的一个类
finalDynamicGifLabeldynamicLabel_1=newDynamicGifLabel(newImageIcon(
MathTest.class.getResource("/drawable/gif_cry.gif")).getImage());
//测试结果提示
finalJLabellbAlart=newJLabel("呜呜,又没及格。
。
。
");
//背景标签
finalJLabelIcon_Label_result=newJLabel(newImageIcon(
MathTest.class.getResource("/drawable/score_background.png")));
3.2.按钮的监听响应事件
3.2.1为开始按钮添加事件监听器,使之前被隐藏的组件设为可见,并初始化第一道题,
okButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
lbNum.setVisible(false);
tfNum.setVisible(false);
okButton.setVisible(false);
count=Integer.parseInt(tfNum.getText());
lbNumTitle.setText("本次测试一共"+String.valueOf(count)+"道题");
lbExerciseOrder.setText("第1题");
//产生随机数
num_1=(int)(Math.random()*100);
num_2=(int)(Math.random()*100);
Randomr=newRandom();
operator=r.nextInt(4);
//设置标签显示内容
if(operator==0)
lbOperator.setText("+");
if(operator==1)
lbOperator.setText("一");
if(operator==2)
lbOperator.setText("x");
if(operator==3)
lbOperator.setText("/");
lbNum_1.setText(String.valueOf(num_1));
lbNum_2.setText(String.valueOf(num_2));
lbEqual.setText("=");
lbNumTitle.setVisible(true);
tfResult.setVisible(true);
nextButton.setVisible(true);
restartButton.setVisible(true);
lbNum_1.setVisible(true);
lbNum_2.setVisible(true);
lbOperator.setVisible(true);
lbEqual.setVisible(true);
lbExerciseOrder.setVisible(true);//之前隐藏的设为可见
}
});
3.2.2为重置按钮添加事件监听器,将部分组件隐藏并将需要用到的组件显示
//重置按钮添加监听器
restartButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
sign=1;
rightCount=0;
str="\n\n\n";
taShow.setText("");
lbNum.setVisible(true);
tfNum.setVisible(true);
okButton.setVisible(true);
lbNumTitle.setVisible(false);
tfResult.setVisible(false);
nextButton.setVisible(false);
lbNum_1.setVisible(false);
lbNum_2.setVisible(false);
lbOperator.setVisible(false);
lbEqual.setVisible(false);
lbExerciseOrder.setVisible(false);
lbShowAtLast.setVisible(false);
restartButton.setVisible(false);
showResultButton.setVisible(true);
lbAlart.setVisible(false);
dynamicLabel_1.setVisible(false);
dynamicLabel_2.setVisible(false);
showResultLabel.setVisible(false);//之前隐藏的设为可见
}
});
3.2.3为下一题按钮添加事件监听器,对答题结果进行判断,并将结果显示到相应的显示面板,并统计答题正确的数目,判断答题是否结束。
//为下一题按钮添加监听器
nextButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
/*if(sign>=count)
{
JOptionPane.showMessageDialog(getContentPane(),"不好意思,答题已经结束!
","提示",JOptionPane.OK_OPTION);
}
else*/
{
if(tfResult.getText().length()!
=0)
{
lbExerciseOrder.setText("第"+(sign+1)+"题");
sign++;
floatfInput=Float.parseFloat(tfResult.getText());
StringsInput=tfResult.getText();
floatfResult=0;
intiResult=0;
tfResult.setText("");
//开始对运算符进行判断,将结果存入字符串str中
if(operator==0)
{
iResult=num_1+num_2;
if(iResult==(int)fInput)
{
str+=num_1+"+"+num_2+"="+(int)fInput+""+"正确"+"\n";
rightCount++;
}
else
str+=num_1+"+"+num_2+"="+(int)fInput+""+"错误"+"正确答案:
"+iResult+"\n";
}
if(operator==1)
{
iResult=num_1-num_2;
if(iResult==(int)fInput)
{
str+=num_1+"-"+num_2+"="+(int)fInput+""+"正确"+"\n";
rightCount++;
}
else
str+=num_1+"-"+num_2+"="+(int)fInput+""+"错误"+"正确答案:
"+iResult+"\n";
}
if(operator==2)
{
iResult=num_1*num_2;
if(iResult==(int)fInput)
{
str+=num_1+"X"+num_2+"="+(int)fInput+""+"正确"+"\n";
rightCount++;
}
else
str+=+num_1+"X"+num_2+"="+(int)fInput+""+"错误"+"正确答案:
"+iResult+"\n";
}
if(operator==3)
{
fResult=(float)num_1/(float)num_2;
//格式化结果,保留两位小数
DecimalFormatdf=newDecimalFormat("0.00");
StringsResult=df.format(fResult);
if(sResult==sInput)
{
str+=num_1+"/"+num_2+"="+sInput+""+"正确"+"\n";
rightCount++;
}
else
str+=num_1+"/"+num_2+"="+sInput+""+"错误"+"正确答案:
"+sResult+"\n";
}
taShow.setText(str);
if(sign>count)
{
lbNumTitle.setVisible(false);
tfResult.setVisible(false);
nextButton.setVisible(false);
lbNum_1.setVisible(false);
lbNum_2.setVisible(false);
lbOperator.setVisible(false);
lbEqual.setVisible(false);
lbExerciseOrder.setVisible(false);
JOptionPane.showMessageDialog(getContentPane(),"本次答题已结束!
","提示",JOptionPane.OK_OPTION);
//隐藏部分内容
lbShowAtLast.setVisible(true);
dynamicLabel_2.setVisible(true);
}
else
{
//产生随机数
num_1=(int)(Math.random()*100);
num_2=(int)(Math.random()*100);
Randomr=newRandom();
operator=r.nextInt(4);
//设置标签显示内容
lbNum_1.setText(String.valueOf(num_1));
lbNum_2.setText(String.valueOf(num_2));
if(operator==0)
lbOperator.setText("+");
if(operator==1)
lbOperator.setText("一");
if(operator=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 测试 实验 报告 王春泽