·您的位置: 首页 » 资源教程 » 编程开发 » ASP » 利用ASP+XML架设在线考试系统

利用ASP+XML架设在线考试系统

类别: ASP教程  评论数:0 总得分:0
利用ASP + XML 架设在线考试系统

使用这个在线的考试系统,我们能处理任何类型在线测试。 尽管我们一般是用传统方式实现,读者非常希望将。

如果从总体上考虑。 所有问题都储存在服务器( 它可能在数据库里) 里面的的xml 文件里。 用户准备花费考试,然后用户测试的通体将通过微软的XML HTTP 组件传送到浏览器。 使用同一个XML HTTP 组件,每当用户请求一个问题的时候,那些问题内容被从服务器解释并且显示在页上。 对用户的任何问题,你所选择的答案会被储存在客户端。



一次考试的持续时间是5 分钟。 没有回答不了,你可以使用NEXT回答下洋问题。 一旦用户启动考试,所有问题目录将来自服务器。 所给问题的Id 每请求到服务器以来在内目录在客户拿给并且给服务器派内储存。 服务器将返回问题内容,符合问题Id,从xml 文件。 当用户选择任何一个答案时,体制将在那些应答表里储存和在在客户边里的选择表里。 用户最后已经选择的正确的答案,应答表用来并不地检查。 选择表在那里是以便系统将自动选择用户已经选择了的选择 ( 例如用户点击以前的按钮) 考试将结束或者用户点击终结按钮或者首先来,时间( 例如5 分钟) 结束。 关于终结,系统将计算并不右边答案的并且展示它。 那些以下的文件被在在线的考试系统里使用:

OLExam.html

<html>
<script>
var objXmlHTTP,objXmlDOM;
var aQuest; //to store question ids
var aAnswer = new Array(); // to track the result
var aSelected = new Array(); // to store user\'s response
var count = 0; //to store the current question no
var ansSel = 0; //to store user\'s selection
var ExamDuration = 5 * 60 ; // 5 minutes
var timerID; //to store the setInterval fun\'s id
var radIndex = -1; //to store the selected radio\'s index

//constructor like function
//here XML objects are created and
//No of questions as well as question ids list
//are fetched from the server.
function init(){
objXmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
objXmlDOM = new ActiveXObject("Microsoft.XMLDOM");
objXmlHTTP.open("POST","OLExam.asp?Action=Start",false);
objXmlHTTP.send("");
temp =objXmlHTTP.ResponseText;
aQuest = temp.split(",");

//initialize the user\'s answers list
for(i=0;i<aQuest.length; i++){
aAnswer[i] = 0; // 0 for wrong; 1 for right answer
aSelected[i] = -1; // to store the radio\'s index
}

if(count < aQuest.length) {
url = "OLExam.asp?Action=NextQ&QNo=" + aQuest[count];
objXmlHTTP.open("POST", url ,false);
objXmlHTTP.send("");
objXmlDOM.loadXML(objXmlHTTP.ResponseText);

//parse the response content fetched from the server
//and display the question
parseQ();
}

//change the Start button\'s caption and its click event
document.frm.btnFinish.value = "Finish the Exam";
document.frm.btnFinish.onclick = showResult; //function

//start the timer
timerID = setInterval("timer()",1000);
}

function getPreQ() {
//update the user\'s answers list
checkAnswer();

//decrement the question no - i.e. to previous Question
count--;

//stop the timer
clearInterval(timerID);

//fetch the question for the aQuest[count] id
url = "OLExam.asp?Action=NextQ&QNo=" + aQuest[count];
objXmlHTTP.open("POST",url ,false);
objXmlHTTP.send("");
objXmlDOM.loadXML(objXmlHTTP.ResponseText);

//parse the response content fetched from the server
//and display the question
parseQ();

//start the timer
timerID = setInterval("timer()",1000);
}

function getNextQ() {
//update the user\'s answers list
checkAnswer();

//increment the question no - i.e. to next Question
count++;

//stop the timer
clearInterval(timerID);

url = "OLExam.asp?Action=NextQ&QNo=" + aQuest[count];
objXmlHTTP.open("POST", url ,false);
objXmlHTTP.send("");
objXmlDOM.loadXML(objXmlHTTP.ResponseText);

//parse the response content fetched from the server
//and display the question
parseQ();

//start the timer
timerID = setInterval("timer()",1000);
}

