exam

其中 填空题的 空 使用[q][/q]
\[q\].*?\[\/q\]匹配的
examine.htm

<!--{if empty($_TPL['getmore'])}-->	
<!--{eval $_TPL['titles'] = array('首页');}-->
<!--{template header_exam}-->

<script language="JavaScript" type="text/javascript" src="source/jquery-1.3.2.min.js"></script>	
<script language="JavaScript" type="text/javascript" src="source/jquery-ui-1.7.1.custom.min.js"></script>	
<script language="JavaScript" type="text/javascript" src="source/public.js"></script>	
<script language="JavaScript" type="text/javascript" src="source/script_exam.js"></script>

<div id="dialog-confirm" title="您确定要继续提交?"></div>
<div id="dialog-exit" title="您确定要放弃考试?">是否要放弃考试,如果现在放弃,将不记录考试成绩,并且考试次数将减少一次!</div>
<div id="dialog-time" title="限制时间内不能提交考试"></div>
<div id="dialog-goto" title="非法行为!">检测到您有非法退出的行为!</div>
<!--{if $_GET['op'] == 'examine'}-->
		<div id="wrap">
	
		<!--{if empty($_TPL['nosidebar'])}-->
		<div id="main">
	<div class="side">
	<div class="block style1" style="min-height:520px;background:#DDEFFB;">
	<h2>题目序列</h2>
	说明:试题序号的底色为白色时表示该题未答,为蓝色时表示该题已答。
	<hr>
	<ul class="folder" style="width:102px;" id="tsn">
	</ul>
	 
	</div>

	</div>
	
			<div id="mainarea">
			
			<!--{if $_SGLOBAL['ad']['contenttop']}--><div id="ad_contenttop"><!--{ad/contenttop}--></div><!--{/if}-->
		<!--{/if}-->
	
	<!--{/if}-->
	

	<span id="pid" style="display:none;">{$paid}</span>
	<span id="pf" style="display:none;">{$_SCONFIG['postafter']}</span>
	<div id="content" style="width:800px;">
	
		
		<div class="feed" >
			<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
			  <tr>
			    <td width="460" height="22" colspan="2"><strong>考试科目:<span style="color:red;">$partname</span></strong></td>
			    <td  rowspan="3" align="center">考试剩余时间:<span id="lasttime" style="color:red;font-size:14px;font-weight:bold;"></span><br><br><a href="#" onclick="return exam_exit();" style="text-decoration:underline;">放弃考试</a>&nbsp;&nbsp;<img src="/image/btn_jj.gif"  onclick="return submittest();" style="cursor:pointer;"></td>
			  </tr>
			  <tr>
			    <td width="460" height="22" colspan="2"><div id="jdt">考试进度:<span id="exam_progress" ></span></div></td>

			  </tr>
			  <tr>
			    <td height="22" colspan="2">已答试题:<span id="qt" style="color:red;"></span>     未答试题:<span id="qf" style="color:red;"></span> </td>
			    <td align="center"></td>
			  </tr>
			</table>
		</div>
		
		<div id="q_content" style="border:1px solid #eeeeee;padding:10px;display:inline-block;">
			<div id="q_sn"> </div>
			<div id="q_title" style="margin-left:50px;"></div>
			<div id="select_answer" style="margin-left:50px;"></div>
			<div id="my_answer" style="margin-left:50px;"></div>
			<div>
			<form name="exam" action="space.php?do=exam&op=exam_submit" method="POST"  >
			<textarea name="quest" id="last_answer" style="width:480px;height:200px;display:none;" ></textarea>
			</form>
			</div>
			<hr style="border:1px solid #eeeeee;">
			<table style="margin-left:50px;"><tr><td id="goto_page"></td></tr></table>
<!--			<div id="goto_page" style="display:inline-block;margin-left:50px;width:60%;border:1px solid green;"></div>-->
		</div>
	
	</div>		
	<!--{/if}-->
	
	<script language="JavaScript" type="text/javascript">
		var pid = $("#pid").html();
		get_paper(pid);
