|
下午结束了军事理论考试,大概有接近一半的题目是昨晚训练过的吧,有印象就直接背答案。没印象的就悲剧了,只能瞎猜,例如试卷的第二题是
2) 我国的《国防教育法》一共有——篇——条。
A、4篇 38条 B、6篇 38条 C、4篇 28条 D、7篇 28条
这题就不会做,瞎猜了,而且我还猜错了。。。
昨晚从同学里弄来的一套选择题和判断题,合计190多道,花了一点时间用php做成了网页给自己测试:
点击此链接开始 http://xiaoxia.org/sub/jstest
原来的文本内容大概如下:
15.国防是随着( B)的出现而产生的。 A 阶级 B 国家 C 军队 D 社会
16.“天下虽安,忘战必危”出自于(C )。
A 《孙子兵法》 B《孙膑兵法》 C《司马法·仁本》 D 《战争论》
17.下列不属于国防要素内容的是(D ) A政治要素 B 经济要素 C文化要素 D历史要素
18.下列哪个朝代对长城陆续加工增修并逐渐改建成最接近今天的面貌。(B )
A 宋朝 B 明朝 C 唐朝 D 清朝
19.下列哪一项不属于我国国防史的启示。(A )
A 只有军队强大才能有强大的国防 B 只有经济强盛才能有强大的国防
C 只有政治昌明才能有巩固的国防 D 只有民族团结和统一才能有坚强的国防
也有可能是选择题。另外,文本里还混合有简答题。因此,必须设计一个算法,把里面的选择题和判断题提取出来,其它的全部忽略掉。随手写了一个马马虎虎的状态机,用来满足自己做题训练的需求!!!因为是临时使用的,写的不好莫见怪!我只想能用就行。
代码:
<?php
$c = file_get_contents("js.txt");
$len = strlen($c);
$st = "start";
$title =
$ansA =
$ansB =
$ansC =
$ansD =
$ref = "";
$tf = false;
$count = 1;
if(isset($_GET['index']))
$index = $_GET['index']*1;
else
$index = 1;
echo '<html><head><title>军事</title><meta http-equiv="content-type" content="text/html;charset=utf-8"></head><body>';
function addProblem()
{
global $index, $count, $ansA, $ansB, $ansC, $ansD, $ref, $tf, $title;
if( $index == $count ){
if($tf){
echo "<p>判断:</p><p>{$index}. {$title}</p><p><a href=\"javascript:sel('T');\"> 正确 </a></p><a href=\"javascript:sel('F');\"> 错误 </a></p>";
}else{
echo "<p>选择:</p><p>{$index}. {$title}</p><p><a href=\"javascript:sel('A');\">A {$ansA} </a>
</p><p><a href=\"javascript:sel('B');\">B {$ansB} </a></p>
<p><a href=\"javascript:sel('C');\">C {$ansC} </a></p>
<p><a href=\"javascript:sel('D');\">D {$ansD} </a></p>";
}
echo '<p><div id="result"></div></body></html>
<script type="text/javascript">
function sel(ans){
if(ans=="'.$ref.'"){
document.getElementById("result").innerHTML = \'<a href="?index='.($index+1).'"><font color="green">下一题</font></a>\';
}else{
document.getElementById("result").innerHTML = \'<font color="red">您选错了!</font>\';
}
}
</script>
';
die("");
}
$count ++;
$title = "";
$ref = "";
$ansA = "";
$ansB = "";
$ansC = "";
}
for($i=0; $i<$len; $i++ ){
$ch = $c[$i];
if($ch==' '||$ch=="\r"||$ch=="\n"){
$b = true;
$last = $ch;
continue;
}
switch($st){
case "start":
if($ch=='.'||$ch=='、'){
$st = "title";
}
break;
case "title":
if($ch=='('){
$title .= '( ';
$st = "ref";
}else if ($ch==')'){
$st = "start";
$title = "";
}else{
$title .= $ch;
}
break;
case "ref":
if($ch=='A'||$ch=='B'||$ch=='C'||$ch=='D'){
$ref = $ch;
}else if( $ch==')' ){
$title .= ' )';
if($tf==true){
$st = "start";
addProblem();
$tf = false;
}else
$st = "title2";
}else if( $ch=='T' || $ch=='F' ){
$ref = $ch;
$tf = true;
}else{
$st = "start";
$title = "";
$ref = "";
}
break;
case "title2":
if($b && $ch=='A'){
$st = "ansA";
}else{
$title .= $ch;
}
break;
case "ansA":
if($b && $ch=='B'){
$st = "ansB";
}else{
$ansA .= $ch;
}
break;
case "ansB":
if($b && $ch=='C'){
$st = "ansC";
}else{
$ansB .= $ch;
}
break;
case "ansC":
if($b && $ch=='D'){
$st = "ansD";
}else if($b && ($last=="\n"||$last=="\r") ){
$st = "start";
addProblem();
}else{
$ansC .= $ch;
}
break;
case "ansD":
if($b && $ansD!=''){
$st = "start";
addProblem();
}else{
$ansD .= $ch;
}
break;
}
$b = false;
}
echo strlen($c);
?>
另外,php的命令行挺好用的,方便调试脚本,直接在终端输入:
php -f test.php
来执行一个脚本。
|