《试题库管理系统开发心得.doc》由会员分享,可在线阅读,更多相关《试题库管理系统开发心得.doc(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 试题库管理系统开发心得陈 明(怀化培训基地信息教研室 邮编:418000)摘要教考分离不失为提高职工培训教学质量的一种有效手段,试题库的建立又是教考分离实施的前提,本文就试题库平台的开发的难点提供关键代码。关键词格式文本存储 随机抽题面向对象正 文2009年我担任(试题库管理系统)的负责人,主要负责平台开发,试题库管理系统基本要求为:能随机对题库各种题型抽题生成试卷,同时能面向对象进行修改,基于本人的认知水平及时下网络技术的流行,我选择了VF+SQL模式,以便达到共享数据库,多机同时录入的效果。系统平台的开发难点主要在于(1)VF向SQL存储图片及格式文本,(2)随机抽题,(3)生成能面向对
2、象进行修改的试卷即VF控制WORD. 本系统于9月初研发完,经10、11月调试修改即将投入使用,本人在开发运用软件之路上的艰辛和快乐,体现在下列程序代码之中。现将部分程序代码呈现给广铁的同行,希望能对各位的程序开发有所帮助。一、VF向SQL存储图片及格式文本IF EMPTY(thisform.edit1.Value) mand4.Visible= .F. =MESSAGEBOX(试题添加失败,没有题目!,0+48,提示) RETURNelse nHandle=GetConnHandle()lIsRight=.T.IF nHandle0=SQLSETPROP(nHandle,Asynchrono
3、us,.F.) &设置为同步连接 =SQLSETPROP(nHandle,Transactions,2) &开始人工事务处理aa=ALLTRIM(Tbo2.Value)ff=ALLTRIM(Tbo1.Value)ictxtfile=Thisform.edit1.ValueSTRTOFILE(ictxtfile,c:playerhelp.txt) lcTextString=Strconv(Filetostr(c:playerhelp.txt),13)DO CASE CASE EMPTY(thisform.TEXT2.Value) lcTextString1=thisform.text2.Valu
4、e a=MESSAGEBOX(本题无图片,单击是将添加试题入库,单击否将取消本题入库!,32+4,系统提示) IF a=6 cSQLString=INSERT INTO tbltk (km,lx,tm,tp) VALUES (&aa,&ff,?lcTextString,) ELSE RETURN endif OTHERWISE lcTextString1=thisform.text2.Value lcTextString2=Filetostr(&lcTextString1)+chr(0) cSQLString=INSERT INTO tbltk (km,lx,tm,tp) VALUES (&a
5、a,&ff,?lcTextString,?lcTextString2) ENDCASE nResult=SQLEXEC(nHandle,cSQLString) IF lIsRight=.T. =SQLCOMMIT(nHandle) WAIT WINDOW 试题加添成功! NOWAIT TIMEOUT 2 thisform.edit1.Value= thisform.text2.Value= ELSE =SQLROLLBACK(nHandle) =MESSAGEBOX(试题添加失败,请重新执行!,0+48,提示) ENDIF =SQLSETPROP(nHandle,Transactions,1)
6、 &结束人工事务处理 ENDIF ENDIF二、随机抽题nHandle=GetConnHandle()IF nHandle0 cString=SELECT * FROM tbltk where tbltk.km=&ddand 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,提
7、示) RETURN ENDIF SELECT curtkCOUNT TO nDime b(g1),c(4)B(1)=int(n*Rand(-1)+1) i=2do while i=g1t=1 a=int(n*Rand()+1)j=1do while j=i-1 if a=b(j)t=-1exitelsej=j+1endifenddoif t=-1 loopelseB(i)=a endifi=i+1enddoFOR i=1 TO g1SELECT curtkd=b(i)GO dx=curtk.kmx1=curtk.lxx2=curtk.tmx3=curtk.tpSELECT curtk1INSE
8、RT 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:ksmb1.doc) OleWord.Selection.Font.Size=16 OleWord.Selection.Font.Name=黑体 OleWord.selection.ParagraphFormat.LineSpacing=21 O
9、leWord.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.Selec
10、tion.TypeParagraph select curtk1j=RECCOUNT() OleWord.Selection.Font.Size = 14OleWord.Selection.ParagraphFormat.Alignment =0xx=ALLTRIM(Thisform.text5.Value)y=ALLTRIM(Thisform.text14.Value)yy=&th+、+选择题yy1=(+每小题+&xx+分,共+&y+分+)OleWord.Selection.Font.Name=黑体 OleWord.Selection.TypeText(&yy)OleWord.Selecti
11、on.Font.Name=宋体 OleWord.Selection.TypeText(&yy1)OleWord.Selection.TypeParagraphFOR i=1 TO jgo ireplace curtk1.tm WITH STRCONV(curtk1.tm,14) SET SAFETY OFFa=ALLTRIM(STR(i)+.+bmpOleWord.Selection.TypeText(alltrim(str(i)+.+curtk1.tm)DO CASECASE LEN(CURTK1.TP)=0OTHERWISEStrtofile(LEFT(curtk1.tp,LEN(curtk1.tp)-1),c:&a)OleWord.Selection.TypeParagraphOleWord.Selection.inlineshapes.addpicture(c:&a)ENDCASEOleWord.Selection.TypeParagraphENDFOROTHERWISEENDCASE虽然软件运行平稳,但任有客户端需安装的麻烦之嫌,如用JSP也许更好.在此一并感谢基地领导及合作的同仁. 责任编辑:苏志刚
限制150内