function parseQ(){
//fetch the question from theXML Object
//format the display
strOut = "<table border=0 align=center width=80%>";
strOut += "<tr><td colspan=2><b>";
strOut += "Question No: " + (count+1) + " of ";
strOut += aQuest.length + "</b></td></tr>";
strOut += "<tr><td colspan=2> </td></tr>";

temp = objXmlDOM.selectSingleNode("data/qtext").text;

strOut += "<tr><td colspan=2><b>"+temp+"</b></td></tr>";
strOut += "<tr><td colspan=2> </td></tr>";

Nodes = objXmlDOM.selectNodes("data/choice");

for(i=0;i<Nodes.length;i++){
strOut += "<tr><td align=center width=10%>";
strOut += "<input type=radio name=ansUsr ";
strOut += " onClick=\'ansSel=" + (i+1);
strOut += ";radIndex=" + i + "\' ";
strOut += "value=" + (i+1) + "></td><td>";
strOut += Nodes.item(i).text + "</td></tr>";
}

//set ansNo (hidden field) to the actual answer
temp = objXmlDOM.selectSingleNode("data/answer").text;
document.frm.ansNo.value = temp;

strOut += "<tr><td colspan=2> </td></tr>";
strOut += "<tr><td colspan=2>";

if(count != 0 ){
strOut += "<input type=button value=Previous ";
strOut += " onClick=\'getPreQ()\'> ";
}

if(count < aQuest.length-1){
strOut += " <input type=button value=Next";
strOut += " onClick=\'getNextQ()\'>";
}

strOut += "</td></tr></table>";

//set the strOut content to <P> tag named QArea
QArea.innerHTML = strOut;

//set the default value to ansSel
ansSel = 0;
radIndex = -1;

//check the radio if user has selected previously
if (aSelected[count] != -1) {
radIndex = aSelected[count];
ansSel = radIndex + 1;
document.frm.ansUsr[radIndex].checked = true;
}
}

function checkAnswer(){
//store the selected radio\'s index
aSelected[count] = radIndex;

//if the user selection matches the actual answer
if (ansSel == document.frm.ansNo.value)
aAnswer[count] = 1;
else
aAnswer[count] = 0;
}

function showResult() {
rights = 0;

//stop the timer
clearInterval(timerID);

//update the user\'s answers list
checkAnswer();

//count no of answers
for(i=0;i<aAnswer.length;i++){
if(aAnswer[i] == 1)
rights++;
}
strRes = "<h2 align=center><br>";

//if all the answers are correct then greet
if(rights == aAnswer.length)
strRes += "<br><br>Congratulations...!";

strRes += "<br><br>your score is " + rights;
strRes += " out of " + aAnswer.length + "</h2>";

document.write(strRes);
}

var timeCount = 0;
function timer(){
timeCount++; //increment the time by one second

//to display the time in the status bar,
// uncomment the next line
//window.status = "..." + timeCount + " secs" ;

//to display the time
temp = "Time: " + parseInt(timeCount/60);
temp += " min : " + (timeCount%60) + " sec ";
TBlock.innerText = temp;

//if the time is up
if (timeCount == ExamDuration) {
alert("Sorry, time is up");
showResult();
}
}
</script>

<body>
<h2 align=center><font color=green>OnLine Exam</font></h2>

<form name=frm >
<table border=1 width=95% bgcolor=DarkSeaGreen align=center>
<tr><td align=right><b id=TBlock></b></td></tr>
<tr><td>
<p id="QArea">
<center>
<br>
Relax...! The duration of this exam is 5 minutes.
<br>
There is no order to answer a question. You may use Next as
well as Previous button to get a question to answer.
<br>
<br>
<input type=button name=btnFinish value="Start the Exam"
onClick="init()">
</center>
</p>
<input type=hidden name=ansNo>
</td></tr></table>
</form>

</body>
</html>





OLExam.asp


<%
Response.expires = 0
\'create an instance of MS XMLDOM Object
\'and load the QBank.xml file where all the questions are.

set obj = server.createobject("Microsoft.XMLDOM")
obj.async = false
obj.load(Server.MapPath("QBank.xml"))

