论文部分内容阅读
【摘 要】随着Internet技术的发展,开发基于Web的管理信息系统(MIS)、最大限度利用职业技术学校现有资源、提高教学质量是职业技术学校教学上的新的研究课题。本文针对ASP.NET的在线考试系统的设计进行了分析。
【关键词】ASP.NET;在线考试系统;设计方案
随着互联网与计算机软硬件技术的快速发展,建立在其上的远程教育成为现代教育技术未来发展方向之一,考试测试作为远程教育的一个子系统也成为一个重要的研究领域。在线考试是现代远程教育研究的一个重要部分,它利用计算机和网络进行组卷、考试、评分,实现“教考分离”,相对减少了考试各环节的人为主观因素,更高速、客观、安全的组织考试,把教师从繁重的组卷、评卷、成绩分析等工作中解放出来,提高考试的效度和信度,对提高教学效果和教学质量具有重要意义。
1、系统设计与实现
本系统主要需要实现对教师管理员以及考生的身份验证,试题的录入和随机抽取试题组成试卷,考试过程中的试卷无刷新,考试的计时功能,考生交卷后客观题的系统自动评分,教师和后台管理人员对试题信息的单独管理。针对考试系统,考虑到数据库的数据比较庞大,本系统采用SQL2005数据库存储数据信息。根据考试系统的要求,我们需要设计管理员信息表、考试科目信息表、考生记录信息表、考生信息表、教师信息表、试题信息表。
1.1文件夹组织结构
每个网站都会有相应的文件夹组织结构,如果网站中网页数量很多,可以将所有的网页及资源放在不同的文件夹中。如果网站中网页不是很多,可以将图片、公共类或者程序资源文件放在相应的文件中,而网页可以直接放在网站根目录下。在线考试系统就是按照前者的文件夹组织结构排列的。
1.2公共类设计
在开发项目中以类的形式来组织、封装一些常用的方法和事件,不仅可以提高代码的重用率,也大大方便了代码的管理。本系统中创建了一个公共类BaseClass类,其中包含建立数据库连接的DBconn 方法、绑定GirdView控件的BindDG方法、执行SQL语句的EXsql方法、判断考生登录的ChkStu方法以及判断教师登录的ChkTea方法和判断管理员登录的ChkAdmin方法。
1.3登录的实现
本系统的登录包括教师、考生、管理员三种不同身份的登录,它们的实现方法大致都差不多。在这里我们主要谈谈考生的登录实现,考生进入登录页面后,先输入自己的准考证号和自己的密码同时需要选择学生身份进行登录。输入正确后单击登录按钮则可以进入考试界面进行考试。
2、设计方案的选择
在通常的考试中,相同科目的考生使用相同的试卷,而在线考试系统中则可以做得更好,即相同科目的考生却使用看起来不一样的试卷。如果仅是模拟通常意义的考试,则是容易实现的,但如果能够针对不同的考生呈现不同的在线试卷,则可以有两种方案可以选择:一是针对每个考试生成不同的具有相同难度系数的试卷,二是使用相同的试卷但呈现不同的排列。
由于计算机应用基础课程同时在线考试的人数可能达到上千人,采用方案1要求准备上千份试卷,这是最直接的实现方式。但在考试过程中由于需要频繁地存取试卷数据库,以每份试卷100K字节计算,一千人同时考试则可以产生超过100M/S的突发数据流,如果考虑到数据的封装则会更多,同时还要大量占用处理器及内存资源,这对计算机硬件系统的配置以及网络的性能带来较高的要求,也给在线考试软件的稳定运行带来隐患。
采用相同命题不同呈现方式即方案2,虽然不能真正做到对不同考生呈现不同命题,但却是较适合于基于Web技术的在线考试系统的命题呈现方式。很显然,这种呈现方式不会产生数据拥堵现象,提高了操作的响应性能,较少地占用系统资源,有益于在线考试系统的稳定运行。
3、试卷呈现方法的实现
实现相同的试卷但呈现不同的排列的呈现方式的策略是:①从试卷库中选择将要考试的试卷,将其命题映射到计算机内存中;②针对每个考生产生不同的命题随机序列;③根据不同的命题随机序列显示在线试卷。
3.1实现试卷中命题到内存的映射
计算机应用基础课程试卷中的命题类型可分为选择题和操作题两种,因此需要根据命题在数据库中的关系模式来建立命题类的定义,这里给出命题中选择题的类定义,其他类型命题可做类似处理,代码片段如下(C#语法):
Public class OneQuestion{
Public int PaperID;//试卷ID
Public int KindID;//命题类型
Public int QuestionID;//命题ID
Public int Mark;//分数
Public int NumberOfSelect;//可选项个数
Public String Content;//命题内容
Public String Options;//可选项
Public String answer;//答案}
命题类提供了命题在内存中的数据结构,因此可以从试卷库中读取試卷命题并保存在命题对象数组中,下列Get Paper Contents函数(C#语法)读出选择题到数组中:
Private bool Get Paper Contents(){
ArrayList ar=new ArrayList();//数组ar用于保存选择命题集
SqlDataReader dr=null;//数据集dr表示数据库中试卷的关系模式
Int paperid=Convert.ToInt32(Application["paper
ID"].ToString(),10);//取得试卷ID
ExamineLB examlib=newExamineLB();//创建试卷库读取对象
dr=examlibGetPaperContents(paperid);//读取命题//依次将命题映射到数组中 while(dr!=null&&dr.Read()){
OneQuestionquestion=newOneQuestion();
question.PaperID=Convert.ToInt32(dr["PaperID"].ToString());
question.KindID=Convert.ToInt32(dr["KindID"].ToString());
question.QuestionID=Convert.ToInt32(dr["QuestionID"].ToString());
question.Mark=Convert.ToInt32(dr["Mark"].ToString());
question.NumberOfSelect=Convert.ToInt32(dr["Nu
mberOfSelections"].ToString());
question.Content=dr["Content"].ToString();
question.Options=dr["Options"].ToString();
ar.Add(question);//添加选择题}
dr.Close();//关闭数据库
Application["questions"]=ar;//选择题保存至Application对象
SerializePaper(ar);//序列化命题对象
returntrue;}
以上程序中Application对象是ASP.NET中的全局对象,在这里用来存储在线考试系统中的一个试卷,ArrayList类是ASP.NET中预定义的数组类,用来创建对象数组以保存试卷中的各命题。
3.2实现针对不同考生的命题序列
当完成试卷的内存映射后,试卷中的命题被保存在Application对象中并被所有考生共享。每个考生被赋予不同的命题序列以模拟出针对每个考生的不同试卷。由于内存中只有一份试卷且其排列是固定的,所以每个考生的试卷只需要用数组来表示命题序列即可,数组保存也只是命题的排列即可定义为:int[]Questionlist,再使用随机序列算法乱序排列每个考生的命题序列。实现考生命题序列的代码如下(C#语法):
privateint[]GenerateRandomSeq(intlen)
{inti=0;rdn=0;temp=0;
intcurlength=len;//命题的数量
int[]seq=newint[len];//创建命题序列
Randomrandom=newRandom(unchecked((int)
DateTime.Now.Ticks));//产生随即数
//产生随机命题序列
for(i=0;i for(i=0;i if(i!=rdn&&rdn=0){temp=seq[i];seq[i]=seq[rdn];
seq[rdn]=temp;}}returnseq;//返回处理后的考生命题序列}
GenerateRandomSeq函数模拟了现实生活中的洗牌方法(随机交换任意两张牌)来达到乱序排列的目的。
3.3实现针对不同考生的命题呈现
本在线考试系统的考试界面使用ASP.NET中的列表控件ListBox来绑定考生的命题序列,考生通过此列表控件来检索试卷中的每个命题,命题内容则会显示在文本控件TextBox中。
4、在线试卷的持久化处理
本在线考试系统是基于ASP.NET技术架构的Web应用程序,因此系统的运行依赖Web服务器的工作状态。当Web应用程序处于空闲状态约20分钟时,Web服务器会为了节约系统资源而停止Web应用程序的执行并销毁Web应用程序运行时所创建的对象以回收被占用的内存空间。因此,当在线试卷被发送到考生的客户端后,如果20分钟内没有人提交试卷或翻看命题,则考试系统中的在线试卷就会消失,所带来的后果将是无法再查看试卷,使考试无法继续进行。解决这个问题的一个较好的方法就是将试卷保存在磁盘文件中,称之为持久化处理,这种处理方法可快速重建试题而无须再次读取数据库。要实现试卷的持久化处理,首先要声明试卷中需要序列化的命题对象,在ASP.NET中使用关键字“serializable”来表示,序列化一个命题则需以如下格式来声明(C#语法):
[Serializable()]//序列化声明
publicclassOneQuestion{……….}//需要被序列化的命题类
其次,在发布在线试卷的同时保存试卷,代码片段如下(C#语法):
privatevoidSerializePaper(ArrayListar)//參数ar是命题对象数组
{StringsFilePath=Server.MapPath("~")+"DataFile.dat";//定义要保存的文件名及路径
FileStreamfs=newFileStream(sFilePath,FileMode.Create);//创建数据流文件
try{BinaryFormatterformatter=newBinaryFormatter();//创建二进制数据类型对象
formatter.Serialize(fs,ar);//将命题对象数组串行化并保存在DataFile.dat文件中}catch(SerializationExceptionex){LB_ErrorMsg.Text=ex.Message;}//错误处理 finally{fs.Close();//關闭文件}}
最后,需要定义Application_Start消息处理,从而当Web应用程序再次被Web服务器唤醒时就能够立即使用已保存的文件来恢复在线试卷,代码片段如下(C#语法):
StringsFilePath=Server.MapPath("~")+"DataFile.dat";//将要恢复的试卷所在的文件名及路径
if(File.Exists(sFilePath)
{FileStreamfs=newFileStream(sFilePath,FileMode.Open);//创建数据流文件
try{BinaryFormatterformatter=newBinaryFormatter();//创建二进制数据类型对象
ar=(ArrayList)formatter.Deserialize(fs);//恢复试卷
Application["questions"]=ar;//恢复试卷到Application对象中
if(ar.Count>0){Application["paperTitle"]="试卷
ID:"+((OneQuestion)ar[0]).PaperID.ToString()+"正在考试中
";Application["paperID"]=((OneQuestion)ar[0]).PaperID;//恢复试卷ID
Application["beginTest"]=true;//恢复考试状态}
}catch(SerializationExceptionex){}finally{fs.Close();//关闭文件}
要说明的是:Application_Start消息在Web应用程序(在这里是指在线考试系统)每次被启动时产生,恢复的在线试卷保存在Application对象中。
5、结束语
综上所述,建立网络课程在线考试系统,方便学习者自主测验,及时得到反馈信息,从而有计划、有步骤、系统地调整学习进度,使网上学习更有效。与此同时,教师(或管理员)可以通过系统对学生信息的分析统计,有针对性地为学习者提供指导。随着经验的积累、题量的增加、题目形式的多样化,在线考试系统会进一步得到扩充和完善。
参考文献
[1]王娜.基于ASP.NET技术的在线考试系统的设计与实现[J].科技信息,2010年17期
[2]金小璞,罗庆云,徐芳.基于ASP.NET技术的在线考试系统[J].福建电脑,2005年10期
【关键词】ASP.NET;在线考试系统;设计方案
随着互联网与计算机软硬件技术的快速发展,建立在其上的远程教育成为现代教育技术未来发展方向之一,考试测试作为远程教育的一个子系统也成为一个重要的研究领域。在线考试是现代远程教育研究的一个重要部分,它利用计算机和网络进行组卷、考试、评分,实现“教考分离”,相对减少了考试各环节的人为主观因素,更高速、客观、安全的组织考试,把教师从繁重的组卷、评卷、成绩分析等工作中解放出来,提高考试的效度和信度,对提高教学效果和教学质量具有重要意义。
1、系统设计与实现
本系统主要需要实现对教师管理员以及考生的身份验证,试题的录入和随机抽取试题组成试卷,考试过程中的试卷无刷新,考试的计时功能,考生交卷后客观题的系统自动评分,教师和后台管理人员对试题信息的单独管理。针对考试系统,考虑到数据库的数据比较庞大,本系统采用SQL2005数据库存储数据信息。根据考试系统的要求,我们需要设计管理员信息表、考试科目信息表、考生记录信息表、考生信息表、教师信息表、试题信息表。
1.1文件夹组织结构
每个网站都会有相应的文件夹组织结构,如果网站中网页数量很多,可以将所有的网页及资源放在不同的文件夹中。如果网站中网页不是很多,可以将图片、公共类或者程序资源文件放在相应的文件中,而网页可以直接放在网站根目录下。在线考试系统就是按照前者的文件夹组织结构排列的。
1.2公共类设计
在开发项目中以类的形式来组织、封装一些常用的方法和事件,不仅可以提高代码的重用率,也大大方便了代码的管理。本系统中创建了一个公共类BaseClass类,其中包含建立数据库连接的DBconn 方法、绑定GirdView控件的BindDG方法、执行SQL语句的EXsql方法、判断考生登录的ChkStu方法以及判断教师登录的ChkTea方法和判断管理员登录的ChkAdmin方法。
1.3登录的实现
本系统的登录包括教师、考生、管理员三种不同身份的登录,它们的实现方法大致都差不多。在这里我们主要谈谈考生的登录实现,考生进入登录页面后,先输入自己的准考证号和自己的密码同时需要选择学生身份进行登录。输入正确后单击登录按钮则可以进入考试界面进行考试。
2、设计方案的选择
在通常的考试中,相同科目的考生使用相同的试卷,而在线考试系统中则可以做得更好,即相同科目的考生却使用看起来不一样的试卷。如果仅是模拟通常意义的考试,则是容易实现的,但如果能够针对不同的考生呈现不同的在线试卷,则可以有两种方案可以选择:一是针对每个考试生成不同的具有相同难度系数的试卷,二是使用相同的试卷但呈现不同的排列。
由于计算机应用基础课程同时在线考试的人数可能达到上千人,采用方案1要求准备上千份试卷,这是最直接的实现方式。但在考试过程中由于需要频繁地存取试卷数据库,以每份试卷100K字节计算,一千人同时考试则可以产生超过100M/S的突发数据流,如果考虑到数据的封装则会更多,同时还要大量占用处理器及内存资源,这对计算机硬件系统的配置以及网络的性能带来较高的要求,也给在线考试软件的稳定运行带来隐患。
采用相同命题不同呈现方式即方案2,虽然不能真正做到对不同考生呈现不同命题,但却是较适合于基于Web技术的在线考试系统的命题呈现方式。很显然,这种呈现方式不会产生数据拥堵现象,提高了操作的响应性能,较少地占用系统资源,有益于在线考试系统的稳定运行。
3、试卷呈现方法的实现
实现相同的试卷但呈现不同的排列的呈现方式的策略是:①从试卷库中选择将要考试的试卷,将其命题映射到计算机内存中;②针对每个考生产生不同的命题随机序列;③根据不同的命题随机序列显示在线试卷。
3.1实现试卷中命题到内存的映射
计算机应用基础课程试卷中的命题类型可分为选择题和操作题两种,因此需要根据命题在数据库中的关系模式来建立命题类的定义,这里给出命题中选择题的类定义,其他类型命题可做类似处理,代码片段如下(C#语法):
Public class OneQuestion{
Public int PaperID;//试卷ID
Public int KindID;//命题类型
Public int QuestionID;//命题ID
Public int Mark;//分数
Public int NumberOfSelect;//可选项个数
Public String Content;//命题内容
Public String Options;//可选项
Public String answer;//答案}
命题类提供了命题在内存中的数据结构,因此可以从试卷库中读取試卷命题并保存在命题对象数组中,下列Get Paper Contents函数(C#语法)读出选择题到数组中:
Private bool Get Paper Contents(){
ArrayList ar=new ArrayList();//数组ar用于保存选择命题集
SqlDataReader dr=null;//数据集dr表示数据库中试卷的关系模式
Int paperid=Convert.ToInt32(Application["paper
ID"].ToString(),10);//取得试卷ID
ExamineLB examlib=newExamineLB();//创建试卷库读取对象
dr=examlibGetPaperContents(paperid);//读取命题//依次将命题映射到数组中 while(dr!=null&&dr.Read()){
OneQuestionquestion=newOneQuestion();
question.PaperID=Convert.ToInt32(dr["PaperID"].ToString());
question.KindID=Convert.ToInt32(dr["KindID"].ToString());
question.QuestionID=Convert.ToInt32(dr["QuestionID"].ToString());
question.Mark=Convert.ToInt32(dr["Mark"].ToString());
question.NumberOfSelect=Convert.ToInt32(dr["Nu
mberOfSelections"].ToString());
question.Content=dr["Content"].ToString();
question.Options=dr["Options"].ToString();
ar.Add(question);//添加选择题}
dr.Close();//关闭数据库
Application["questions"]=ar;//选择题保存至Application对象
SerializePaper(ar);//序列化命题对象
returntrue;}
以上程序中Application对象是ASP.NET中的全局对象,在这里用来存储在线考试系统中的一个试卷,ArrayList类是ASP.NET中预定义的数组类,用来创建对象数组以保存试卷中的各命题。
3.2实现针对不同考生的命题序列
当完成试卷的内存映射后,试卷中的命题被保存在Application对象中并被所有考生共享。每个考生被赋予不同的命题序列以模拟出针对每个考生的不同试卷。由于内存中只有一份试卷且其排列是固定的,所以每个考生的试卷只需要用数组来表示命题序列即可,数组保存也只是命题的排列即可定义为:int[]Questionlist,再使用随机序列算法乱序排列每个考生的命题序列。实现考生命题序列的代码如下(C#语法):
privateint[]GenerateRandomSeq(intlen)
{inti=0;rdn=0;temp=0;
intcurlength=len;//命题的数量
int[]seq=newint[len];//创建命题序列
Randomrandom=newRandom(unchecked((int)
DateTime.Now.Ticks));//产生随即数
//产生随机命题序列
for(i=0;i
seq[rdn]=temp;}}returnseq;//返回处理后的考生命题序列}
GenerateRandomSeq函数模拟了现实生活中的洗牌方法(随机交换任意两张牌)来达到乱序排列的目的。
3.3实现针对不同考生的命题呈现
本在线考试系统的考试界面使用ASP.NET中的列表控件ListBox来绑定考生的命题序列,考生通过此列表控件来检索试卷中的每个命题,命题内容则会显示在文本控件TextBox中。
4、在线试卷的持久化处理
本在线考试系统是基于ASP.NET技术架构的Web应用程序,因此系统的运行依赖Web服务器的工作状态。当Web应用程序处于空闲状态约20分钟时,Web服务器会为了节约系统资源而停止Web应用程序的执行并销毁Web应用程序运行时所创建的对象以回收被占用的内存空间。因此,当在线试卷被发送到考生的客户端后,如果20分钟内没有人提交试卷或翻看命题,则考试系统中的在线试卷就会消失,所带来的后果将是无法再查看试卷,使考试无法继续进行。解决这个问题的一个较好的方法就是将试卷保存在磁盘文件中,称之为持久化处理,这种处理方法可快速重建试题而无须再次读取数据库。要实现试卷的持久化处理,首先要声明试卷中需要序列化的命题对象,在ASP.NET中使用关键字“serializable”来表示,序列化一个命题则需以如下格式来声明(C#语法):
[Serializable()]//序列化声明
publicclassOneQuestion{……….}//需要被序列化的命题类
其次,在发布在线试卷的同时保存试卷,代码片段如下(C#语法):
privatevoidSerializePaper(ArrayListar)//參数ar是命题对象数组
{StringsFilePath=Server.MapPath("~")+"DataFile.dat";//定义要保存的文件名及路径
FileStreamfs=newFileStream(sFilePath,FileMode.Create);//创建数据流文件
try{BinaryFormatterformatter=newBinaryFormatter();//创建二进制数据类型对象
formatter.Serialize(fs,ar);//将命题对象数组串行化并保存在DataFile.dat文件中}catch(SerializationExceptionex){LB_ErrorMsg.Text=ex.Message;}//错误处理 finally{fs.Close();//關闭文件}}
最后,需要定义Application_Start消息处理,从而当Web应用程序再次被Web服务器唤醒时就能够立即使用已保存的文件来恢复在线试卷,代码片段如下(C#语法):
StringsFilePath=Server.MapPath("~")+"DataFile.dat";//将要恢复的试卷所在的文件名及路径
if(File.Exists(sFilePath)
{FileStreamfs=newFileStream(sFilePath,FileMode.Open);//创建数据流文件
try{BinaryFormatterformatter=newBinaryFormatter();//创建二进制数据类型对象
ar=(ArrayList)formatter.Deserialize(fs);//恢复试卷
Application["questions"]=ar;//恢复试卷到Application对象中
if(ar.Count>0){Application["paperTitle"]="试卷
ID:"+((OneQuestion)ar[0]).PaperID.ToString()+"正在考试中
";Application["paperID"]=((OneQuestion)ar[0]).PaperID;//恢复试卷ID
Application["beginTest"]=true;//恢复考试状态}
}catch(SerializationExceptionex){}finally{fs.Close();//关闭文件}
要说明的是:Application_Start消息在Web应用程序(在这里是指在线考试系统)每次被启动时产生,恢复的在线试卷保存在Application对象中。
5、结束语
综上所述,建立网络课程在线考试系统,方便学习者自主测验,及时得到反馈信息,从而有计划、有步骤、系统地调整学习进度,使网上学习更有效。与此同时,教师(或管理员)可以通过系统对学生信息的分析统计,有针对性地为学习者提供指导。随着经验的积累、题量的增加、题目形式的多样化,在线考试系统会进一步得到扩充和完善。
参考文献
[1]王娜.基于ASP.NET技术的在线考试系统的设计与实现[J].科技信息,2010年17期
[2]金小璞,罗庆云,徐芳.基于ASP.NET技术的在线考试系统[J].福建电脑,2005年10期