您当前的位置:首页 > 计算机论文>智能科技论文

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

2015-07-08 09:30 来源:学术参考网 作者:未知

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

引言
  在当今飞速发展的信息化社会中,计算机已在各行各业被广泛应用,计算机应用能力已成为现代人必须具备的一种能力,所以各级学校都开设了计算机基础的公共课程。为了加强学生对计算机知识掌握,在日常教学过程中对学生的测试是必不可少的。而对于计算机理论知识,传统的做法是用纸质试卷测试,但教本文由论文联盟http://收集整理师阅卷的工作量较大,为减轻教师的工作量,便用excel vba设计了一个无纸化的计算机理论知识自动抽题、自动阅卷的考试系统。
   1 系统实现的关键技术
   excel是microsoft office 家族成员,它应用非常广泛,具有方便的表格式数据综合管理、强大计算统计分析和图表功能。此外,excel还提供了一种的宏语言visual basic for application(简称vba),它是一种完全面向对象体系结构的编程语言,它又一种寄生于应用程序不能单独存在的编程语言。由于其在开发方面的易用性和强大的功能,为广大用户提供了一个新的、更高层次的二次开发平台,它不但可以设计出个性化的程序,也可以使程序具有自动功能,减少大量重复繁琐的操作,提高工作效率。
   2 系统的实现
   2.1 系统功能模块
   该系统主要有4个功能模块:
  (1)登录模块。学生和教师分别不同身份登录。学生只能进入考试界面,教师可以取得全部权限,可以查看评分情况,并可以修改题库内容和学生信息和基本设置。wwW.133229.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

转贴于论文联盟 http://www.ybask.com

   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 < 3 and r > r1) then 
   msgbox "此处不能选择!"
   application.enableevents = false: range("b4").select
   application.enableevents = true : exit sub 转贴于论文联盟 http://www.ybask.com

   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 结束语
   本系统可作为教师日常课堂单元测验所用,大大减轻了教师批改试卷的工作量,只要打开系统,以教师身份登录,即可看到学生所考的成绩。也可以稍加改进作为学生平时练习自测用,及时让学生自己得到答案及评分,便于学生巩固、加强所学知识。转贴于论文联盟 http://www.ybask.com
相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页