《基于C∕S模式的题库练习考试系统的开发.doc》由会员分享,可在线阅读,更多相关《基于C∕S模式的题库练习考试系统的开发.doc(7页珍藏版)》请在三一办公上搜索。
1、基于CS模式的题库练习考试系统的开发摘要:基于计算机网络C/S(客户端/服务器)模式的题库练习考试系统,能实现多个用户同时联机进行练习或考试,极大地减轻大量命题和阅卷工作量,尤其是由服务端指定练习或考试内容、客户端统一练习或考试的题库练习考试系统,具有很强的实用性。关键字:题库,CS模式,练习考试系统,系统开发1概述目前,社会上各行各业中的考试绝大多数都是以笔试的形式开展,笔试当然需要试卷,从纸张到试卷命题印刷及考试阅卷等,需要大量的资金与精力,长此以往,浪费了大量的财力物力人力。随着计算机的出现并发展到现阶段,特别是计算机网络的普及,已经完全有能力进入无纸化考试时代,让计算机自动命题,结合网
2、络完成考试,再让计算机自动阅卷。基于计算机网络C/S模式的题库练习考试系统,能实现多个用户同时联机进行练习或考试,极大地减轻大量命题和阅卷工作量,尤其是由服务端指定练习或考试内容、客户端统一练习或考试的题库练习考试系统,具有很强的实用性。本系统在WindowsXP操作系统下,用VC6编译通过,并运行良好。2系统功能分析采用C/S(客户端/服务端)模式的系统,一般可分成两个部分,即服务端程序部分和客户端程序部分,本系统也不例外。本系统的服务端程序主要完成统一练习或测试内容的指定、练习或测试的进度成绩监控、成绩的保存等工作;客户端程序主要完成题库的练习、测试和自动评分工作。2.1服务端程序功能分析
3、根据服务端程序应完成的主要任务,具体功能应包括:(1)客户端统一练习或测试的题目及类型设定为了保证客户端练习或测试的内容的统一,本系统采用由服务端程序设定客户端练习或测试的题库内容。(2)练习、测试、智能、自由监控客户端的练习或测试状态由服务端来设定。当服务端设定为练习监控时,客户端只能进行练习;当服务端设定为测试监控时,客户端则只能进行测试;当服务端设定为智能监控时,客户端能进行多次练习,且只能进行一次测试;当服务端设定为自由监控时,允许客户端进行多次练习或测试,且测试时能自动评分,由此来进行统一练习或测试控制。(3)允许重考在测试模式状态下,当客户端因操作失误或特殊原因想重新测试时,经老师
4、同意,可以允许重考。(4)错误登录信息的清除当用户在登录时因输入了错误的“ID”或“姓名”等退出重新登录时,会在服务端留下错误的登录信息,这些信息是多余的,故在服务端必须能清除登录错误信息。(5)数据保存数据保存功能把显示在主窗口界面列表中的用户数据信息保存到用户指定的位置。当服务端停止监控时,自动弹出“保存数据”对话框让用户选择。2.2客户端程序功能分析根据客户端程序的主要任务,具体功能应包括:(1)完成用户登录并连接服务器服务器连接主要是为了跟服务端程序进行连接,以便进行数据的发送或接收,但为了让服务端区分登录的用户,可以在连接服务器前先让客户端输入“ID”和“姓名”,然后与服务端进行连接
5、。(2)题库练习根据服务端程序指定内容,把所有题目按顺序一题题显示出来进行练习。一般可以用以下两种方法来显示不同题目,一是让客户端可以快速切换题目,可在练习界面中增加题目列表,客户可以直接单击列表中不同的题号来快速切换试题;二是在每次试题回答正确时,自动切换到下一题。为了能保证练习的趣味性,在客户端程序中可以增加回答“正确”或“错误”的动画提示。若回答错误,则显示回答“错误”的动画,并继续进行本题回答;若回答正确,则显示回答“正确”的动画,并自动切换到下一题。因为是练习,故允许客户查看答案,可增加一个按钮来让客户通过单击按钮,就可以看本题答案。(3)题库测试随机抽取不重复的100道题目,若题量
6、不足100题,则随机抽取所有题目。在客户做题后,自动把选择答案显示在题目编号中,以便客户检查并修改。(4)自动评分因为练习时能查看每题的答案,根本不需要评分,故评分是针对而测试而言的,一般情况下,每次测试结束时可对本次测试的结果进行评定,这只要显示本次测试的成绩就可以了。这里的自动评分除了上述功能外,还实现了在客户端自由测试时,可自动对测试的每道题目的结果进行评定。3系统开发的关键技术3.1服务端程序开发的关键技术(1)设置统一练习或测试的试题类型实现原理:当服务端程序设定试题的类型,把设定的类型转换为一句SQL语句中。当客户端用户刚登录时把服务端设定的题库类型SQL语句发送给客户端程序,当客
7、户端收到由服务端发来的题库类型信息后,自动随机抽取试题,来进行统一练习或测试。(选择其中一项内容关键代码如下:)if(m_Base)/选择了第一项if(strSQL.IsEmpty()/原选择为空?strSQL=“WHEREst_typeLIKE1.1%”;/新增SQL语句elsestrSQL=strSQL+”ORst_typeLIKE1.1%”;/追加SQL语句/其它几项省略(2)练习、测试、智能、自由等监控实现原理:设置好监控模式,初始化网络连接并进行侦听,最后启动定时器,定时更新用户数据。(测试监控关键代码如下:)nMode=1;/设置模式为测试,0为练习、1为测试、2为智能、3为自由i
8、f(m_ListenSocket.Create(m_nPort)/初始化端口CServerView*pView=(CServerView*)(CFrameWnd*)AfxGetApp()-m_pMainWnd)-GetActiveView();/获取视图类指针pView-m_List.ShowWindow(SW_SHOW);/显示监控列表控件pView-m_List.DeleteAllItems();/清空监控列表userArray.RemoveAll();/清空用户数据m_ListenSocket.Listen();/开始侦听HaveDoing=true;/正在监控变量激活SetTimer(
9、1,2000,NULL);/设置计时器,每2秒更新用户列表(3)允许客户登录并传输统一试题和监控模式实现原理:当服务端收到客户端是登录信息时,判断当前是否测试监控模式且该用户是否已测试,如果是的话禁止用户登入,否则允许用户进入且把监控模式和试题类型发送到客户端。传输监控模式是为了在客户端激活“练习”还是“测试”。(关键代码如下:)if(command=0)/用户登录吗?if(*nMode=1|*nMode=2)/测试或智能模式时,当用户已经完成测试,不允许进入/是否有该用户数据if(index=0&(userArr-GetAt(5*index+2)=“测试停止”|userArr-GetAt(5
10、*index+2)=“测试退出”)/该用户已经测试完成,不允许再进入/传输客户不能进入数据else/该用户未完成测试/传输监控模式和试题类型else/如为练习或自由模式,则直接传输监控模式和试题类型/传输监控模式和试题类型/直接把数据发到主窗口去处理(4)处理接收到的数据实现原理:收到的客户端传输的数据后,对数据进行分类处理。userArray为存放用户数据的CStringArray变量。(关键代码如下所示:)switch(command)case0:/处理客户端登录数据/把登录数据保存到用户数据表中userOdery();/对新数据排序break;case1:/更新客户端进度或成绩/把进度或
11、成绩更新数据保存到用户数据表中break;case2:/客户端停止练习或测试/把当前用户的停止状态保存到用户数据表中break;case3:/客户端程序关闭/把当前用户的退出状态保存到用户数据表中break;case4:/客户端暂时离开/把当前用户的暂时离开状态保存到用户数据表中break;(5)防止闪屏的用户列表显示实现原理:在定时显示用户列表时,为防止大量显示数据时的闪屏,采用修改数据的方法。(关键代码如下所示:)inttotalArr=(userArray.GetUpperBound()+1)/5;/统计用户数目CServerView*pView=(CServerView*)(CFram
12、eWnd*)AfxGetApp()-m_pMainWnd)-GetActiveView();inttotalList=pView-m_List.GetItemCount();/统计已显示用户数目if(totalArr=totalList)/用户数据多于已显示数据时for(i=0;itotalList;i+)/修改已显示数据for(i=totalList;itotalArr;i+)/增加显示数据else/若已显示数据多于用户数据for(i=0;i=totalArr;i-)/删除多余数据pView-m_List.DeleteItem(i);3.2客户端程序开发的关键技术(1)处理接收到的数据用户实
13、现原理:收到的服务端传输的数据后,对数据进行分类处理。(关键代码如下所示:)switch(command)case0:/不允许重新登录AfxMessageBox(“你已经进行了测试!如想重考,请向老师说明原因!”);OnNetClose();/关闭连接break;case1:/处理统一练习或测试的试题类型和服务端监控模式/分离出统一练习或测试的试题类型,供练习或测试时抽题/分离服务端监控模式,并激活练习或测试功能/显示本次练习或测试的总题量break;(2)用户答题实现原理:在视图类中响应单选按钮,并给予处理。(选A关键代码如下所示:)if(MainFrame1-nCurrentMode=0)
14、/若是练习模式if(MainFrame1-stArr.GetAt(4*(MainFrame1-nCurrent-1)+3)=“a”|MainFrame1-stArr.GetAt(4*(MainFrame1-nCurrent-1)+3)=“A”)/答案是A吗?/播放回答正确动画ShowNextTree();/显示下一题else/播放回答错误动画else/若为测试模式MainFrame1-userDa.SetAt(MainFrame1-nCurrent-1,”A”);/把答案存放到用户答案数组中ShowNextTree();(3)定时发送进度实现原理:在定时响应函数中,根据模式发送数据。(关键代码
15、如下所示:)if(this=GetActiveWindow()/判断用户正在当前程序窗口if(nCurrentMode=0)/若用户正在“练习”状态/发送练习进度else/若用户正在“测试”状态/发送测试成绩else/用户已经暂时离开/发送暂时离开(4)自由测试时,自动评分实现原理:根据试题答案对客户答案进行评分,若答案正确打,若答案错误,并附上正确答案。(关键代码如下所示:)/去掉答题功能,不允许继续答题hItem=pView-m_cTree.GetNextItem(hItem,TVGN_ROOT);/指向树型控件中的第一题for(inti=0;im_cTree.GetItemText(hI
16、tem);if(userDa.GetAt(i)=stArr.GetAt(4*i+3)str=str+”;/答案正确打elsestr=str+”+stArr.GetAt(4*i+3);/答案错误打,并附上正确答案pView-m_cTree.SetItemText(hItem,str);hItem=pView-m_cTree.GetNextItem(hItem,TVGN_NEXT);/指向下一题4结束语服务端与客户端程序的主要功能基本实现了,但也有不少地方需要改进,如本次练习考试只能满足选择题类型的题目,不能进行填空题、问答题等类型题目答题;试题由服务端抽取,并发送给客户端,这样使得试题更加安全,但也会因大量数据传输造成速度较慢;试题的输入与管理;客户端练习或测试的时间没有限定等等,都有待进一步完善。参考文献1明日科技VisualC+数据库系统开发完全手册人民邮电出版社2博嘉科技VisualC+网络编程实作教程北京希望电子出版社