$(function(){
	$("#dialog-confirm").dialog({
		autoOpen:false,
		resizable: false,
		width:200,
		height:140,
		modal: true,
		buttons: {
			继续答题: function() {
				$(this).dialog('close');
				return false;
			},			
			确认交卷: function() {
				window.onbeforeunload = null;
				submital();
				$(this).dialog('close');
			}
		}
	});
	
	$("#dialog-exit").dialog({
		autoOpen:false,
		resizable: false,
		width:320,
		height:150,
		modal: true,
		buttons: {
			取消: function() {
				$(this).dialog('close');
				return false;
			},			
			确定: function() {
				unclose();
				window.location = "space.php";
				$(this).dialog('close');
			}
		}
	});	
	
	$("#dialog-time").dialog({
		autoOpen:false,
		resizable: false,
		width:320,
		height:150,
		modal: true,
		buttons: {
		
			确定: function() {
				$(this).dialog('close');
			}
		}
	});	
	
	$("#dialog-goto").dialog({
		autoOpen:false,
		resizable: false,
		width:320,
		height:150,
		modal: true,
		buttons: {
		
			继续考试: function() {
				$(this).dialog('close');
			}
		}
	});
	
	make_pic();
	
});
	</script>
<!--{/if}-->




<!--{template footer}-->








lms = "";
rms = 0;
pms = "";
qtinfo = {"1":"单选题","2":"多选题","3":"判断题","4":"填空题","5":"简答题","6":"论述题"};
quest = "";
qtv = "";
qfv = "";
MyUtil={};

	function obj2str(o){
		var r = [];
		if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
		if(typeof o =="undefined") return "";
		if(typeof o == "object"){
			if(o===null) return "null";
			else if(!o.sort){
				for(var i in o)
				r.push('"'+i+"\":"+obj2str(o[i]))
				r="{"+r.join()+"}"
			}else{
				for(var i =0;i<o.length;i++)
				r.push(obj2str(o[i]))
				r="["+r.join()+"]"
			}
			return r;
		}
		return o.toString();
	}

//考试初始化
function get_paper(pid){
	$.get("student!examine.do",{"ajax":"yes","paperid":1,"rad":Math.random()},function(data){
		if(data == 'nodata'){
			alert('暂时没有试卷!');
			window.location = "space.php";
			return false;
		}
		//alert(unescape(data.replace(/\\u/g,'%u')));
		data = eval('('+unescape(data.replace(/\\u/g,'%u'))+')');
		//alert(data.paper.prompt);
		lms = data.paper.totaltime;
		pms = data.paper.postafter;
		quest = data.question;
		make_sntree(quest);                  //生成序列树
		goto_topic(quest[0]['questionorder']);        //生成第一道题
		update_already(0,quest.length);  //更新已做未做
		setInterval("set_last_time()",1000); //设置倒计时
	});
}

//传入时间戳,显示倒计时
function get_last_time(ms){
	var s =  ms % 60;    //得到剩余秒
	var m = (ms-s) / 60; //得到剩余分
	s = s + '';
	s = (s.length == 1) ? '0'+s : s ;
	return {"m":m,"s":s}
}

//更新倒计时
function set_last_time(){
	lms--;
	
	if(lms == 0){
		submital();
	}
	
	rms++;
	ems = get_last_time(lms);
	$("#lasttime").html(ems.m+"分"+ems.s+"秒");
}

//生成序列树
function make_sntree(quest){
	if(quest == undefined){
		alert("没有获取到考题!");
		return false;
	}
	
	for(i=0;i<quest.length;i++){
		var qsn       = quest[i].questionorder;       //得到题序号(qsn)
		var qid       = quest[i].qid;       //得到题号(qid)
		var qtype     = quest[i].type;     //题型标识(qtype)
		var qtypeinfo = qtinfo[quest[i].type]; //题型说明(qtypeinfo)
		if(!$("#qt_"+qtype).html() && !$("#tn_"+qtype).html()){
			$("#tsn").append('<li class="active" id="qt_'+qtype+'"><a>'+qtypeinfo+'</a><div id="tn_'+qtype+'"><a class="qe1" id="sn_'+qsn+'"  onclick="goto_topic('+qsn+');">'+qsn+'</a></div></li><br><br>');
		}else{
			$("#tn_"+qtype).append('<a class="qe1" id="sn_'+qsn+'"   onclick="goto_topic('+qsn+');">'+qsn+'</a>');
		}
	}
}


//更新已做未做
function update_already(qt,qf){
	if(qt == undefined && qf == undefined){
		var r=0;
		var c=quest.length;
		
		for(i=0;i<c;i++){
			if(quest[i].isalready == '1'){
				r++;
			}
		}
		qtv = r;
		qfv = c-r;		
	}else{
		qtv = qt;
		qfv = qf;
	}
	
	$("#qt").html(qtv);
	$("#qf").html(qfv);
}


