欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科普文章

基于Excel VBA的计算机理论知识无纸化考试系统设计

科普小知识2022-09-16 10:25:46
...

基于excel vba的计算机理论知识无纸化考试系统设计

引言

在当今飞速发展的信息化社会中,计算机已在各行各业被广泛应用,计算机应用能力已成为现代人必须具备的一种能力,所以各级学校都开设了计算机基础的公共课程。为了加强学生对计算机知识掌握,在日常教学过程中对学生的测试是必不可少的。而对于计算机理论知识,传统的做法是用纸质试卷测试,但教本文由论文联盟收集整理师阅卷的工作量较大,为减轻教师的工作量,便用excel vba设计了一个无纸化的计算机理论知识自动抽题、自动阅卷的考试系统。

1 系统实现的关键技术

excel是microsoft office 家族成员,它应用非常广泛,具有方便的表格式数据综合管理、强大计算统计分析和图表功能。此外,excel还提供了一种的宏语言visual basic for application(简称vba),它是一种完全面向对象体系结构的编程语言,它又一种寄生于应用程序不能单独存在的编程语言。由于其在开发方面的易用性和强大的功能,为广大用户提供了一个新的、更高层次的二次开发平台,它不但可以设计出个性化的程序,也可以使程序具有自动功能,减少大量重复繁琐的操作,提高工作效率。

2 系统的实现

2.1 系统功能模块

该系统主要有4个功能模块:

(1)登录模块。学生和教师分别不同身份登录。学生只能进入考试界面,教师可以取得全部权限,可以查看评分情况,并可以修改题库内容和学生信息和基本设置。wwW.11665.CoM

(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 (combobox1.text "" and combobox2.text "" and combobox3.text "") then

sheets("评分表").range("g1") = me.combobox1.text

sheets("评分表").range("g2") = me.combobox2.text

sheets("评分表").range("g3") = me.combobox3.text

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(.cells.count), lookin:=xlvalues, _lookat:=xlwhole, searchorder:=xlbyrows, searchdirection:=xlnext, matchcase:=false)

tm = rng.offset(0, 1).value: da1 = rng.offset(1, 1).value:da2 = rng.offset(2, 1).value

da3 = rng.offset(3, 1).value: da4 = rng.offset(4, 1).value

sheets("评分表").cells(i, 3) = rng.offset(0, 4).value

end with

with sheets("测试题").range("b3:b500")

set rng2 = .find(what:=i, after:=.cells(.cells.count), lookin:=xlvalues,_ 

lookat:=xlwhole, searchorder:=xlbyrows, searchdirection:=xlnext, _

matchcase:=false)

rng2.offset(0, 1).value = tm: rng2.offset(1, 1).value = da1: rng2.offset(2, 1).value = da2

rng2.offset(3, 1).value = da3: rng2.offset(4, 1).value = da4

end with

next

msgbox "点击确定后,考试将正式开始!计时50分钟"

‘调用计时模块

call ct

elseif combobox1.text = "" then msgbox "班级不能为空"

elseif combobox2.text = "" then msgbox "学号不能为空"

elseif combobox3.text = "" then msgbox "姓名不能为空"

end if

end sub

2.2.3 倒计时模块设计

为使学生在规定的时间内完成考试,并提示学生考试的剩余时间,系统将在抽题结束后在“测试题”表的状态栏中出现倒计时时间的显示,其语句如下。

public tn '秒

public tnm '剩余时间

sub runtimer()'时间运行

application.ontime now + timevalue("00:00:01"), "js" 

end sub

sub js() '计时

on error resume next

if tn > 0 then

tn = tn - 1

application.statusbar = "正在考试....剩余时间: " & tnm & ":" & tn

else

tn = 60

if tnm > 0 then

if tnm = sheets("学生信息表").range("j3").value then

msgbox "离考试结束还有" & sheets("学生信息表").range("j3").value & "分钟!!!"

end if

thisworkbook.save

tnm = tnm - 1

else

msgbox "考试结束!!" & chr(10)

thisworkbook.save

application.quit

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 = target.row

if (r r1) then 

msgbox "此处不能选择!"

application.enableevents = false: range("b4").select

application.enableevents = true : exit sub

end if

x = r 

if (target.column = 2 and range("a" & r).interior.colorindex = -4142) then

for i = 1 to 10 

x = r - i

if (range("a" & x).interior.colorindex -4142) then exit for 

next

cells(x, 1) = target.value '赋值

elseif (target.column = 1) then 

if (range("a" & r).interior.colorindex = -4142) then 

for i = 1 to 10

x = r - i

if (range("a" & x).interior.colorindex -4142) then exit for 

next

end if

application.enableevents = false: range("a" & x).select: application.enableevents = true 

end if

end sub

学生所选答案将用跨表引用的方法引用到“评分表”b列依次显示,它和“评分表”c列对应的标准答案一一比较进行判分。最后得分显示在“评分表”的g4单元格中。

3 结束语

本系统可作为教师日常课堂单元测验所用,大大减轻了教师批改试卷的工作量,只要打开系统,以教师身份登录,即可看到学生所考的成绩。也可以稍加改进作为学生平时练习自测用,及时让学生自己得到答案及评分,便于学生巩固、加强所学知识。