<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 }
//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++;
//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>
<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")) & "]"