随机抽题制作步骤
- 格式:doc
- 大小:221.00 KB
- 文档页数:5
PPT轻松实现随机抽题设计抽题界面打开PPT2010,将演示文稿保存成启用宏的PPT演示文稿格式(即.pptm格式,包含宏代码的演示文稿,必须保存成这种格式),在第一张幻灯片中设计抽题界面,先插入三个文本框,写上必要的文字,再通过“开发工具”选项卡,插入三个命令按钮控件,在这些控件上右击,选择“属性”命令,打开它们的“属性”对话框,在“名称”后将命令按钮名称分别修改为:开始、停止和打开抽取的题目,再在Caption后填写按钮上显示的名称(可随意大写,我这儿设置的与按钮名称相同),并对字体、字号、背景颜色、样式等进行设置。
再插入三个文本框控件,同样在“属性”对话框中,修改它们的名称为:抽取框、结果框和已抽题目。
把“抽取框”放到“开始”和“停止”命令按钮控件之间,把“结果框”放到“您抽取的是号题”文本中,将“已抽题目”拖至适合大小,放置到下面(图1)。
接着新建一张幻灯片,设计好被抽题目放置界面,并在其上设计一个返回到抽题界面幻灯片的链接。
将该幻灯片复制多份,将相应题目录入相应各幻灯片上,第二张幻灯片放第一道题目,第三张幻灯片放第二道题目,依次类推。
编写宏代码接下来,按ALT+F11组合键,打开VBA宏编辑窗口,双击左侧的“Slide1”,将以下代码复制到右窗格中并保存。
Private Sub 开始_Click()停止.Enabled = True '停止按钮当前有效Dim a As IntegerRandomizeDoa = Fix(Rnd * 10 + 1) '使用随机函数抽取框.Text = a结果框.Text = ""DoEventsLoopEnd SubPrivate Sub 停止_Click()结果框.Text = 抽取框.Text已抽题目= 已抽题目+ 抽取框+ " # " '题目标记用#分隔停止.Enabled = FalseEndEnd SubPrivate Sub 打开抽取的题目_Click()ActivePresentation.SlideShowWindow_.View.GotoSlide Val(抽取框.Text + 1)End Sub随机抽取题目并打开到抽取题目时,放映幻灯片,点击第一张的“开始”按钮,此时其后的文本框中就随机快速滚动显示1到10这十个数字,点击“停止”按钮后,数字停止滚动,并显示出抽取的题号,同时在上方给出“您抽取的是X号题”提示,在下方“已抽题目”中显示出所有抽过的题目标号。
随机抽题算法0 引言随机抽题是在线考试系统中的核心部分,目前大部分的在线考试系统或无纸化考试系统大都采用了随机函数实现随机抽题,但大部分在线考试系统在随机抽题时存在抽题速度慢、试题覆盖面不稳定、重点不突出、灵活性差等问题。
本文讨论了优化随机抽题的方法,给出了具体的抽题公式和查询语句。
1 优化使用随机函数方法研究原始在线考试系统中,使用随机函数从题库中抽取试题,抽题公式为Int(Rnd*M)公式1。
在抽取第一题时,直接将题号存放在指定的空数组中,表示抽取成功,以后每抽取一题,将题号和数组中已存在元素进行比较,若存在则抽取失败,若不存在则抽取成功,并将题号依次存储在该数组中,直到抽取结束。
这种抽题方法的缺陷是时间浪费。
这种时间浪费在单机的时候并不明显,但在B/S模式或C/S模式下,机器越多速度越慢。
为了解决重复抽题,避免试题抽取过慢,可采用分段法、分类法和分类分段结合法。
1.1分段法分段法是解决重复抽题最简单的方法,其原理是将题库中的试题M分成N段,然后从每段中抽取一题,抽取公式为Int(Rnd*(M\N))+i*(M\N)(0≤i≤N-1)公式2。
分段法的优点显而易见,可以完全杜绝试题重复抽取,但对题库中试题的数量有要求,即M>2N,且题库越大、试题数量越多,抽取效果就越好。
在公式2中将M等分成N段,M并不一定能被N整除,也就是说采用公式2试题库最后M MOD N条试题永远不会被抽取,为了解决这个问题,可将公式2进行改进,设L=M MOD N,则抽取公式为Int(Rnd*(M\N+1))+i*(M\N+1)(0≤i≤L-1)公式3和Int(Rnd*(M\N))+i*(M\N)+L(L≤i≤N-1)公式4。
分段法避免了重复抽取,但无法控制试题的覆盖面及难易程度。
1.21.2 分类法分类法是在试题库的结构上添加相应分类字段,字段可以是章节、内容等,将所有试题按章节或内容分类,从每一类中抽取一题,不仅可以解决试题的重复抽取还可以控制试题的覆盖面。
在Word中从Access数据库随机抽取试题制作试卷的方法在Word中,从Access数据库的对应表中,随机抽取试题并制作成一定版面的试卷,我作了一些尝试,试卷要求:生成大题及对应的分值,题目随机抽取,单选、多选答案也要随机变化(其中含有“以上”字样开头的,必须是第三个或者第四个答案),并根据抽取的题目情况,生成对应的参考答案文件(文件是文本文件)。
一、数据库其中blankQt、judgeQt、multiQt、singleQt结构如上,分别装的是填空题、判断题、多选题、单选题内容。
数据可以自己根据需要填写。
二、VBA窗体利用Word自身所带的VBA,制作窗体如下:三、VBA代码1.模块中代码Sub startMacro()optForm.ShowEnd SubSub readTable(ByVal sBT As String, ByVal sST As String, ByVal iST As Integer, ByVal iMT As Integer, ByVal iJT As Integer, ByVal iBT As Integer)Dim tm(3000) As String, bx(3000, 4) As String, da(3000) As String, i As Integer, j As Integer, cnSq As String, tmCnt As IntegerDim subNo() As Integer, xHs() As IntegerDim tmpTm As String, tmpBx As String, tmpDa As String, tABCD As String, tmpZM As String, outDa As String, qtTitle As String, da1 As StringDim conn As ADODB.ConnectionSet conn = New ADODB.ConnectionDim cnSr As StringcnSr = "driver={microsoft access driver (*.mdb, *.accdb)};dbq=" & ThisDocument.Path & "\nopapertest.mdb"conn.Open cnSrDim refDaFile As StringrefDaFile = ThisDocument.Path & "\" & sST & "(参考答案).txt"Open refDaFile For Output As #1Print #1, sBTPrint #1, sST & "(参考答案)" & vbCrLfsetDocTitle sBT, sST '设置标题(一二级)Dim sRs As ADODB.Recordset '对单选题进行处理Set sRs = New ADODB.RecordsetcnSq = "select 题目,备选A,备选B,备选C,备选D,答案from singleQt"sRs.Open cnSq, conni = 0Do While Not sRs.EOFi = i + 1tm(i) = sRs(0)For j = 1 To 4bx(i, j) = sRs(j)Nextda(i) = bx(i, sRs(5) * 1)sRs.MoveNextLooptmCnt = iReDim subNo(iST), xHs(4)Dim ySBx(4) As StringrandArray subNo, iST, tmCntqtTitle = "一、单项选择题(每小题3分,有" & iST & "个小题,共" & 3 * iST & "分)" Selection.TypeText qtTitle & vbCrLfPrint #1, qtTitlePrint #1, "1-5: ";For i = 1 To iST'Selection.TypeText xHs(1) & xHs(2) & xHs(3) & xHs(4) & vbCrLftmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLfySBx(1) = bx(subNo(i), 1)ySBx(2) = bx(subNo(i), 2)ySBx(3) = bx(subNo(i), 3)ySBx(4) = bx(subNo(i), 4)If InStr(ySBx(4), "以上") > 0 And InStr(ySBx(3), "以上") > 0 ThenrandArray xHs, 2, 2xHs(3) = 3: xHs(4) = 4ElseIf InStr(ySBx(4), "以上") > 0 ThenrandArray xHs, 3, 3xHs(4) = 4ElserandArray xHs, 4, 4End IfFor j = 1 To 4tmpBx = ySBx(xHs(j))If j = 1 Then da1 = tmpBxtABCD = Chr(64 + j)Select Case Len(da1)Case Is <= 8If j Mod 4 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase Is <= 16If j Mod 2 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase ElseoutDa = tmpBx & vbCrLfEnd SelectSelection.TypeText tABCD & "." & outDaIf tmpBx = tmpDa Then tmpZM = tABCDNextPrint #1, tmpZM;If i = iST Or i Mod 20 = 0 ThenIf i = iST ThenPrint #1, ""'Print #1, (i \ 5) * 5 + 1 & "-" & iST & ": ";ElsePrint #1, ""Print #1, (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfElseIf i Mod 5 = 0 And i < iST - 5 ThenPrint #1, vbTab & (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfEnd IfNextsRs.CloseSet sRs = NothingDim mRs As ADODB.Recordset '对多选题进行处理Set mRs = New ADODB.RecordsetcnSq = "select 题目,备选A,备选B,备选C,备选D,答案from multiQt"mRs.Open cnSq, conni = 0Do While Not mRs.EOFi = i + 1tm(i) = mRs(0)da(i) = ""For j = 1 To 4bx(i, j) = mRs(j)If Mid(mRs(5), j, 1) = "1" Thenda(i) = da(i) & "[[" & bx(i, j) & "]]"End IfNextmRs.MoveNextLooptmCnt = iReDim subNo(iMT), xHs(4)randArray subNo, iMT, tmCntqtTitle = "二、多项选择题(每小题4分,有" & iMT & "个小题,共" & 4 * iMT & "分)" Selection.TypeText qtTitle & vbCrLfPrint #1, vbCrLf & qtTitleFor i = 1 To iMTrandArray xHs, 4, 4'Selection.TypeText xHs(1) & xHs(2) & xHs(3) & xHs(4) & vbCrLftmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLftmpZM = ""For j = 1 To 4tmpBx = bx(subNo(i), xHs(j))If j = 1 Then da1 = tmpBxtABCD = Chr(64 + j)If InStr(tmpDa, "[[" & tmpBx & "]]") > 0 ThentmpZM = tmpZM & tABCDEnd IfSelect Case Len(da1)Case Is <= 8If j Mod 4 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase Is <= 16If j Mod 2 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase ElseoutDa = tmpBx & vbCrLfEnd SelectSelection.TypeText tABCD & "." & outDaNext'Selection.TypeText tmpZM & ": " & tmpDa & vbCrLfPrint #1, i & "." & tmpZM & vbTab;If i = iMT Or i Mod 10 = 0 Then Print #1, ""NextmRs.CloseSet mRs = NothingDim jRs As ADODB.Recordset '对判断题进行处理Set jRs = New ADODB.RecordsetcnSq = "select 题目,答案from judgeQt"jRs.Open cnSq, conni = 0Do While Not jRs.EOFi = i + 1tm(i) = jRs(0)da(i) = jRs(1)jRs.MoveNextLooptmCnt = iReDim subNo(iJT)Dim k As IntegerrandArray subNo, iJT, tmCntqtTitle = "三、判断题(每小题2分,有" & iJT & "个小题,共" & 2 * iJT & "分)"Selection.TypeText qtTitle & vbCrLfPrint #1, vbCrLf & qtTitlePrint #1, "1-5: ";For i = 1 To iJTtmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLftmpZM = ""If UCase(tmpDa) = "TRUE" Or UCase(tmpDa) = "ON" Or UCase(tmpDa) = "YES" Or tmpDa = "1"ThentmpZM = "A"ElsetmpZM = "B"End IfPrint #1, tmpZM;If i = iJT Or i Mod 20 = 0 ThenIf i = iJT ThenPrint #1, ""'Print #1, (i \ 5) * 5 + 1 & "-" & iJT & ": ";ElsePrint #1, ""Print #1, (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfElseIf i Mod 5 = 0 ThenPrint #1, vbTab & (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfEnd IfNextjRs.CloseSet jRs = NothingDim bRs As ADODB.Recordset '对填空题进行处理cnSq = "select 题目,答案from blankQt"Set bRs = New ADODB.RecordsetbRs.Open cnSq, conni = 0Do While Not bRs.EOFi = i + 1tm(i) = bRs(0)da(i) = bRs(1)bRs.MoveNextLooptmCnt = iReDim subNo(iBT)randArray subNo, iBT, tmCntqtTitle = "四、填空题(每小题3分,有" & iBT & "个小题,共" & 3 * iBT & "分)"Selection.TypeText qtTitle & vbCrLfPrint #1, vbCrLf & vbCrLf & qtTitleFor i = 1 To iBTtmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLfPrint #1, i & "、" & tmpDaNextbRs.CloseSet bRs = Nothingconn.CloseSet conn = NothingClose #1setTabPosition '为整篇文档设置Tab位置End SubPrivate Sub setDocTitle(ByVal bT As String, ByVal sT As String) '设置文档标题与小标题,分别为一级标题和二级标题ActiveWindow.ActivePane.View.Type = wdOutlineViewSelection.Range.Paragraphs.Style = ActiveDocument.Styles(wdStyleHeading1)Selection.TypeText Text:=bTSelection.HomeKey Unit:=wdLine, Extend:=wdExtendSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterSelection.EndKey Unit:=wdLineSelection.TypeParagraphSelection.Range.Paragraphs.Style = ActiveDocument.Styles(wdStyleHeading2)Selection.TypeText Text:=sTSelection.HomeKey Unit:=wdLine, Extend:=wdExtendSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterSelection.EndKey Unit:=wdLineSelection.TypeParagraphSelection.Range.Style = ActiveDocument.Styles(wdStyleNormal)If ActiveWindow.View.SplitSpecial = wdPaneNone ThenActiveWindow.ActivePane.View.Type = wdPrintViewElseActiveWindow.View.Type = wdPrintViewEnd IfEnd SubPublic Sub clearThisDoc(ByVal b As Boolean)'' clearThisDoc Macro' 清除此文档的所有内容'Selection.WholeStorySelection.Delete Unit:=wdCharacter, Count:=1End SubPublic Sub writeToEachXML(ByVal b As Boolean)Dim connStr As String, conn As ADODB.ConnectionconnStr = "driver={microsoft access driver (*.mdb, *.accdb)};dbq=" & ThisDocument.Path & "\nopapertest.mdb"Set conn = New ADODB.Connectionconn.Open connStrDim xmlFirst As StringxmlFirst = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "utf-8" & Chr(34) & "?>"Dim xmlSrcBegin As String, xmlSrcEnd As StringxmlSrcBegin = "<resources>"xmlSrcEnd = "</resources>"Dim xmlArrBegin(5) As StringDim xmlArrEnd As StringxmlArrEnd = "</string-array>"'以下是单项选择题Dim xmlFileName As StringxmlFileName = ThisDocument.Path & "\S\arrays.xml"Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginDim sql As Stringsql = "select 题目,备选A,备选B,备选C,备选D,答案from singleQt"Dim rs2 As ADODB.RecordsetSet rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "singletms"xmlArrBegin(1) = "singlebxas"xmlArrBegin(2) = "singlebxbs"xmlArrBegin(3) = "singlebxcs"xmlArrBegin(4) = "singlebxds"xmlArrBegin(5) = "singledas"Dim i As Integer, tmpC As StringFor i = 0 To 5rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)tmpC = Replace(tmpC, "&", "&")tmpC = Replace(tmpC, "<", "<")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2'以下多项选择题xmlFileName = ThisDocument.Path & "\M\arrays.xml"Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginsql = "select 题目,备选A,备选B,备选C,备选D,答案from multiQt" Set rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "multitms"xmlArrBegin(1) = "multibxas"xmlArrBegin(2) = "multibxbs"xmlArrBegin(3) = "multibxcs"xmlArrBegin(4) = "multibxds"xmlArrBegin(5) = "multidas"For i = 0 To 5rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)tmpC = Replace(tmpC, "&", "&")tmpC = Replace(tmpC, "<", "<")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2'以下判断题xmlFileName = ThisDocument.Path & "\J\arrays.xml" Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginsql = "select 题目,答案from judgeQt"Set rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "judgetms"xmlArrBegin(1) = "judgedas"For i = 0 To 1rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)If i = 1 ThentmpC = IIf(UCase(tmpC) = "TRUE", "1", "2") End IftmpC = Replace(tmpC, "&", "&")tmpC = Replace(tmpC, "<", "<")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2'以下填空题xmlFileName = ThisDocument.Path & "\B\arrays.xml" Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginsql = "select 题目,答案from blankQt"Set rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "blanktms"xmlArrBegin(1) = "blankdas"For i = 0 To 1rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)tmpC = Replace(tmpC, "&", "&")tmpC = Replace(tmpC, "<", "<")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2conn.CloseSet conn = NothingEnd SubPrivate Function arraySign(ByVal arrName As String) As StringarraySign = "<string-array name=" & Chr(34) & arrName & Chr(34) & ">"End FunctionPrivate Sub randArray(ByRef a() As Integer, ByVal xB As Integer, ByVal maxRnd As Integer) Dim tmp As Integer, flag As Boolean, i As Integer, j As Integer ', s As StringRandomize TimerFor i = 1 To xBflag = Truetmp = Int(Rnd * maxRnd + 1)For j = 1 To i - 1If a(j) = tmp Thenflag = FalseExit ForEnd IfNextIf flag = True Thena(i) = tmp's = s & a(i) & ", "Elsei = i - 1End IfNext'MsgBox sEnd SubPrivate Sub setTabPosition()Selection.WholeStorySelection.ParagraphFormat.TabStops.ClearAllActiveDocument.DefaultTabStop = CentimetersToPoints(0.74)Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(3.52) _ , Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpacesSelection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(7.04) _ , Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpacesSelection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(10.56 _ ), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpacesSelection.HomeKey Unit:=wdStoryEnd Sub2.窗体对应代码Const GkSNums As Integer = 41Const GkMNums As Integer = 9Const GkJNums As Integer = 26Const GkBNums As Integer = 17Private Sub cmdClrDoc_Click()clearThisDoc TrueEnd SubPrivate Sub cmdOutToXML_Click()'生成对应的四个XML文件writeToEachXML TrueEnd SubPrivate Sub UserForm_Initialize()chkGk_ClickEnd SubPrivate Sub chkGk_Click()If chkGk.Value = True ThenMe.frmFreeSet.Enabled = False ElseMe.frmFreeSet.Enabled = True End IfEnd SubPrivate Sub chkS_Click()If chkS.Value = True ThentxtS.Enabled = TrueElsetxtS.Enabled = FalseEnd IfEnd SubPrivate Sub chkM_Click()If chkM.Value = True ThentxtM.Enabled = TrueElsetxtM.Enabled = FalseEnd IfEnd SubPrivate Sub chkJ_Click()If chkJ.Value = True ThentxtJ.Enabled = TrueElsetxtJ.Enabled = FalseEnd IfEnd SubPrivate Sub chkB_Click()If chkB.Value = True ThentxtB.Enabled = TrueElsetxtB.Enabled = FalseEnd IfEnd SubPrivate Sub cmdGetQuestions_Click()Dim mainTitle As String, subTitle As StringmainTitle = Trim(Me.txtBigTitle.Text)subTitle = Trim(Me.txtSubTitle.Text)Dim intST As Integer, intMT As Integer, intJT As Integer, intBT As IntegerIf chkGk.Value = True ThenintST = GkSNumsintMT = GkMNumsintJT = GkJNumsintBT = GkBNumsElseIf chkS.Value = True ThenintST = Val(Me.txtS.Text)If intST < 5 Or intST > 100 Then intST = 40ElseintST = 0End IfIf chkM.Value = True ThenintMT = Val(Me.txtM.Text)If intMT < 5 Or intMT > 100 Then intMT = 30ElseintMT = 0End IfIf chkJ.Value = True ThenintJT = Val(Me.txtJ.Text)If intJT < 5 Or intJT > 100 Then intJT = 40ElseintJT = 0End IfIf chkB.Value = True ThenintBT = Val(Me.txtB.Text)If intBT < 5 Or intBT > 100 Then intBT = 30ElseintBT = 0End IfEnd If'MsgBox mainTitle & vbCrLf & subTitle & vbCrLf & intST & vbCrLf & intMT & vbCrLf & intJT & vbCrLf & intBTreadTable mainTitle, subTitle, intST, intMT, intJT, intBTEnd SubPrivate Sub cmdEnd_Click()EndEnd Sub以上代码,由于时间关系,没有作一一注释,请谅。
考试试题随机抽题算法考试试题随机抽题算法在现代教育体系中,考试是一种常见的评估学生学习成果的方式。
而试题的难易程度、内容覆盖范围以及试题数量的合理安排,直接影响到考试的公平性和准确性。
为了确保考试的公正性,许多学校和机构采用了试题随机抽题算法。
试题随机抽题算法的目的是通过随机选择试题,使得每个考生所面对的试题都是从一个试题库中抽取的,以此确保考生之间的公平性。
这种算法的实现方式有多种,下面将介绍其中一种较为常见的试题随机抽题算法。
首先,需要建立一个试题库,其中包含了所有可能出现的试题。
试题库中的试题可以按照不同的知识点、难易程度、类型等进行分类和标记。
试题库的建立需要考虑到学科的特点和教学目标,以便能够全面评估学生的知识水平和能力。
在考试开始前,需要确定考试的试题数量和考试的时间限制。
试题数量的确定需要考虑到考试的目的和学科的特点。
时间限制的设定需要根据试题数量和难易程度来合理分配,以确保考生有足够的时间完成考试。
接下来,根据考试的要求和试题库中的试题分类,确定每个分类下要抽取的试题数量。
这个过程可以根据试题分类的重要性和难易程度来进行权重设置,以确保考试的全面性和准确性。
然后,利用随机数生成器来随机选择试题。
随机数生成器可以根据设定的范围和规则来生成随机数。
在试题抽取过程中,可以根据每个分类下要抽取的试题数量来设定随机数生成的范围,以确保每个分类下的试题都有机会被抽取到。
最后,将抽取到的试题按照一定的顺序组成试卷。
试卷的组成可以按照试题分类、难易程度或者其他规则来进行。
在组卷过程中,需要注意试题的顺序和分布,以确保试卷的整体平衡和合理性。
试题随机抽题算法的实现需要考虑到多个因素,如试题库的建立、试题数量的确定、试题分类的设置、随机数生成的规则以及试卷的组成等。
这些因素的合理安排和权衡可以确保考试的公平性和准确性。
试题随机抽题算法在现代教育中发挥着重要的作用。
它不仅能够提高考试的公平性和准确性,还能够激发学生的学习兴趣和动力。
PPT轻松实现随机抽题设计抽题界面打开PPT2010,将演示文稿保存成启用宏的PPT演示文稿格式(即.pptm格式,包含宏代码的演示文稿,必须保存成这种格式),在第一张幻灯片中设计抽题界面,先插入三个文本框,写上必要的文字,再通过“开发工具”选项卡,插入三个命令按钮控件,在这些控件上右击,选择“属性”命令,打开它们的“属性”对话框,在“名称”后将命令按钮名称分别修改为:开始、停止和打开抽取的题目,再在Caption 后填写按钮上显示的名称(可随意大写,我这儿设置的与按钮名称相同),并对字体、字号、背景颜色、样式等进行设置。
再插入三个文本框控件,同样在“属性”对话框中,修改它们的名称为:抽取框、结果框和已抽题目。
把“抽取框”放到“开始”和“停止”命令按钮控件之间,把“结果框”放到“您抽取的是号题”文本中,将“已抽题目”拖至适合大小,放置到下面(图1)。
接着新建一张幻灯片,设计好被抽题目放置界面,并在其上设计一个返回到抽题界面幻灯片的链接。
将该幻灯片复制多份,将相应题目录入相应各幻灯片上,第二张幻灯片放第一道题目,第三张幻灯片放第二道题目,依次类推。
编写宏代码接下来,按ALT+F11组合键,打开VBA宏编辑窗口,双击左侧的“Slide1”,将以下代码复制到右窗格中并保存。
Private Sub 开始_Click()停止.Enabled = True '停止按钮当前有效Dim a As IntegerRandomizeDoa = Fix(Rnd * 10 + 1) '使用随机函数抽取框.Text = a结果框.Text = ""DoEventsLoopEnd SubPrivate Sub 停止_Click()结果框.Text = 抽取框.Text已抽题目 = 已抽题目 + 抽取框 + " # " '题目标记用#分隔停止.Enabled = FalseEndEnd SubPrivate Sub 打开抽取的题目_Click()ActivePresentation.SlideShowWindow_.View.GotoSlide Val(抽取框.Text + 1)End Sub随机抽取题目并打开到抽取题目时,放映幻灯片,点击第一张的“开始”按钮,此时其后的文本框中就随机快速滚动显示1到10这十个数字,点击“停止”按钮后,数字停止滚动,并显示出抽取的题号,同时在上方给出“您抽取的是X号题”提示,在下方“已抽题目”中显示出所有抽过的题目标号。
PPT轻松实现随机抽题
设计抽题界面
打开PPT2010,将演示文稿保存成启用宏的PPT演示文稿格式(即.pptm格式,包含宏代码的演示文稿,必须保存成这种格式),在第一张幻灯片中设计抽题界面,先插入三个文本框,写上必要的文字,再通过“开发工具”选项卡,插入三个命令按钮控件,在这些控件上右击,选择“属性”命令,打开它们的“属性”对话框,在“名称”后将命令按钮名称分别修改为:开始、停止和打开抽取的题目,再在Caption后填写按钮上显示的名称(可随意大写,我这儿设置的与按钮名称相同),并对字体、字号、背景颜色、样式等进行设置。
再插入三个文本框控件,同样在“属性”对话框中,修改它们的名称为:抽取框、结果框和已抽题目。
把“抽取框”放到“开始”和“停止”命令按钮控件之间,把“结果框”放到“您抽取的是号题”文本中,将“已抽题目”拖至适合大小,放置到下面(图1)。
接着新建一张幻灯片,设计好被抽题目放置界面,并在其上设计一个返回到抽题界面幻灯片的链接。
将该幻灯片复制多份,将相应题目录入相应各幻灯片上,第二张幻灯片放第一道题目,第三张幻灯片放第二道题目,依次类推。
编写宏代码
接下来,按ALT+F11组合键,打开VBA宏编辑窗口,双击左侧的“Slide1”,将以下代码复制到右窗格中并保存。
Private Sub 开始_Click()
停止.Enabled = True '停止按钮当前有效
Dim a As Integer
Randomize
Do
a = Fix(Rnd * 10 + 1) '使用随机函数
抽取框.Text = a
结果框.Text = ""
DoEvents
Loop
End Sub
Private Sub 停止_Click()
结果框.Text = 抽取框.Text
已抽题目 = 已抽题目 + 抽取框 + " # " '题目标记用#分隔
停止.Enabled = False
End
End Sub
Private Sub 打开抽取的题目_Click()
ActivePresentation.SlideShowWindow_
.View.GotoSlide Val(抽取框.Text + 1)
End Sub
随机抽取题目并打开
到抽取题目时,放映幻灯片,点击第一张的“开始”按钮,此时其后的文本框中就随机快速滚动显示1到10这十个数字,点击“停止”按钮后,数字停止滚动,并显示出抽取的题号,同时在上方给出“您抽取的是X号题”提示,在下方“已抽题目”中显示出所有抽过的题目标号。
点击下方的“打开抽取的题目”按钮,切换到抽取题目幻灯片,选手做完题目后,点击返回链接,回到抽取题目页面,继续为下一个选手抽题(图2)。
小提示:在幻灯片放映状态下,可以选中三个文本框控件中的文本,删除它们,达到清零的目的。
代码图示
宏代码
Private Sub 开始_Click()
停止.Enabled = True '停止按钮当前有效
Dim a As Integer
Randomize
Do
a = Fix(Rnd * 10 + 1) '使用随机函数
抽取框.Text = a
结果框.Text = ""
DoEvents
Loop
End Sub
Private Sub 停止_Click()
结果框.Text = 抽取框.Text
已抽题目 = 已抽题目 + 抽取框 + " # " '题目标记用#分隔停止.Enabled = False
End
End Sub
Private Sub 打开抽取的题目_Click() ActivePresentation.SlideShowWindow_ .View.GotoSlide Val(抽取框.Text + 1) End Sub。