基于excel vba的计算机理论知识无纸化考试系统设计
引言
在当今飞速发展的信息化社会中,计算机已在各行各业被广泛应用,计算机应用能力已成为现代人必须具备的一种能力,所以各级学校都开设了计算机基础的公共课程。为了加强学生对计算机知识掌握,在日常教学过程中对学生的测试是必不可少的。而对于计算机理论知识,传统的做法是用纸质试卷测试,但教本文由论文联盟http://收集整理师阅卷的工作量较大,为减轻教师的工作量,便用excel vba设计了一个无纸化的计算机理论知识自动抽题、自动阅卷的考试系统。
1 系统实现的关键技术
excel是microsoft office 家族成员,它应用非常广泛,具有方便的表格式数据综合管理、强大计算统计分析和图表功能。此外,excel还提供了一种的宏语言visual basic for application(简称vba),它是一种完全面向对象体系结构的编程语言,它又一种寄生于应用程序不能单独存在的编程语言。由于其在开发方面的易用性和强大的功能,为广大用户提供了一个新的、更高层次的二次开发平台,它不但可以设计出个性化的程序,也可以使程序具有自动功能,减少大量重复繁琐的操作,提高工作效率。
2 系统的实现
2.1 系统功能模块
该系统主要有4个功能模块:
(1)登录模块。学生和教师分别不同身份登录。学生只能进入考试界面,教师可以取得全部权限,可以查看评分情况,并可以修改题库内容和学生信息和基本设置。
(2)自动抽题。该模块从题库中随机抽取规定数量的题传送到“测试题”表中,并将所抽取题目的标准答案传送到评分表。
(3)系统定时。抽题结束后,系统将在考试系统的状态栏中显示倒计时。并在规定的考试时间到达时,系统自动关闭并自动保存学生的所做题目。
(4)自动判分。学生所选择的答案传送到“评分表”中和标准答案对比,自动判断对错并给出分数。
2.2 系统功能的实现
新建一个excel工作薄,本系统共有4个工作表,分别命名为“测试题”、“评分表”、“题库”、“学生信息表”。在“题库”表将所需的题目输入其中,“题库”表的a列每隔4行填充题目序号1、2、3、4……,对应序号这行的b列的单元格输入题干,题干下方4行,每行输入相应的4个备选答案,序号对应的c列输入对应题目的标准答案。
2.2.1 登录模块设计
登录模块设计关键主要考虑系统的安全性,在打开考试系统后,“评分表”、“题库”,“学生信息表”这3个表将会自动隐藏,只有空的“测试题”表出现,而被隐藏的表无法用“窗口”菜单中“取消隐藏命令”显示。同时将会弹出一个“选择登录”的对话框,此对话框分别有学生登录、教师登录和退出3个按钮,学生和教师以不同路径登录系统,取得不同的权限。在此界面下退出必须按“退出”按钮退出,而无法选择标题栏上的红色“关闭”按钮退出。
(1)学生登录界面。在点击“学生登录”按钮后出现“学生登录”对话框,此对话框中的三个组合框中分别是选择相应的班级、学号和姓名(“班级”、“学号”和“姓名”这3个组合框的数据源事先将学生的各种信息输入到“学生信息表”中的a列、c列和d列依次存放)。为了防止学生关闭系统后再次进入系统修改答案,在系统初始化时确定“评分表”中是否有内容,如有学生信息,学生再次登录系统时,“学生登录”对话框中三个组合框将和“确定”这几个控件将不可用。
(2)老师登录界面。在点击“选择登录”对话框中的“教师登录”按钮后将出现“教师登录”对话框,教师需输入密码才能进入系统(在文本框中输入的密码需与“学生信息表”中j1单元格内容一致的即可登录。),进入系统后可以看到“测试题”表和“评分表”(“评分表”从隐藏变为可见),而在“评分表”表中用控件工具箱增加两个按钮。分别是“显示题库”和“显示学生信息表”按钮。用于显示已隐藏的两个表,便于修改表中的信息。
2.2.2 自动抽题模块设计
在点击“学生登录”对话框的“确定”按钮后就会进入考试界面,自动抽题形成试卷,所抽之题的标准答案也将依次赋给“评分表”的c列。同时,“学生登录”组合框中信息将会被赋给“评分表”的g1、g2、g3单元格。其代码如下 :
private sub combton_xs_ok_click()
dim a(100) as integer: dim i as integer: dim rng as range: dim rng2 as range
dim tm as string: dim da1 as string: dim da2 as string: dim da3 as string
dim da4 as string
‘此是将学生所选信息赋给“评分表”中
if ( <> "" and <> "" and <> "") then
sheets("评分表").range("g1") =
sheets("评分表").range("g2") =
sheets("评分表").range("g3") =
unload 学生登录
‘从题库中随机自动抽100道题赋给“测试题”表
for i = 1 to 100
randomize (now): a(i) = int(rnd * 400 + 1)
with sheets("题库").range("a1:a2000")
set rng = .find(what:=a(i), after:=.cells(.), lookin:=xlvalues, _lookat:=xlwhole, searchorder:=xlbyrows, searchdirection:=xlnext, matchcase:=false)
tm = (0, 1).value: da1 = (1, 1).value:da2 = (2, 1).value
da3 = (3, 1).value: da4 = (4, 1).value
sheets("评分表").cells(i, 3) = (0, 4).value
end with
with sheets("测试题").range("b3:b500")
set rng2 = .find(what:=i, after:=.cells(.), lookin:=xlvalues,_
lookat:=xlwhole, searchorder:=xlbyrows, searchdirection:=xlnext, _
matchcase:=false)
(0, 1).value = tm: (1, 1).value = da1: (2, 1).value = da2
(3, 1).value = da3: (4, 1).value = da4
end with
next
msgbox "点击确定后,考试将正式开始!计时50分钟"
‘调用计时模块
call ct
elseif = "" then msgbox "班级不能为空"
elseif = "" then msgbox "学号不能为空"
elseif = "" then msgbox "姓名不能为空"
end if
end sub
2.2.3 倒计时模块设计
为使学生在规定的时间内完成考试,并提示学生考试的剩余时间,系统将在抽题结束后在“测试题”表的状态栏中出现倒计时时间的显示,其语句如下。
public tn '秒
public tnm '剩余时间
sub runtimer()'时间运行
now + timevalue("00:00:01"), "js"
end sub
sub js() '计时
on error resume next
if tn > 0 then
tn = tn - 1
bar = "正在考试....剩余时间: " & tnm & ":" & tn
else
tn = 60
if tnm > 0 then
if tnm = sheets("学生信息表").range("j3").value then
msgbox "离考试结束还有" & sheets("学生信息表").range("j3").value & "分钟!!!"
end if
tnm = tnm - 1
else
msgbox "考试结束!!" & chr(10)
end
end if
end if
sheets("学生信息表").range("j4").value = tnm
call runtimer
end sub
sub ct() '设置初值
tnm = sheets("学生信息表").range("j2").value - 1 '
tn = 60 '
call runtimer '时间运行
end sub
2.2.4 自动判分模块设计
“测试题”表事先设置好预定的格式,b列为题号和备选答案的标号a、b、c、d。c列为题干和备选答案区。学生在选定b列中每题的备选答案前有字母的单元格时,在a列的题号前有填充色单元格就会显示学生所选答案(如需改变答案则只重新选中的备选答案前的字母,在答案区显示新选答案),如图1所示。
private sub worksheet_selectionchange(byval target as range)
r =
if (r < 3 and r > r1) then
msgbox "此处不能选择!"
events = false: range("b4").select
events = true : exit sub 转贴于论文联盟
end if
x = r
if ( = 2 and range("a" & r).ndex = -4142) then
for i = 1 to 10
x = r - i
if (range("a" & x).ndex <> -4142) then exit for
next
cells(x, 1) = '赋值
elseif ( = 1) then
if (range("a" & r).ndex = -4142) then
for i = 1 to 10
x = r - i
if (range("a" & x).ndex <> -4142) then exit for
next
end if
events = false: range("a" & x).select: events = true
end if
end sub
学生所选答案将用跨表引用的方法引用到“评分表”b列依次显示,它和“评分表”c列对应的标准答案一一比较进行判分。最后得分显示在“评分表”的g4单元格中。
3 结束语
本系统可作为教师日常课堂单元测验所用,大大减轻了教师批改试卷的工作量,只要打开系统,以教师身份登录,即可看到学生所考的成绩。也可以稍加改进作为学生平时练习自测用,及时让学生自己得到答案及评分,便于学生巩固、加强所学知识。转贴于论文联盟
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。 返回通信学论文列表