//根据题ID生成并跳到题目
function goto_topic(qsn){
	var qid = quest[qsn-1]['qid'];
	var qtype = quest[qsn-1]['type'];
	var qinfo = qtinfo[qtype];
	var score = quest[qsn-1]['questionscore'];
	var sa = "";
	var qcount = quest.length;
	var psn = parseInt(qsn)-1;
	var nsn = parseInt(qsn)+1;
	var ranswer = quest[psn]['rightanswer'];
	var re  = /\[q\].*?\[\/q\]/g;
	
	$("#my_answer").hide();
	$.get("student!question.do",{"ajax":"yes","qid":qid,"rad":Math.random()},function(data){
		if(data == 'noquest'){
			alert('没有找到考题!');
			return false;
		}
		data = eval('('+unescape(data.replace(/\\u/g,"%u"))+')');
		var ds = data.selectanswer;
		var title = re.test(data.title) ? data.title.replace(re,'&nbsp;<input type="text" size="4" style="border:1px solid #eeeeee;"  onblur="set_answer('+qsn+',document.getElementById(\'q_title\'),\''+qtype+'\')">&nbsp;') : data.title ;
		//alert(title);
		var ret1 = /(<p><span.*?>)\d+[\..\,,。、](.*?)(<\/span>)<\/p>/;
		var ret2 = /(<p>)\d+[\..\,,。、](.*?)<\/p>/;
		var ret3 = /^(\d+[\..\,,。、])(.*?)/;
		if(ret1.test(title)){
			title = title.replace(ret1,"$1$2$3");
		}

		if(ret2.test(title)){
			title = title.replace(ret2,"$1$2$3");
		}
		
		if(ret3.test(title)){
			title = title.replace(ret3,"$2");
		}
		
		if(isinarr(new Array('1','2','3'),qtype)){
			title += '<span id="input_answer" style="font-weight:bold;color:green;">['+quest[parseInt(qsn)-1]['studentanswer']+']</span>';
		}
		
		$("#q_sn").html('第'+qsn+'题 ('+qinfo+')');
		$("#q_title").html(title);
		$("#q_title").html(title+'  ('+score+'分)');
		
		if(qsn == '1'){
			$("#goto_page").html(' <img src="image/nq.gif" onclick="goto_topic(\''+nsn+'\');" style="cursor:pointer;"> ');
		}else if(qsn == qcount){
			$("#goto_page").html(' <img src="image/pq.gif" onclick="goto_topic(\''+psn+'\');" style="cursor:pointer;">');
		}else{
			$("#goto_page").html(' <img src="image/pq.gif" onclick="goto_topic(\''+psn+'\');" style="cursor:pointer;">&nbsp;&nbsp; <img src="image/nq.gif" onclick="goto_topic(\''+nsn+'\');" style="cursor:pointer;">');
		}

		switch(qtype){
			case "1":
			case "3":
				for(i=0;i<ds.length;i++){
					k = ds[i].substr(0,1);
					sed = k == quest[qsn-1]['studentanswer'] ? "checked" : "" ;
					sa += '<input type="radio" name="an_'+qid+'" value="'+k+'" onclick="set_answer('+qsn+',this,\''+qtype+'\')" '+sed+' >&nbsp;&nbsp;'+ds[i]+'<br><br>';
				}
				break;
			case "2":
				for(i=0;i<ds.length;i++){
					k = ds[i].substr(0,1);
					sed = (quest[qsn-1]['studentanswer'].indexOf(k) < 0) ? "" : "checked" ;
					sa += '<input type="checkbox" name="an_'+qid+'" value="'+k+'" onclick="set_answer('+qsn+',this,\''+qtype+'\')" '+sed+' >&nbsp;&nbsp;'+ds[i]+'<br><br>';
				}
				break;
			case "5":
			case "6":
				$("#my_answer").show();
				val = quest[qsn-1]['studentanswer'].length ? quest[qsn-1]['studentanswer'] : "";
				$("#my_answer").html('<textarea style="width:480px;height:200px;" onblur="set_answer('+qsn+',this,\''+qtype+'\')">'+val+'</textarea>');
				break;
		}

		$("#select_answer").html(sa);
	
	});
	document.documentElement.scrollTop=0;
}

