基于JAVA的小学数学四则运算教学系统的设计与实现∗

2018-04-26 11:57闵鹏瑾肖
计算机与数字工程 2018年4期
关键词:子系统组件选题

刘 涛 闵鹏瑾肖 汉

(1.郑州师范学院信息科学与技术学院 郑州 450044)(2.吉林大学数学学院 长春 130012)

1 引言

多媒体技术的普及促使多媒体教学广泛应用于课堂教学中。好的多媒体教学软件更能使教学效果事半功倍,而目前的多媒体教学软件往往只是将多媒体信息在教学中展现与播放,大多缺少灵活性和交互性[1]。加、减、乘、除四则运算是小学数学课程中的基础内容[2],在小学数学知识体系中占有举足轻重的地位。由于四则运算具有一定的抽象性,而小学生的思维又以具体形象思维为主,对较抽象内容的理解存在一定的认知负担。因此,在实际的教学中,运用一些符合学生认知特点的且具有交互性和灵活性的多媒体教学软件来帮助学生学习是十分必要的。本文针对小学数学四则运算的教学实际,设计了一种具有随机出题、交互解答,并能对答案进行自动测评的教学系统,该系统能更好地完善教与学的过程,满足教学的实际需求。

2 MVC模式与事件处理机制

MVC就是指模型-视图-控制器(Mod⁃el-View-Controller),是一种先进的设计结构,其目的是以会话方式为GUI(图形用户接口)设计提供支持[3]。MVC模式使GUI设计更具有对象化特性,也更便于维护。因此,在GUI程序设计时,可以将存储有数据的某个对象作为模型,然后为模型指定合适的显示组件,该组件就是视图。为了响应用户的交互操作,应选用某个组件作控制器使用,当控制器触发事件时,启动事件处理机制来对视图修改或获取模型中所维护的数据,最后使视图更新显示。

GUI设计中除了要完成静态设计,还要为作为控制器的组件提供响应与处理事件的能力,从而使程序具备与用户或外部程序进行交互的能力,使得程序“活起来”。事件处理关注程序的动态特征,控制器组件依据用户交互操作来产生不同类型的事件对象[4]。在处理事件时,控制器组件本身并不参与,而是交由第三方即事件监听器来处理。这一处理方式缘于JAVA采用了委托事件处理模式。事件处理过程中执行相关的处理方法,以完成预定任务。图1即展示了JAVA中事件产生和处理的过程。

图1 事件处理流程

3 系统设计

3.1 系统的体系结构

系统基于JAVA语言实现,体系结构设计遵循MVC模式,整个系统按功能模块划分为四大模块:年级模块、运算模块、选题模块、测评模块。其中年级模块用于教师设定授课年级,年级不同该模块中设置的试题难度系数(maxCount)不同,年级越高难度系数越大,试题也就越难,该模块确保了系统能够胜任更多年级学生的教学工作。运算模块又分为加、减、乘、除,四则运算五个子模块,前四个模块用于设定单一运算模式。例如:教师当前需要进行乘法教学了,就可以设定乘法运算模式,系统就处于乘法模式当中,那么在之后随机出题模块中就只会产生乘法试题。第五个子模块四则运算模块主要用于学生日常四则运算测试练习使用,设定该模块后,系统进入四则运算模式,那么随机产生的试题就会包含加、减、乘,除各种运算了。选题模块用于自动产生不同运算模式的试题,用于教学或学生练习测试使用。测评模块可以对学生输入的答题结果进行判断,并显示判断结果。系统的体系结构如图2所示。

图2 JAVA四则运算教学系统的体系结构

3.2 系统设计思路

系统的设计开发基于MVC模式,该系统设计3个类,其中Teacher对象充当监视器,负责给出运算题目,并判断回答者的答案是否正确;Computer⁃Demo对象负责为运算题目提供视图,例如用户可以通过ComputerDemo对象提供的GUI界面看到题目,并通过该GUI界面显示题目的判定结果;Main_C是系统的主类负责系统的运行。

Step1:使用 JFrame、JMenuBar、JMenu、JMenu⁃Item、JLabel、JTextField、JButton、FlowLayout、Con⁃tainer等类设计GUI界面。该GUI中包含有9个事件源组件,其中2个年级菜单项组件;5个表示加、减、乘、除以及四则运算模式的菜单项组件;用于随机出题的选题按钮组件;进行智能测评的查看答案按钮组件。

Step2:调用 addActionListener(new Teacher())方法为这些JMenuItem对象、JButton对象注册监听器。

Step3:在Teacher类中通过重写ActionListener接口中 actionPerformed(ActionEvent e)方法,对事件源对象产生的ActionEvent事件进行处理。因为系统中存在触发同一事件的多个事件源,所以当它们触发事件时,在 actionPerformed(ActionEvent e)方法中处理代码也不相同。当菜单项“三年级”或“四年级”触发ActionEvent事件时,处理该事件的代码用于设定试题难度系数(maxCount),maxCount是Teacher的类成员变量,在Teacher类定义setMax⁃Count方法为maxCount赋值,该方法定义如下:

public void setMaxCount(int num){

maxCount=num;}

maxCount大小由num来确定,当菜单项选中“三年级”或“四年级”时就可以调用setMax(num)方法来设定不同的试题难度系数。Teacher类还定义了public void setLeap(String str)方法用于当加、减、乘、除、四则运算菜单项触发ActionEvent事件时,设置计算模式变量temp。

Step4:在Teacher类中定义public void createR⁃andom(String s)方法,该方法满足以下功能:

1)产生两个用于计算的操作数,并将其显示在对应的文本框中;

2)获取计算模式变量temp,并将其显示在对应的标签中;

3)激活智能测评按钮,为下一步测评解答结果作好准备;

4)调用pack()方法,是窗口能够自适应调节大小。

Step5:对解题结果进行智能测评。点击“查看答案”按钮组件可以对学生输入的答案进行对错判断,并显示判断结果。在Step4呈现出来的2个操作数、运算符,被放置在2个JTextField和1个JLa⁃bel组件上,学生将此试题的答案输入到第3个JTextField组件中。利用智能测评功能模块,可以方便快捷地获取JTextField组件中操作数与JLabel中的运算符。接着对运算符进行判断,并按判断结果进行相应的算数运算,最后将运算结果与学生输入的答案进行验证,显示验证结果。

4 系统实现

4.1 加法运算子系统的实现

该子系统实现了教学年级设定、加法运算选择、随机出题以及对输入的结果进行正无误评判等功能。该系统实现效果如图3所示。

图3 加法运算子系统

该子系统运行时,首先选择年级模式,设定教学年级,如果未设定教学年级,那么运算模式、选题、查看答案等对象均处于未激活状态;接着选择运算模式,这时选题按钮处于激活状态,查看答案按钮仍处于未激活状态;接下来选择选课按钮,产生加法运算习题,查看答案按钮由未激活变为激活状态;最后输入计算结果,点击查看答案按钮可以对计算结果进行正误判断。该加法运算子系统执行流程如图4所示。其它运算子系统的执行流程与此类似。

图4 加法运算子系统执行流程

在加法的计算表达式中,需要呈现出来的有操作数、加法运算符以及计算结果,其中操作数和加法运算符由系统中选题模块来随机生成,计算结果需要首先存储下来,以便与学生输入的题目解答结果进行测评。

在系统中,通过“选择年级”来设定教学的难度系数。将int型难度系数变量maxCount通过set⁃MaxCount方法设定难度值,然后选定“加法运算”菜单项,该菜单项触发ActionEvent事件,将“+”运算符存储在字符串变量temp中,并激活选题按钮为下一步生成加法运算练习题作好准备。其设计代码如下:

public void setLeap(String s){

temp=s;

bt1.setEnabled(false);

bt2.setEnabled(true);//激活选题按钮}

接下来通过单击“选题”按钮来随机生成加法运算习题。该运算习题生成步骤如下:

Step1:使用new Random()生成随机类对象r,r调用nextInt(int x)方法来随机生成操作数,该操作数取值范围由难度系数maxCount决定。难度系数越大,操作数取值范围越大,生成的加法运算题也越难。

Step2:定义 createRandom(String s)方法来生成操作数和运算符,将操作数放进文本框对象text1、text2中,将运算符放进标签对象lab1中。字符串s表示运算符。该代码定义如下:

public void createRandom(String s){

int i=r.nextInt(maxCount)+1;

int j=r.nextInt(maxCount)+1;

text1.setText(String.valueOf(i));

text2.setText(String.valueOf(j));

lab1.setText(s);

bt1.setEnabled(true);

text3.setText(null);

pack();}

Step3:单击“选题”按钮触发ActionEvent事件,调用createRandom方法将temp存储的运算符传递给s。代码如下:

else if(e.getSource()==bt2){//bt2表示选题按钮

if(temp.equals(“+”)){

createRandom(temp);}

最后进行结果判定,该过程由“查看答案”按钮bt1触发ActionEvent事件,该事件处理将对两个操作数求和与学生输入的结果进行比较,如结果相等则给出正确结果,相反给出错误结果。设计代码如下:

else if(e.getSource()==bt1){

String s=lab1.getText();

if(s.equals(“+”)){

int i=Integer.parseInt(text1.getText())+Inte⁃ger.parseInt(text2.getText());

if(String.valueOf(i).equals(text3.getText())){

lab3.setText(“恭喜!答对了!”);

pack();}

else{lab3.setText(“抱歉!答错了,再想想!”);

pack();}}

至此,加法测试子系统设计完成,下面对加法测试子系统进行测试。在菜单中分别设定“四年级”和“+”菜单项后,用鼠标单击“选题”按钮,系统会自动产生一个100以内的加法运算习题。当交互输入一个计算结果后,单击“查看答案”按钮,系统会根据所填答案,自动地给出正确或错误的评判结果,并显示在lab3中。如图5所示。

图5 加法运算子系统运行效果

4.2 其它子系统的实现

减法运算子系统的设计与加法基本一致,系统里包含三个文本框对象分别为text1、text2和text3,它们分别用来存放被减数、减数和输入结果。因为小学数学还没有学习到负数,所以在随机产生操作数时,要确保大的操作数作被减数。因此,减法运算初始化时,可以使用if判定语句比较操作数i和j的大小,然后将大的操作数放入text1中。其设计代码如下:

int i=r.nextInt(maxCount)+1;

int j=r.nextInt(maxCount)+1;f

(s.equals(“-”)&&i<j){//s表示运算符

text1.setText(String.valueOf(j));

text2.setText(String.valueOf(i));}

lab1.setText(s);

bt1.setEnabled(true);

text3.setText(null);

pack();

类似地,可实现乘法运算和除法运算子系统。需要注意的是除法运算的答案可能存在余数,所以在text3中输入结果时应在商后带上余数,例如:5…2这种形式的结果。这样才能判定出除法答案的正确性。其设计代码如下:

else if(s.equals(“/”)){

int l=Integer.parseInt(text1.getText

())%Integer.parseInt(text2.getText());

int i1=Integer.parseInt(text1.getText

())/Integer.parseInt(text2.getText());

if(l!=0){

if(((new StringBuilder()).append

(i1).append(“...”).append(l).toString()).equals

(text3.getText()))

{lab3.setText(“恭喜!答对了!”);

pack();}else

{lab3.setText(“抱歉!答错了,再想想!”);

pack();}

}}

运行结果如图6所示。

图6 带余数除法运算解答、与判定

四则运算子系统主要用于学生课下自测练习使用,该系统能够通过“选题”按钮随机生成加、减、乘、除四种运算类型的习题,能较为全面地帮助学生牢固掌握加、减、乘、除四则运算法则。系统首先使用Math.random()方法产生[0,1)内的实数d,接着,根据d取值来确定运算符s1是哪种类型的运算符,最后调用createRandom(String s)方法将随机产生的运算符传递给参数s。代码如下:

double d=Math.random();

String s1=“”;

if(d>=0.75D){

s1=“+”;}

else if(d>=0.5D&&d<0.75D){

s1=“-”;}

else if(d>=0.25D&&d<0.5D){

s 1=“*”;}

else{s1=“/”;}

createRandom(s1);

5 系统测试

在小学数学四则运算教学系统测试中,功能测试部分是核心,该部分的测试要完成对系统各模块的验证和检查,主要包含选题、判定等按钮的功能是否正常。以下对系统性能、功能进行测试如表1~2所示。

表1 系统性能测试结果

表2 系统功能测试结果

根据以上的测试结果,并结合多名学生进行的300次以上的反复测试效果,可以证实该系统确实能方便地随机出题,自行评判正误,评判正确率达到100%。

6 结语

基于JAVA SE技术的小学数学四则运算教学系统已真正用于教学实践,受到教师、学生用户的一致好评。因此,该系统符合最初的需求设计。在实际应用中,系统界面友好、操作流程清晰简练,整体运行效果良好,为数学四则运算教学工作带来极大便利。

[1]何克抗,李文光.教育技术学[M].北京:北京师范大学出版社,2009:81-126.HE Kekang,LI Wenguang.Educational technology[M].Beijing:Beijing Normal University Press,2009:81-126.

[2]采明才.游戏化教学模式在小学数学教学中的应用分析[J].吉林教育,2010(12):92-94.CAI Mingcai.Analysis of the application of gamification based teaching model in primary school mathematics teaching[J].Jilin education,2010(12):92-94.

[3]耿祥义,张跃平.Java程序设计实用教程[M].北京:人民邮电出版社,2015:367-389.GENG Xiangyi,ZHANG Yueping.Java programming prac⁃tical tutorial[M].Beijing:Posts and Telecommunications Press,2015:367-389.

[4]Bruce Eckel.Java编程思想(第4版)[M].北京:机械工业出版社,2007:759-803.Bruce Eckel.Thinking In java(4th edition)[M].Beijing:Machinery Industry Press,2007:759-803.

猜你喜欢
子系统组件选题
不对中转子系统耦合动力学特性研究
无人机智能巡检在光伏电站组件诊断中的应用
Kistler全新的Kitimer2.0系统组件:使安全气囊和安全带测试更加可靠和高效
一种嵌入式软件组件更新方法的研究与实现
本刊诚征“独唱团”选题
通用(OA)办公自动化系统的组件运用
谈诗词的选题
本刊诚征“独唱团”选题
本刊诚征“独唱团”选题
网络空间供应链中入侵检测及防御子系统的投资机制研究