陈 明
(怀化培训基地信息教研室 邮编:418000)
[摘 要] 教考分离不失为提高职工培训教学质量的一种有效手段,试题库的建立又是教考分离实施的前提,本文就试题库平台的开发的难点提供关键代码。 [关键词] 格式文本存储 随机抽题 面向对象
[正 文]
2009年我担任(试题库管理系统)的负责人,主要负责平台开发,试题库管理系统基本要求为:能随机对题库各种题型抽题生成试卷,同时能面向对象进行修改,基于本人的认知水平及时下网络技术的流行,我选择了VF+SQL模式,以便达到共享数据库,多机同时录入的
效果。系统平台的开发难点主要在于(1)VF向SQL存储图片及格式文本,(2)随机抽题,(3)生成能面向对象进行修改的试卷即VF控制WORD. 本系统于9月初研发完,经10、11月
调试修改即将投入使用,本人在开发运用软件之路上的艰辛和快乐,体现在下列程序代码之中。
现将部分程序代码呈现给广铁的同行,希望能对各位的程序开发有所帮助。
声波速度一、VF向SQL存储图片及格式文本
IF EMPTY(thisform.edit1.Value)
thisformmand4.Visible= .F.
=MESSAGEBOX("试题添加失败,没有题目!",0+48,"提示")
RETURN
else
nHandle=GetConnHandle()
lIsRight=.T.
IF nHandle>0
=SQLSETPROP(nHandle,"Asynchronous",.F.) &&设置为同步连接
=SQLSETPROP(nHandle,"Transactions",2) &&开始人工事务处理
皮肤科学aa=ALLTRIM(Thisformbo2.Value)
ff=ALLTRIM(Thisformbo1.Value)
ictxtfile=Thisform.edit1.Value
STRTOFILE(ictxtfile,"c:\")
lcTextString=Strconv(Filetostr('c:\'),13)
DO CASE
CASE EMPTY(thisform.TEXT2.Value)
2.Value
a=MESSAGEBOX('本题无图片,单击"是"将添加试题入库,单击"否"将取消本题入库!',32+4,'系统提示')
IF a=6
cSQLString="INSERT INTO tbltk (km,lx,tm,tp) VALUES ('&aa','&ff',?lcTextString,'')"
ELSE
RETURN
endif
OTHERWISE
2.Value
lcTextString2=Filetostr('&lcTextString1')+chr(0)
cSQLString="INSERT INTO tbltk (km,lx,tm,tp) VALUES ('&aa','&ff',?lcTextString,?lcTextString2)"
ENDCASEilife 11
nResult=SQLEXEC(nHandle,cSQLString)
IF lIsRight=.T.
=SQLCOMMIT(nHandle)
WAIT WINDOW "试题加添成功!" NOWAIT TIMEOUT 2
thisform.edit1.Value=''
2.Value=''
ELSE
=SQLROLLBACK(nHandle)
=MESSAGEBOX("试题添加失败,请重新执行!",0+48,"提示")
ENDIF
=SQLSETPROP(nHandle,"Transactions",1) &&结束人工事务处理
ENDIF
ENDIF
二、随机抽题
nHandle=GetConnHandle()
IF nHandle>0
cString="SELECT * FROM tbltk where tbltk.km='&dd'and tbltk.lx='选择题'"
cString1="SELECT * FROM tbltk where tbltk.km=''"
nResult=SQLEXEC(nHandle,cString,"curtk")
nResult=SQLEXEC(nHandle,cString1,"curtk1")
IF nResult<=0
=MESSAGEBOX("读取题库信息发生错误,请重新登录!",0+48,"提示")
RETURN
ENDIF
SELECT curtk
COUNT TO n
Dime b(g1),c(4)
B(1)=int(n*Rand(-1)+1)
i=2
do while i<=g1
t=1
a=int(n*Rand()+1)
j=1
do while j<=i-1
if a=b(j)
t=-1
exit
else
j=j+1
endif
enddo
if t=-1
loop
else
B(i)=a
endif
i=i+1
enddo
FOR i=1 TO g1
第二文库SELECT curtk
d=b(i)
GO d
x=curtk.km
x1=curtk.lx
x3=curtk.tp
SELECT curtk1
INSERT INTO curtk1 (km,lx,tm,tp) VALUES (x,x1,x2,x3)
ENDFOR
ELSE
ENDIF
三、生成能面向对象进行修改的试卷即VF控制WORD.
OleWord=createobject('word.application')
OleWord.visible=.t.
OleWord.Documents.Open ('d:\ks\mb1.doc')
OleWord.Selection.Font.Size=16
OleWord.Selection.Font.Name="黑体"
OleWord.selection.ParagraphFormat.LineSpacing=21
OleWord.Selection.TypeText("&c1")
OleWord.Selection.ParagraphFormat.Alignment =1
OleWord.Selection.TypeParagraph
s="—"
ff="《"+"&dd"+"》"
cc="&c2"+"&s"+"&c3"+"学年"+"第"+"&h"+"学期"+"&ff"+"&g"+"考试试卷"
OleWord.Selection.TypeText("&cc")
OleWord.Selection.TypeParagraph
OleWord.Selection.Font.Size=14
OleWord.Selection.TypeText(" 总分_________")
OleWord.Selection.TypeParagraph
select curtk1
j=RECCOUNT()
OleWord.Selection.Font.Size = 14
OleWord.Selection.ParagraphFormat.Alignment =0
xx=5.Value)
y=14.Value)
yy="&th"+"、"+"选择题"
yy1="("+"每小题"+"&xx"+"分,共"+"&y"+"分"+")"
OleWord.Selection.Font.Name="黑体"
OleWord.Selection.TypeText("&yy")
OleWord.Selection.Font.Name="宋体"
OleWord.Selection.TypeText("&yy1")
OleWord.Selection.TypeParagraph
FOR i=1 TO j
go i
WITH ,14)
SET SAFETY OFF
a=ALLTRIM(STR(i))+"."+"bmp"
OleWord.Selection.TypeText(alltrim(str(i))+"."+)
DO CASE
CASE LEN(CURTK1.TP)=0
OTHERWISE
Strtofile(LEFT(curtk1.tp,LEN(curtk1.tp)-1),"c:\&a")
OleWord.Selection.TypeParagraph
OleWord.Selection.inlineshapes.addpicture("c:\&a")
ENDCASE
OleWord.Selection.TypeParagraph
ENDFOR
戴高帽子的猫OTHERWISE
ENDCASE
虽然软件运行平稳,但任有客户端需安装的麻烦之嫌,如用JSP幼儿发展与健康管理也许更好.在此一并感谢基地领导及合作的同仁.