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>  <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,' <input type="text" size="4" style="border:1px solid #eeeeee;" onblur="set_answer('+qsn+',document.getElementById(\'q_title\'),\''+qtype+'\')"> ') : 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;">   <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+' >  '+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+' >  '+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":""
}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: exam_formatter是一个用于格式化考试试卷的工具,它可以帮助用户将考试试卷转化为规范的格式。 首先,exam_formatter提供了多种题型的支持,如选择题、填空题、简答题等。用户可以根据需要选择相应的题型,并按照指定的格式书写题目和选项。 其次,exam_formatter具有自动编号功能,能够自动为题目和选项进行编号。用户只需输入题目内容,exam_formatter会自动生成带有编号的题目。 此外,exam_formatter还提供了自定义选项功能,用户可以根据需要设置选项的格式,比如设置选项为大写字母、小写字母、数字等。 除了题目格式化外,exam_formatter还支持试卷题目的排版。用户可以设置试卷的布局、字体、边距等样式,使试卷看起来更加整齐、美观。 最后,exam_formatter还可以输出试卷为多种格式,如PDF、Word等。用户可以根据需要选择合适的输出格式,方便打印或分享给他人。 总的来说,exam_formatter是一个强大的考试试卷格式化工具,通过它可以使试卷的格式规范化、整洁化,并提高工作效率。无论是教师还是学生,都可以受益于它的使用。 ### 回答2: exam_formatter是一个用于格式化考试文本的工具。它可以将原始的考试文本转化为易于阅读和评分的格式。通过使用exam_formatter,教师可以更方便地组织考试内容,学生也可以更清楚地理解考试要求。 exam_formatter具有以下特点和功能: 1. 标题和子标题格式化:exam_formatter可以自动识别标题和子标题,并将其格式化为适当的字体、样式和标识符。这样就能够清晰地区分不同部分的考试内容。 2. 题目编号和分值:使用exam_formatter,教师可以为每个题目指定编号和分值。这样,学生在完成考试时可以方便地参照题目编号,教师也可以快速计算分数。 3. 选项和答案格式化:exam_formatter可以将选择题的选项和答案显示为清晰的列表,从而使学生更容易理解和选择正确答案。对于填空题和简答题,exam_formatter可以为学生提供足够的空间来填写答案。 4. 附加说明和指导:exam_formatter还可以为每个题目提供附加说明和指导。这些说明可以帮助学生更好地理解题目要求,提供一些解题思路和技巧。 5. 导出和打印:一旦考试文本完成格式化,教师可以选择导出为可编辑的文档格式,如Microsoft Word或PDF。这样,教师可以在需要的时候进行修改和打印。 总之,exam_formatter是一个功能强大的工具,可以大大简化教师的考试准备工作,提高学生对考试内容的理解和应对能力。它为考试文本提供了清晰、易读和便于评分的格式,为教师和学生提供了更好的考试体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值