//答题方法
function set_answer(qsn,obj,qtype){
	//将答案更新到全局变量里
	switch(qtype){
		case "1":
		case "3":
		case "5":
		case "6":
			quest[parseInt(qsn)-1]['studentanswer'] = $.trim(obj.value);
			break;
		case "2":
			if(obj.checked){
			var anw = quest[parseInt(qsn)-1]['studentanswer'].indexOf(obj.value) < 0 ? obj.value : "" ;
			quest[parseInt(qsn)-1]['studentanswer'] += anw;
			quest[parseInt(qsn)-1]['studentanswer'] = str_sort(quest[parseInt(qsn)-1]['studentanswer']);
			}else{
				quest[parseInt(qsn)-1]['studentanswer'] = quest[parseInt(qsn)-1]['studentanswer'].replace(obj.value,"");
			}
			break;
		case "4":
			var anobj = $("#"+obj.id+" input");
			var anarr = new Array();
			
			for(i=0;i<anobj.length;i++){
				anarr.push(anobj[i].value);
			}
			quest[parseInt(qsn)-1]['studentanswer'] = anarr;

			break;
	}

	if(isinarr(new Array('1','2','3'),qtype)){
		var anreg = /(<span\s+.*?id=input_answer.*?>\[).*?(\]<\/span>)/i;
		//alert(navigator.userAgent);
		if(navigator.userAgent.indexOf("MSIE") > 1){
			anreg = /(<span\s+.*?id=input_answer.*?>\[).*?(\]<\/span>)/i;
		}else if(navigator.userAgent.indexOf("AppleWebKit") >1){
			anreg = /(<span\s+.*?id=\"input_answer\".*?>\[).*?(\]<\/span>)/i;
		}else if(navigator.userAgent.indexOf("Firefox") > 1){
			anreg = /(<span\s+.*?id=\"input_answer\".*?>\[).*?(\]<\/span>)/i;
		}
		var qhtml = $("#q_title").html();
		$("#q_title").html(qhtml.replace(anreg,"$1"+quest[parseInt(qsn)-1]['studentanswer']+"$2"));
	}
	
	quest[parseInt(qsn)-1]['isalready'] = '1';     //设置为已答
		
	//更新到服务器,未做。。。
	update_already();
	set_progress();
	$("#sn_"+qsn).attr("class","qe2");
}

//交卷方法
function submital(){
//	qdata = new Array();
//	for(i=0;i<quest.length;i++){
//		qdata[i] = new Object();
//		qdata[i].questionorder = quest[i].questionorder;
//		qdata[i].studentanswer = quest[i].studentanswer;
//		qdata[i].isalready = quest[i].isalready;
//		
//		
//		
//		
//		
//	}

	qdata = obj2str(quest);
	//$("#last_answer").show();
	$("#last_answer").html(qdata);
	
	if(window.onbeforeunload = null){
		document.exam.submit();
	}
	document.exam.submit();
}

////加入错题本:
//function intoError(sid,spid,pid,qid){
//	$.get("space.php",{"do":"ajax","op":"infoError","sid":sid,"spid":spid,"paperid":pid,"qid":qid,"rad":Math.random()},function(data){
//		if(data == 'exist'){
//			alert('该题早已加入错题本!');
//		}else if(data == 'full'){
//			alert('错题本已满,不能加入!');
//		}else if(data == 'ok'){
//			alert('加入错题本成功!');
//			$("#err_"+qid).html('<img src="image/btn_exist.gif" border="0">');
//			//$("#err_"+qid).css("color","#228B22");
//		}else if(data == 'no'){
//			alert('加入错题本失败!');
//		}
//	});	
//}

//更新到服务器缓存
//function update_cache(qsn,qan){
//	
//	qdata = new Array();
//	
//	for(i=0;i<quest.length;i++){
//		qdata[i] = new Object();
//		qdata[i].questionorder = quest[i].questionorder;
//		qdata[i].studentanswer = quest[i].studentanswer;
//		qdata[i].isalready = quest[i].isalready;
//	}
//
//	qdata = obj2str(qdata);
//	
//	$.post("space.php?do=ajax",{"op":"update_exam_cache","qdata":qdata,"rad":Math.random()},function(data){
//		if(data != "ok"){
//			alert("更新答题到服务器失败!");
//			return false;
//		}
//	});
//}

//操作试题分析
function analyse(qsn){
	$(".an_"+qsn).toggle();
	$("#anal_"+qsn).html().indexOf("打开") >= 0 ? $("#anal_"+qsn).html("关闭试题解析") : $("#anal_"+qsn).html("打开试题解析") ;
}

//放弃考试提示
function exam_exit(){
	$("#dialog-exit").dialog("open");
	return false;
}


//交卷前的提示程序
function submittest(){
	var pfv = parseInt($("#pf").html());
	if(rms < pfv){
		$("#dialog-time").html("考试时间不足"+pfv+"秒,不能交卷!");
		$("#dialog-time").dialog("open");
	}else{
		var qf = parseInt($("#qf").html());
		if(qf>0 && parseInt(lms)){
			$("#dialog-confirm").html("您还有"+qf+"道试题未做,是否继续交卷!");
			$("#dialog-confirm").dialog("open");
		}else{
			return submital();
		}		
	}
}

//生成空进度条
function make_pic(){
	var mpic = "";
	for(i=1;i<=20;i++){
		mpic += '<img class="epg" id="pg_'+i+'" src="image/jd_gray.gif" >';
	}
	$("#exam_progress").html(mpic);
}

//设置进度条进度
function set_progress(){
	var qt = parseInt($("#qt").html());   //得到已做题数
	var qf = parseInt($("#qf").html());   //得到未做题数
	var qc = qt+qf; //得到总共题数
	
	var pv = Math.round(20 * (qt / qc)); //得到进度值
	$(".epg").attr("src","image/jd_gray.gif");
	for(i=1;i<=pv;i++){
		$("#pg_"+i).attr("src","image/jd_blue.gif");
	}
}

//是否交卷
function issubmit(){
	if(!confirm("所有考题已做完,是否立即交卷?")){
		return false;
	}else{
		submital();
	}
}

function test(){
	var obj = document.getElementById("dialog-confirm").style;
	$.each(obj,function(i,n){
		alert(i+','+n);
	});
}




Action
private String quest;

getter setter




传进来的json
{"paper":
				{"endtime":"","sid":"112",
				"pass_score":"60",
				"starttime":"1314092189",
				"laststate":"",
				"total_score":"100",
				"already_nums":"",
				"ispass":"0",
				"marktype":"0",
				"question_nums":"130",
				"examtype":"1",
				"get_score":"",
				"partid":"12",
				"postafter":"60",
				"prompt":{"90":"高 手 啊","70":"恭 喜 获 得 高 分","80":"太 厉 害 了","60":"恭 喜 及 格","100":"无 敌 了"},
				"totaltime":"7200",
				"paperid":"23",
				"subjectivetype":"0",
				"residual_nums":""},
		"question":[
				{
				"selectanswer":["A:答案A","B:答案B","C:答案C","D:答案D"],
				"rightanswer":"中国人民银行开始行使直接审批金融机构的职能",
				"studentanswer":"",
				"qid":3,
				"marktype":"1",
				"type":1,
				"isright":"0",
				"info":"",
				"qtypeinfo":"单 选 题",
				"title":"就监督管理部分而言,第十届全国人民代表大会常务委员会第六次会议通过的《中国人民银行法修正案》修订的重点是?",
				"questionorder":1,
				"isalready":"0",
				"questionscore":10,
				"studentscore":""
				}]
}


传出的json
[{"selectanswer":["A:id=1选项A","B:选项B","C:选项C","D:选项D"],
	"rightanswer":"question_id为一的题",
	"studentanswer":"A",
	"qid":1,
	"marktype":"1",
	"type":"1",
	"isright":"0",
	"info":"",
	"qtypeinfo":"单 选 题",
	"title":"question_id为一的题",
	"questionorder":1,
	"isalready":"1",
	"questionscore":10,
	"studentscore":""},
	{"selectanswer":["A:选项A","B:选项B","C:选项C","D:选项D"],
	 "rightanswer":"中国人民银行开始行使直接审批金融机构的职能",
	 "studentanswer":"A",
	 "qid":3,
	 "marktype":"1",
	 "type":"1",
	 "isright":"0",
	 "info":"",
	 "qtypeinfo":"单 选 题",
	 "title":"就监督管理部分而言,第十届全国人民代表大会常务委员会第六次会议通过的《中国人民银行法修正案》修订的重点是?",
	 "questionorder":2,
	 "isalready":"1",
	 "questionscore":10,
	 "studentscore":""
}]



你可能感兴趣的:(exam)