
ISSN 1 009—3044 ’
Compu ̄rKnowledge andTechnology电脑知识与技术
Vo1.6,No.5,February 2010,PP.1118-1120,1125
E—mail:xsjl@cccc.net.cn
http://www.dnzs.net.en
Te1:+86—55 l一5690963 5690964
Windows环境下利用VFP编程实现带背景音乐的无纸化考试系统
夏建华 、
(浙江省绍兴县职业教育中心,浙江绍兴312030)
摘要:该文给出了一种在Windows环境下利用Visual Foxpro编制无纸化考试系统的实现方案,同时介绍了利用系统的一个动态链
接库Foxtools.fll巧妙地为系统添加背景音乐的技巧,一改以往使用0LE控件嵌套的繁琐方法,效果更好,占用资源更少。
关键词:背景音乐;动态链接库;数据库;控件;表单;Visual FoxPro(VFP)
中图分类号:TP311 文献标识码:A 文章编号:1009—3044(2010)05—1118—03
Use VFP Programming to Implementation a N0npaperlized System with Background Music Based on Windows Operating System
XIA Jian—hua
(Shaoxing county vocational education center,Shaoxing 312030,China)
Abstract:This article presents a Windows environment using Visual FoxPro compilation of the nonpaperlized system of implementation,at
the same time describes the use of a dynamic—link library Foxtools.fll neady to add background music and desist using the 0LE controls
nested cumbersome method will work better,less resource—intensive.
Key words:background music;Dynamic—hnk library;Datebase;Control;Form;Visual Foxpro(vFP)
当今世界最先进、最省事的考试方法莫过于无纸化考试方式,即利用微机进行自动化出题、改卷、统计分数等代替手工操作的
考试方式.现已广泛应用于如机动车驾驶员理论科目考试等场合。微机无纸化考试系统的应用使得各类考试逐渐趋向规范化和标
准化,而在各类标准化考试中选择题、是非判断等客观题所占的比例越来越大,本文就以单项选择、多项选择和是非判断题为例粗
浅地探讨一下怎样利用数据库技术完成题目的生成、显示、操作和计分方法,以求抛砖引玉,同时希望能对利用Visval Foxpro进行
这方面编程开发的朋友有一定帮助。
关于无纸化考试的微机实现,是探讨得比较多的一个话题,以前曾有一少作者提出过见仁见智的方案.然而大都是建立在DOS
这个早期操作系统环境下的,且离不开UCDOS汉字系统,这种利用Foxbase或F0xPro编写出来的程序不但代码冗长、界面粗糙,而
且操作不方便。而今在Windows环境下,利用功能强大的面向对象开发工具如Visual FoxPro可以十分方便地开发出界面美观、操作
方便的考试系统。并且我们还可以利用VFP的动态链接库foxtoo]S.fll给系统加上美妙的背景音乐。
1背景音乐的实现
在利用Visual Foxpro编制应用程序时,如果能给应用程序添加背景音乐,无疑是件锦上添花的事,背景音乐能给应用程序增色
不少。不般的方法是利用OLE(对象嵌入与链接)进行嵌套。具体方法是选择“表单控件”上的“OLE容器控件”,将其拖到表单上,再
在“插入对象(Insert Object)”窗口中选择“媒体剪辑”,调用“媒体播放机”,利用它来播放出音乐,同时把播放任务条隐藏起来。利用
这种方法要占用大量系统资源,且要利用到外部程序“媒体播放机”,不是一个好方法。其实我们可以利用VFP的动态链接库fox.
tools.fll来轻松实现背景音乐,而且极少占用系统资源。foxtools.fll位于VFP的安装目录中,默认安装时可以在C:Wrogram Files\VFP5
目录下找到它,你可以把它单独拷贝到你的考试系统项目的主目录内,这里我们假定C:\Quiz为我们考试系统的主目录,把foxtools.
玎l拷贝到其内。接着要准备一WAV格式的背景音乐文件(这里以back.wav这例),放于主目录C:\Quiz中;现在我们可以为系统添加
背景了,在考试系统项目的第一个表单(这里为Form1)的Activate事件中加入如下代码:
public sound
set defa to C:\Quiz
set Library to foxtools.fll &&指定FoxPro动态链接库
sound=regfn(”SndplaySound”,”CI Vl I TItl,IIMmsystem”)
=callfn(sound.”back.way”,11 &&播放背景音乐back.wav
为了在表单释放时关闭音乐,同时在LostFocus事件中加入代码:
=Callfn(sound,””,0)
set library to
同理你可以为系统内的任一个表单添加不同的背景音乐,方法是在表单的Activate和LostFocus事件中分别加入以上的代码,
如果指定音乐文件back.wav为其它wav,则可以播放出不同的背景音乐了。
2考试系统韵前期准备——数据库准备
系统中要建立两类数据库:考生名册库与题库。每个考试班级应建立单独的考生名册数据库,注意它在Visual foxPro中称为表,
即DBF文件。接着把考生班级放在登录界面的下拉列表框中供考生选择。这里建立三个样例班级考生名册表:97建经.DBF、97水
收稿日期:2010—01—03
作者简介:夏建华,浙江省绍兴县职业教育中心计算机讲师,中学一级教师,中国计算机用户协会多媒体分会会员,中国管理科学研
究院学术委员会特约研究员,从事计算机网络、数据库、电子商务方面的教学和研究工作。
1118 软件设计开发* * 本栏目责任编辑:谢媛媛
第6卷第5期(2010年2月)
电.DBF和97计中.DBF,每班人数不限,库结构如下表所示
Computer Knowledge and Technology电脑知识与技术
接着建立题库,本无纸化考试系统包括三种题型:单项选择题、多项选择题、是非判断题,故系统应包括这三个测试模块,三种
题型的数据库结构如下:
多项选择.dbf
段
趣
选A
选B
选Il
选I
笄集
州
炎型 瘫段
‘ 绮 252
字箭 126
宁符, 126
7-祷 126
1 26
字荷 1
逻 ■ l
建立完了数据库后,输入班级学生名册和各类题目,准备工作即告结束。这里以20个单项选择题(每题2分)、10个多项选择题
(每题4分)、10个是非判断题(每题2分)为例进行考试,当然你也可以改变各类题目数量,但评分标准亦要进行相应改变。
3总体设计
首先要确定设计目标:系统能实现考生登录、题目读取、答题、成绩统计和显示等。
其中单项选择和多项选择同属于选择题型,但因多项选择有多个正确答案,所以在设计上应有所区别,刚好在Visual FoxPro中
有单选框与复选框等控件与之相对应。
各模块功能如下:
1)登录模块:考生登录功能;选择班级、输入学号后,系统打开考生名册库,把指针定位到与输入学号相符的考生记录,同时显
示该考生的姓名供考生核对,无误后随即进入测试模块。
2)测试模块:分为“单项选择”、“多项选择”、和“是非判断”三个标准模块。每个模块界面大同小异,有“上一题”、“下一题”等按
钮.同时显示题目总数和剩余量。
3)成绩模块:成绩的统计与显示功能。考生一旦登录系统,首先初化成绩(Scores)为0,随后每做一题即自动累加计分,待到考生
按下“交卷”按钮后,弹出一个 示该考生成绩的表单窗口,然后退出系统,考试即告完成。
4源代码举例
4.1 Form“考生登录”(Activate事件)代码
SETEXACT 0N
set defa to sys(5)+”\quiz”
modi window screen title”绍兴工业学校计算机考试系统”
zoom window screen max &&使运行窗口最大化
SET SYSMENU OFF &&关闭窗口内的系统菜单
set path to sys(2004)
public scores &&定义一个存放考生成绩的公用变量scores
scores:O
thisforin.text2.SetFocus &&把光标定位到输入学号文本框
4.2登录模块窗口中,输入学号显示考生姓名,核对无误,按“正确无误”按钮进入测试模块
对此按钮设置代码如下:
Button“正确无误”(Click事件1代码
XH=thisform,text2.value ’
BJ=thisform.Combo 1.value
select 1 ‘
use\quiz\data\&BJ
select 2
nse\quiz\data\单项选择
select 4
use\quiz\data\多项选择
select 6
use\quiz\data\是非判断
if XH!=0
select 1
locate all for学号=XH
iffound0
thisforin.text4.value=姓名
成绩=scores
本栏目责任编辑:谢媛媛
&&打开选中的班级名册库
&&打开“单项选择”题库
&&打开“多项选择”题库
&&打开“是非判断”题库
&&如果学号不空
&&把指针定位到与输入学号相符的考生记录
&&显示考生姓名以便核对
; 软件设计开发 1119
丽 一~ 逻逻是 删
匝宽 一社 一一~~一一~~~ 单一=}一
ComputerKnowledgeand T
.
echnology电脑知识与技术
wait””
release thisform
doform\quizkforms\单项选择 &&打开“单项选择”模块窗口
else
messagebox(”没有找到你的名字,请重新输入学号”)
thisform.text4.value=”没有相应姓名”
endif
else
thisform.text4.value=”查无此人”
endif
4.3 Form“单项选择”(Activate事件)代码
public Bum
select 2
count all to Bum
replace all对错with.F.
gotop
thisform.text1.value=题目
&&定义一个存放题目数量的公用变量num
this.optiongroup1.option1.caption=”A、”+选a
this.optiongroup1.option2.caption=”B、”+选b
this.optiongroup1.option3.caption=”C、”+选C
this.optiongroup1.option4.caption=”D、”+选d
this.1abel1.caption=str(num)
thisform.1abel2.caption=str(1)
&&读取单项选择题目
&&读取选项A.以此类推
&&显示单项选择题目总数
&&显示当前为第1题
4.4各模块中的“下一题”按钮不但能更新题目。同时具有分数累加功能
其源代码如下:
¥ ¥女 Bunon“下一题”(Click事件)代码料料% }{
if recno0<=num &&如果库指针没有到达最尾
if thisform.optiongroup1.value=答案 &&如果考生答案与标准答案相同
replace对错with.T.
else
replace对错w .F.
endif
thisform.1abel2.caption=str(recno0+1)
skip &&题库中指针下移
thisform.tabel7.caption=…’
thisform.1abel8.visible=.f.
thisforiB.text2.visible=王
thisforil1.text1.value=题目 &&显示下~个题目内容
thisform.optiongroup1.option1.caption=”A、”+选a
thisform.optiongroup1.option2.caption=”B、”+选b
thisform.optiongroupI.option3.caption=”C、”+选C
thisform.optiongroup1.option4.caption=”D tt+选d
thisform.optiongroup1.value=0
e】se
select 2
count for对错=.T.to SCO
scores=sco*2
select 1
&&分数统计。统计答对的题目数量
&&单项选择每题2分,故要}2
replace成绩with scores &&把单项选择模块的得分记入考生成绩字段
messagebox(”单项选择已做完,下面进入多项选择!”)
doform\quizkforms\多选
thisform.hide
endif
4.5为了使考生能修改前面做过的题目。设置“上一题”按钮
其源代码如下:
料料¥料Butt0n“上一题”(Click事件)代码木牟 料
if!bofn &&如果库指针没有达到首记录
skip一1 &&题库中指针向上移一个记录
this'form.1abel2.caption=str(recnoO1
thisform.text1.value=题目 &&以下显示上一个题目内容
thisform.optiongroup1.option1.caption=”A、”+选a
1120 t 软件坦ttR发 t e,,
第6卷第5期(2010年2月)
(下转第1125页)
本拦目责任编辑:谢媛媛
第6卷第5期(2010年2月) ComputerKnowledge and Technology电脑知识与技术
throw new DepartmentException o;
}else{
System.out.println(”雇员编号是:”+empId);
System.out.prinfln(”雇员姓名是:”+empName);
System.out.println(”部门编号是:”+deptId);
) )catch(DepanmentException de){
System.out.println(”数据无效”1:
}catch(NumberFormatException ne){
System.out.println(”数据错误”);
}catch(ArrayIndexOutOfBoundsException ae){
System.out.print/n(”数据不完整”);}j
l
程序运行时,有这样几种可能:
1)输入雇员编号、雇员姓名和部门编号分别为“1”、“Tom”和“6”时,因部门编号超过5,产生DepartmentExeeption异常,显示“此
部门不存在!!!数据无效”。
2)输入雇员编号、雇员姓名和部门编号分别为…a’、“Tom”和“6”时,因雇员编号不为整数。产生NumberFormatException异常,显
示“数据错误”。 ,
3)输入一个雇员编号“1”,因缺少雇员姓名和部门编号,产生ArraylndexOutOfBoundsException异常,显示“数据不完整”。
4)输入雇员编号、雇员姓名和部门编号分别为“1”、“Tom”和…4’时,无异常产生,显示雇员详情。
异常处理机制是保证Java程序正常运行、具有较高安全性的重要手段。善于在应用程序中使用异常,编写用户自定义异常,可
以提高应用程序的交互性,增加应用程序的灵活性。正确使用用户自定义异常,对于开发良好的Java程序 ,能够起到重要的作用。
参考文献:
【1】北京阿博泰克北大青鸟信息技术有限公司.Java面向对象程序设计【M].北京:科学技术文献出版社,2005.
【2】迟丽华.Java程序设计教程【M].北京:清华大学出版社,2008.
【3】贾振华.Java语言程序设计[M】.北京:中国水利水电出版社,2004.
(上接第1120页)
thisform.optiongroup1.option2.caption=”B、”+选b
thisform.optiongroup1.option3.caption=”C、”+选C
thisform.optiongroup1.option4.caption=”D、”+选d
thisforil1.1abel8.visible=工
thisform.1abel7.caption=’”’
thisforib.text2.value=…’
else
messagebox(”已到单项选择题之首!”1
endif
4.6当考生做完了三种类型的题目后,就可以交卷了。故设置一个“交卷”按钮
代码如下:
¥ 料料 Button“交卷”(Click事件)代码 { {¥
yn=messagebox(”确定要交卷吗?”,4)
select 6
count for对错:.T.to sco3
ifyn=6
select 1
&&如果按下“是”按钮
replace成绩with成绩+sco3"2 &&统计分数并记人考生成绩字段
endif
misform.command1.enabled=.F. &&屏蔽“下一题”按钮
do form\quizkforms\成绩单 &&打开“成绩单”表单窗口,显示考生成绩
4.7为了显示考生成绩。单独设计一个“成绩单”表单
设计代码如下:
料料 Fo瑚“成绩单”(Activate事件)代码
select 1 &&打开考生名册库
 ̄isform.1abel4.caption=姓名+”:” &&显示当前考生姓名
thisform.1abel1.c印ti0n=al1trim(str(成绩)) &&显示考生最终成绩
以上程序在中文Windows XP环境,Microsoft Visual Foxpro 6.0中文版下调试通过。
参考文献:
【1]木林森,高峰.中文Visual FoxPro 6.0使用与开发【M】.北京:清华大学出版社,2006.
本栏目责任编辑:谢媛媛
本文发布于:2023-03-12 23:21:26,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167863448626894.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:vfp编程.doc
本文 PDF 下载地址:vfp编程.pdf
| 留言与评论(共有 0 条评论) |