\'very first request from the client
if trim(request("Action")) = "Start" then
\'set no of questions per exam
Dim NoQ,TotalQ

NoQ = 5 \'set no less than the totalquestions

\'count no of questions in the xml file
\'( or from database)
TotalQ = obj.selectNodes("data/question").length

Dim aQuest(),temp,isExist, strQ
ReDim aQuest(0) \'to store the question ids

\'generate (=NoQ) question ids randomly
while ubound(aQuest) < NoQ
isExist = false
temp = Int((TotalQ * Rnd) + 1)
for i = 1 to ubound(aQuest)
if aQuest(i) = temp then
isExist = true
exit for
end if
next
if Not isExist then
Redim Preserve aQuest(ubound(aQuest)+1)
aQuest(ubound(aQuest)) = temp
strQ = aQuest(i) & "," & strQ
end if
wend

\'remove the last comma \',\' from strQ
strQ = left(strQ,len(strQ)-1)

\'send the question in the strQ to the client
response.write strQ

\'all further requests - after the first request
elseif trim(request("Action")) = "NextQ" then
\'fetch the question from the XML Object
\'and form the output string
temp = "data/question[@id=" & trim(request("QNo")) & "]"

set Node = obj.selectSingleNode(temp)

strXML = "<data>"
strXML = strXML & "<qtext>"
strXML = strXML & Node.selectSingleNode("qtext").text
strXML = strXML & "</qtext>"
strXML = strXML & "<answer>"
strXML = strXML & Node.selectSingleNode("answer").text
strXML = strXML & "</answer>"

set Node = Node.selectNodes("choices/choice")

for i = 0 to Node.length-1
strXML = strXML & "<choice>"
strXML = strXML & Node.item(i).text
strXML = strXML & "</choice>"
next

strXML = strXML & "</data>"

\'send the output to the client
Response.Write (strXML)
end if
%>





QBank.xml

<?xml version="1.0"?>
<data>
<question id="1">
<qtext>What does KB stand for?</qtext>
<choices>
<choice>Kilo Bits</choice>
<choice>Key Board</choice>
<choice>Kilo Bytes</choice>
<choice>None</choice>
</choices>
<answer>3</answer>
</question>
<question id="2">
<qtext>CPU stands for</qtext>
<choices>
<choice>Central Processing Unit</choice>
<choice>Central Power Unit</choice>
<choice>Core Processing Unit</choice>
<choice>Core Power Unit</choice>
</choices>
<answer>1</answer>
</question>
<question id="3">
<qtext>1 KB equals</qtext>
<choices>
<choice>1000 Bytes</choice>
<choice>1024 Bytes</choice>
<choice>1000 Bits</choice>
<choice>1024 Bits</choice>
<choice>Nothing</choice>
</choices>
<answer>2</answer>
</question>
<question id="4">
<qtext>RAM is </qtext>
<choices>
<choice>Random Access Modifier</choice>
<choice>Primary Memory</choice>
<choice>Secondary Memory</choice>
<choice>Read And Modify</choice>
</choices>
<answer>2</answer>
</question>
<question id="5">
<qtext>Hard Disk is </qtext>
<choices>
<choice>Hard to break</choice>
<choice>Primary Memory Storage</choice>
<choice>Temporary Memory Storage</choice>
<choice>Secondary Memory Storage</choice>
</choices>
<answer>4</answer>
</question>
<question id="6">
<qtext>Computer Monitor is used </qtext>
<choices>
<choice>To monitor activities</choice>
<choice>To control Computer</choice>
<choice>As display unit</choice>
<choice>None</choice>
</choices>
<answer>3</answer>
</question>
<question id="7">
<qtext>XML stands for</qtext>
<choices>
<choice>Extended Markup Language</choice>
<choice>Extended Model Language</choice>
<choice>Extensible Markup Language</choice>
<choice>Extensible Model Language</choice>
</choices>
<answer>3</answer>
</question>
<question id="8">
<qtext>ASP stands for</qtext>
<choices>
<choice>Active Server Page</choice>
<choice>Application Service Provision</choice>
<choice>As Soon as Possible</choice>
<choice>All</choice>
</choices>
<answer>1</answer>
</question>
</data>
-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1