1.设计思想:
本次任务我用php实现的主要功能,默认必须有加减法。
首先,创建index.php文件,在HTML语句里创建表单,表单内容包括,出题数目,最大最小值,及其他的一些选项。
然后,创建rubric.php文件,将表单信息提交到此文件下,四则运算方法实现时调用传递过来的值。实现四则运算的方法和前几次用Java时的方法差不多,将代码做了修改和优化。将题目和答案分别放入question.txt和answer.txt文件里,以备后用。
第三,创建submitAnswer.php、acceptAnswer.php、deleteAnswer.php和judgeAnswer.php文件,分别用于在线提交答案,接收答案,删除答案和判断答案。提交的答案放在answer1.txt文件里,判断答案时通过比较answer.txt和answer1.txt文件里的内容即可。
2.源程序代码
1 index.php 2 <!DOCTYPE html> 3 <!-- 4 start date 2016/3/28 5 completion date 2016/4/7 6 author Jing 7 this program is about four arithmetic operation 8 --> 9 <html> 10 <head> 11 <meta charset="UTF-8"> 12 <title>四则运算出题系统</title> 13 <script> 14 function check() { 15 var tt=/^(0|[1-9]\d*)$/; 16 if(!tt.test(form1.min.value)) 17 { 18 alert('最小值输入不合法'); 19 form1.min.focus(); 20 return false; 21 } 22 if(!tt.test(form1.max.value) || (form1.max.value<form1.min.value)) 23 { 24 alert('最大值输入不合法'); 25 form1.min.focus(); 26 return false; 27 } 28 if(!tt.test(form1.num.value) || (form1.num.value==0)) 29 { 30 alert('出题数目输入不合法'); 31 form1.num.focus(); 32 return false; 33 } 34 return true; 35 } 36 </script> 37 </head> 38 <body background="2.jpg"> 39 <button type="button">登录</button> <button type="button">注册</button> 40 <br/><br/> 41 <center> 42 <font color="red" size="7" face="楷体">欢迎来到小学四则运算出题系统</font> <br/><br/><br/> 43 44 <form action="rubric.php" target="_blank" method="post" name="form1" onsubmit="return check()" > 45 <font color="red" size="5">默认只有两个数参与运算的加减法</font> <br/><br/> 46 47 <font color="blue" size="4">请输入参与运算的最小数值(非负整数)</font> 48 <input type="text" name="min" /> <br/><br/> 49 50 <font color="blue" size="4">请输入参与运算的最大数值(非负整数且不小于最小数值)</font> 51 <input type="text" name="max" /> <br/><br/> 52 53 <font color="blue" size="4">请输入出题数目(正整数)</font> 54 <input type="text" name="num" /> <br/><br/> 55 56 <font color="blue" size="4">选择参与运算的数的个数</font> 57 <input type="radio" value="2" name="num1" checked />2 58 <input type="radio" value="3" name="num1" />3 59 <input type="radio" value="4" name="num1" />4 <br/><br/><!--num1中的1位1 2 3的1,不是l m n的l--> 60 61 <font color="blue" size="4">选择是否加入乘法</font> 62 <input type="radio" value="t" name="mul" />是 63 <input type="radio" value="f" name="mul" checked />否 <br/><br/> 64 65 <font color="blue" size="4">选择是否加入除法</font> 66 <input type="radio" value="t" name="div" />是 67 <input type="radio" value="f" name="div" checked />否 <br/><br/> 68 69 <input type="submit" value="确认" name="send" /> 70 <input type="reset" value="重置" name="send" /> 71 </form> 72 </center> 73 </body> 74 </html> 75 76 rubric.php 77 78 <html> 79 <head> 80 <meta charset="UTF-8"> 81 <title>出题界面</title> 82 </head> 83 <body bgcolor="LightCyan"> 84 85 <?php 86 if(is_numeric($_POST["max"])) 87 { 88 $max=$_POST["max"]; //最大值 89 } 90 if(is_numeric($_POST["min"])) 91 { 92 $min=$_POST["min"]; //最小值 93 } 94 if(is_numeric($_POST["num"])) 95 { 96 $num=$_POST["num"]; //出题数目 97 } 98 if(is_numeric($_POST["num1"])) 99 {100 $num1=$_POST["num1"]; //参与运算的个数101 }102 if(is_string($_POST["mul"]))103 {104 $mul=$_POST["mul"]; //选择是否加入乘法 是t否f105 }106 if(is_string($_POST["div"]))107 {108 $div=$_POST["div"]; //选择是否加入除法 是t否f109 }110 111 /* 定义数组 */112 $a=array(); //方法中使用,存储随机数字和运算符113 $amd=array(); //方法中使用,将算好乘/除法后的算式存入此数组114 $b=array(); //调用方法时使用115 $d=array(); //存储题目116 $e=array(); //存储答案117 118 /* Result 类用于封装结果 */119 class Result120 {121 public $r1; //$r1存储计算结果122 }123 124 /* 运算符只有加减的方法 */125 function addSub($min,$max,$num1,$result)126 {127 $str=mt_rand($min,$max);128 $re=$str;129 for($i=1;$i<$num1;$i++)130 {131 $a[$i]= mt_rand($min,$max);132 $c=mt_rand(0,1);133 if($c==0)134 {135 $str=$str." + ".$a[$i];136 $re=$re+$a[$i];137 }138 if($c==1)139 {140 $str=$str." - ".$a[$i];141 $re=$re-$a[$i];142 }143 }144 $result->r1=$re;145 $str=$str." = ";146 return $str;147 }148 149 /* 运算符为加减乘的方法 */150 function addSubMul($min,$max,$num1,$result)151 {152 $a[0]= mt_rand($min, $max);153 /* 将算式中的数和运算符存入数组$a */154 /*如果此循环中在运算符左右两侧加入空格,则在后面while循环中的if条件语句中的运算符也应加空格,否则会出错*/155 for($i=1;$i<(2*$num1-1);$i=$i+2) //(2*$num1-1) 为算式中参与运算的数和运算符个数之和156 {157 $c= mt_rand(0, 2);158 if($c==0)159 {160 $a[$i]=' + ';161 $a[$i+1]= mt_rand($min, $max);162 }163 if($c==1)164 {165 $a[$i]=' - ';166 $a[$i+1]= mt_rand($min, $max);167 }168 if($c==2)169 {170 $a[$i]=' x ';171 $a[$i+1]= mt_rand($min, $max);172 }173 }174 /* 将算式中的乘法算完后的算式存入数组$amd */175 $i=0;176 $j=0;177 while($i<(2*$num1-1)) //运算符左右是否有空格应和上面的for循环保持一致178 {179 if($a[$i]==' x ')180 {181 $amd[$j-1]=$amd[$j-1]*$a[$i+1];182 $i=$i+2;183 }184 else185 {186 $amd[$j]=$a[$i];187 $j++;188 $i++;189 }190 }191 /* 算出算式的答案$re */192 $re=$amd[0];193 $k=1;194 while($k<$j) //运算符左右是否有空格应和上面的for循环保持一致195 {196 if($amd[$k]==' + ')197 {198 $re=$re+$amd[$k+1];199 $k=$k+2;200 continue;201 }202 if($amd[$k]==' - ')203 {204 $re=$re-$amd[$k+1];205 $k=$k+2;206 }207 }208 /* 将数组中的值连接为字符串算式$str */209 $str=$a[0];210 for($i=1;$i<(2*$num1-1);$i++)211 {212 $str.=$a[$i];213 }214 $result->r1=$re;215 $str=$str." = ";216 return $str;217 }218 219 /* 运算符为加减除的方法 */220 function addSubDiv($min,$max,$num1,$result)221 {222 $a[0]= mt_rand($min, $max);223 /* 将算式中的数和运算符存入数组$a */224 for($i=1;$i<(2*$num1-1);$i=$i+2) 225 {226 $c= mt_rand(0, 2);227 if($c==0)228 {229 $a[$i]=' + ';230 $a[$i+1]= mt_rand($min, $max);231 }232 if($c==1)233 {234 $a[$i]=' - ';235 $a[$i+1]= mt_rand($min, $max);236 }237 if($c==2)238 {239 $a[$i]=' ÷ ';240 $a[$i+1]= mt_rand($min, $max);241 }242 }243 /* 将算式中的除法算完后的算式存入数组$amd */244 $i=0;245 $j=0;246 while($i<(2*$num1-1))247 {248 if($a[$i]==' ÷ ')249 {250 while(($amd[$j-1] % $a[$i+1]!=0) || $a[$i+1]==0 ) //避免除法有余数251 {252 $a[$i+1]= mt_rand($min,$max);253 }254 $amd[$j-1]=$amd[$j-1]/$a[$i+1];255 $i=$i+2;256 }257 else258 {259 $amd[$j]=$a[$i];260 $j++;261 $i++;262 }263 }264 /* 算出算式的答案$re */265 $re=$amd[0];266 $k=1;267 while($k<$j)268 {269 if($amd[$k]==' + ')270 {271 $re=$re+$amd[$k+1];272 $k=$k+2;273 continue;274 }275 if($amd[$k]==' - ')276 {277 $re=$re-$amd[$k+1];278 $k=$k+2;279 }280 }281 282 /* 将算式放入字符串$str */283 $str=$a[0];284 for($i=1;$i<(2*$num1-1);$i++)285 {286 $str.=$a[$i];287 }288 $result->r1=$re;289 $str=$str." = ";290 return $str;291 }292 293 /* 运算符为加减乘除的方法 */294 function addSubMulDiv($min,$max,$num1,$result)295 {296 $a[0]= mt_rand($min, $max);297 /* 将算式中的数和运算符存入数组$a */298 for($i=1;$i<(2*$num1-1);$i=$i+2)299 {300 $c= mt_rand(0, 3);301 if($c==0)302 {303 $a[$i]=' + ';304 $a[$i+1]= mt_rand($min, $max);305 }306 if($c==1)307 {308 $a[$i]=' - ';309 $a[$i+1]= mt_rand($min, $max);310 }311 if($c==2)312 {313 $a[$i]=' x ';314 $a[$i+1]= mt_rand($min, $max);315 }316 if($c==3)317 {318 $a[$i]=' ÷ ';319 $a[$i+1]= mt_rand($min, $max);320 }321 }322 /* 将算式中的除法算完后的算式存入数组$amd */323 $i=0;324 $j=0;325 while($i<(2*$num1-1))326 {327 if($a[$i]==' x ')328 {329 $amd[$j-1]=$amd[$j-1]*$a[$i+1];330 $i=$i+2;331 }332 else if($a[$i]==' ÷ ')333 {334 while(($amd[$j-1] % $a[$i+1]!=0) || $a[$i+1]==0 ) //避免除法有余数335 {336 $a[$i+1]= mt_rand($min,$max);337 }338 $amd[$j-1]=$amd[$j-1]/$a[$i+1];339 $i=$i+2;340 }341 else342 {343 $amd[$j]=$a[$i];344 $j++;345 $i++;346 }347 }348 /* 算出算式的答案$re */349 $re=$amd[0];350 $k=1;351 while($k<$j)352 {353 if($amd[$k]==' + ')354 {355 $re=$re+$amd[$k+1];356 $k=$k+2;357 continue;358 }359 if($amd[$k]==' - ')360 {361 $re=$re-$amd[$k+1];362 $k=$k+2;363 }364 }365 /* 将算式放入字符串$str */366 $str=$a[0];367 for($i=1;$i<(2*$num1-1);$i++)368 {369 $str.=$a[$i];370 }371 $result->r1=$re;372 $str=$str." = ";373 return $str;374 }375 376 $r= new Result();377 378 /* 两个数的加减法 */379 if(($num1==2) && ($mul=='f') && ($div=='f'))380 {381 $question = fopen("question.txt", "w");382 $answer= fopen("answer.txt", "w");383 for($i=0;$i<$num;$i++)384 {385 $j=0;386 $bool=true;387 $b[$i]= addSub($min, $max, $num1, $r);388 while(($r->r1)<0) //当结果为负时,重新随机389 {390 $b[$i]= addSub($min, $max, $num1, $r);391 }392 while(($bool) && ($i!=0))//避免重复393 {394 while($b[$i]==$b[$j])395 {396 $b[$i]= addSub($min, $max, $num1, $r);397 while(($r->r1)<0)//结果为负,重新出题398 {399 $b[$i]= addSub($min, $max, $num1, $r);400 }401 $j=0;402 }403 $j++;404 if($j==$i)405 {406 $bool=false;407 }408 } 409 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";410 $d[$i]=$b[$i]."\n";411 $e[$i]=$r->r1."\n";412 fwrite($question,$d[$i]);413 fwrite($answer,$e[$i]);414 }415 fclose($question);416 fclose($answer);417 }418 419 /* 两个数的加减乘法 */420 if(($num1==2) && ($mul=='t') && ($div=='f'))421 {422 $question = fopen("question.txt", "w");423 $answer= fopen("answer.txt", "w");424 for($i=0;$i<$num;$i++)425 {426 $j=0;427 $bool=true;428 $b[$i]= addSubMul($min, $max, $num1, $r);429 while(($r->r1)<0) //当结果为负时,重新随机430 {431 $b[$i]= addSubMul($min, $max, $num1, $r);432 }433 while(($bool) && ($i!=0))//避免重复434 {435 while($b[$i]==$b[$j])436 {437 $b[$i]= addSubMul($min, $max, $num1, $r);438 while(($r->r1)<0)//结果为负,重新出题439 {440 $b[$i]= addSubMul($min, $max, $num1, $r);441 }442 $j=0;443 }444 $j++;445 if($j==$i)446 {447 $bool=false;448 }449 } 450 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";451 $d[$i]=$b[$i]."\n";452 $e[$i]=$r->r1."\n";453 fwrite($question,$d[$i]);454 fwrite($answer,$e[$i]);455 }456 fclose($question);457 fclose($answer);458 }459 460 /* 两个数的加减除法 */461 if(($num1==2) && ($mul=='f') && ($div=='t'))462 {463 $question = fopen("question.txt", "w");464 $answer= fopen("answer.txt", "w");465 for($i=0;$i<$num;$i++)466 {467 $j=0;468 $bool=true;469 $b[$i]= addSubDiv($min, $max, $num1, $r);470 while(($r->r1)<0) //当结果为负时,重新随机471 {472 $b[$i]= addSubDiv($min, $max, $num1, $r);473 }474 while(($bool) && ($i!=0))//避免重复475 {476 while($b[$i]==$b[$j])477 {478 $b[$i]= addSubDiv($min, $max, $num1, $r);479 while(($r->r1)<0)//结果为负,重新出题480 {481 $b[$i]= addSubDiv($min, $max, $num1, $r);482 }483 $j=0;484 }485 $j++;486 if($j==$i)487 {488 $bool=false;489 }490 } 491 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";492 $d[$i]=$b[$i]."\n";493 $e[$i]=$r->r1."\n";494 fwrite($question,$d[$i]);495 fwrite($answer,$e[$i]);496 }497 fclose($question);498 fclose($answer);499 }500 501 /* 两个数的加减乘除法 */502 if(($num1==2) && ($mul=='t') && ($div=='t'))503 {504 $question = fopen("question.txt", "w");505 $answer= fopen("answer.txt", "w");506 for($i=0;$i<$num;$i++)507 {508 $j=0;509 $bool=true;510 $b[$i]= addSubMulDiv($min, $max, $num1, $r);511 while(($r->r1)<0)//结果为负,重新出题512 {513 $b[$i]= addSubMulDiv($min, $max, $num1, $r);514 }515 while(($bool) && ($i!=0))//判断重复516 {517 while($b[$i]==$b[$j])518 {519 $b[$i]= addSubMulDiv($min, $max, $num1, $r);520 while(($r->r1)<0)//结果为负,重新出题521 {522 $b[$i]= addSubMulDiv($min, $max, $num1, $r);523 }524 $j=0;525 }526 $j++;527 if($j==$i)528 {529 $bool=false;530 }531 }532 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";533 $d[$i]=$b[$i]."\n";534 $e[$i]=$r->r1."\n";535 fwrite($question,$d[$i]);536 fwrite($answer,$e[$i]);537 }538 fclose($question);539 fclose($answer);540 }541 542 /* 三个数的加减法 */543 if(($num1==3) && ($mul=='f') && ($div=='f'))544 {545 $question = fopen("question.txt", "w");546 $answer= fopen("answer.txt", "w");547 for($i=0;$i<$num;$i++)548 {549 $j=0;550 $bool=true;551 $b[$i]= addSub($min, $max, $num1, $r);552 while(($r->r1)<0)//结果为负,重新出题553 {554 $b[$i]= addSub($min, $max, $num1, $r);555 }556 while(($bool) && ($i!=0))//判断重复557 {558 while($b[$i]==$b[$j])559 {560 $b[$i]= addSub($min, $max, $num1, $r);561 while(($r->r1)<0)//结果为负,重新出题562 {563 $b[$i]= addSub($min, $max, $num1, $r);564 }565 $j=0;566 }567 $j++;568 if($j==$i)569 {570 $bool=false;571 }572 }573 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";574 $d[$i]=$b[$i]."\n";575 $e[$i]=$r->r1."\n";576 fwrite($question,$d[$i]);577 fwrite($answer,$e[$i]);578 }579 fclose($question);580 fclose($answer);581 }582 583 /* 三个数的加减乘法 */584 if(($num1==3) && ($mul=='t') && ($div=='f'))585 {586 $question = fopen("question.txt", "w");587 $answer= fopen("answer.txt", "w");588 for($i=0;$i<$num;$i++)589 {590 $j=0;591 $bool=true;592 $b[$i]= addSubMul($min, $max, $num1, $r);593 while(($r->r1)<0)//结果为负,重新出题594 {595 $b[$i]= addSubMul($min, $max, $num1, $r);596 }597 while(($bool) && ($i!=0))//判断重复598 {599 while($b[$i]==$b[$j])600 {601 $b[$i]= addSubMul($min, $max, $num1, $r);602 while(($r->r1)<0)//结果为负,重新出题603 {604 $b[$i]= addSubMul($min, $max, $num1, $r);605 }606 $j=0;607 }608 $j++;609 if($j==$i)610 {611 $bool=false;612 }613 }614 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";615 $d[$i]=$b[$i]."\n";616 $e[$i]=$r->r1."\n";617 fwrite($question,$d[$i]);618 fwrite($answer,$e[$i]);619 }620 fclose($question);621 fclose($answer);622 }623 624 /* 三个数的加减除法 */625 if(($num1==3) && ($mul=='f') && ($div=='t'))626 {627 $question = fopen("question.txt", "w");628 $answer= fopen("answer.txt", "w");629 for($i=0;$i<$num;$i++)630 {631 $j=0;632 $bool=true;633 $b[$i]= addSubDiv($min, $max, $num1, $r);634 while(($r->r1)<0)//结果为负,重新出题635 {636 $b[$i]= addSubDiv($min, $max, $num1, $r);637 }638 while(($bool) && ($i!=0))//判断重复639 {640 while($b[$i]==$b[$j])641 {642 $b[$i]= addSubDiv($min, $max, $num1, $r);643 while(($r->r1)<0)//结果为负,重新出题644 {645 $b[$i]= addSubDiv($min, $max, $num1, $r);646 }647 $j=0;648 }649 $j++;650 if($j==$i)651 {652 $bool=false;653 }654 }655 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";656 $d[$i]=$b[$i]."\n";657 $e[$i]=$r->r1."\n";658 fwrite($question,$d[$i]);659 fwrite($answer,$e[$i]);660 }661 fclose($question);662 fclose($answer);663 }664 665 /* 三个数的加减乘除法 */666 if(($num1==3) && ($mul=='t') && ($div=='t'))667 {668 $question = fopen("question.txt", "w");669 $answer= fopen("answer.txt", "w");670 for($i=0;$i<$num;$i++)671 {672 $j=0;673 $bool=true;674 $b[$i]= addSubMulDiv($min, $max, $num1, $r);675 while(($r->r1)<0)//结果为负,重新出题676 {677 $b[$i]= addSubMulDiv($min, $max, $num1, $r);678 }679 while(($bool) && ($i!=0))//判断重复680 {681 while($b[$i]==$b[$j])682 {683 $b[$i]= addSubMulDiv($min, $max, $num1, $r);684 while(($r->r1)<0)//结果为负,重新出题685 {686 $b[$i]= addSubMulDiv($min, $max, $num1, $r);687 }688 $j=0;689 }690 $j++;691 if($j==$i)692 {693 $bool=false;694 }695 }696 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";697 $d[$i]=$b[$i]."\n";698 $e[$i]=$r->r1."\n";699 fwrite($question,$d[$i]);700 fwrite($answer,$e[$i]);701 }702 fclose($question);703 fclose($answer);704 }705 706 /* 四个数的加减法 */707 if(($num1==4) && ($mul=='f') && ($div=='f'))708 {709 $question = fopen("question.txt", "w");710 $answer= fopen("answer.txt", "w");711 for($i=0;$i<$num;$i++)712 {713 $j=0;714 $bool=true;715 $b[$i]= addSub($min, $max, $num1, $r);716 while(($r->r1)<0)//结果为负,重新出题717 {718 $b[$i]= addSub($min, $max, $num1, $r);719 }720 while(($bool) && ($i!=0))//判断重复721 {722 while($b[$i]==$b[$j])723 {724 $b[$i]= addSub($min, $max, $num1, $r);725 while(($r->r1)<0)//结果为负,重新出题726 {727 $b[$i]= addSub($min, $max, $num1, $r);728 }729 $j=0;730 }731 $j++;732 if($j==$i)733 {734 $bool=false;735 }736 }737 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";738 $d[$i]=$b[$i]."\n";739 $e[$i]=$r->r1."\n";740 fwrite($question,$d[$i]);741 fwrite($answer,$e[$i]);742 }743 fclose($question);744 fclose($answer);745 }746 747 /* 四个数的加减乘法 */748 if(($num1==4) && ($mul=='t') && ($div=='f'))749 {750 $question = fopen("question.txt", "w");751 $answer= fopen("answer.txt", "w");752 for($i=0;$i<$num;$i++)753 {754 $j=0;755 $bool=true;756 $b[$i]= addSubMul($min, $max, $num1, $r);757 while(($r->r1)<0)//结果为负,重新出题758 {759 $b[$i]= addSubMul($min, $max, $num1, $r);760 }761 while(($bool) && ($i!=0))//判断重复762 {763 while($b[$i]==$b[$j])764 {765 $b[$i]= addSubMul($min, $max, $num1, $r);766 while(($r->r1)<0)//结果为负,重新出题767 {768 $b[$i]= addSubMul($min, $max, $num1, $r);769 }770 $j=0;771 }772 $j++;773 if($j==$i)774 {775 $bool=false;776 }777 }778 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";779 $d[$i]=$b[$i]."\n";780 $e[$i]=$r->r1."\n";781 fwrite($question,$d[$i]);782 fwrite($answer,$e[$i]);783 }784 fclose($question);785 fclose($answer);786 }787 788 /* 四个数的加减除法 */789 if(($num1==4) && ($mul=='f') && ($div=='t'))790 {791 $question = fopen("question.txt", "w");792 $answer= fopen("answer.txt", "w");793 for($i=0;$i<$num;$i++)794 {795 $j=0;796 $bool=true;797 $b[$i]= addSubDiv($min, $max, $num1, $r);798 while(($r->r1)<0)//结果为负,重新出题799 {800 $b[$i]= addSubDiv($min, $max, $num1, $r);801 }802 while(($bool) && ($i!=0))//判断重复803 {804 while($b[$i]==$b[$j])805 {806 $b[$i]= addSubDiv($min, $max, $num1, $r);807 while(($r->r1)<0)//结果为负,重新出题808 {809 $b[$i]= addSubDiv($min, $max, $num1, $r);810 }811 $j=0;812 }813 $j++;814 if($j==$i)815 {816 $bool=false;817 }818 }819 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";820 $d[$i]=$b[$i]."\n";821 $e[$i]=$r->r1."\n";822 fwrite($question,$d[$i]);823 fwrite($answer,$e[$i]);824 }825 fclose($question);826 fclose($answer);827 }828 829 /* 四个数的加减乘除法 */830 if(($num1==4) && ($mul=='t') && ($div=='t'))831 {832 $question = fopen("question.txt", "w");833 $answer= fopen("answer.txt", "w");834 for($i=0;$i<$num;$i++)835 {836 $j=0;837 $bool=true;838 $b[$i]= addSubMulDiv($min, $max, $num1, $r);839 while(($r->r1)<0)//结果为负,重新出题840 {841 $b[$i]= addSubMulDiv($min, $max, $num1, $r);842 }843 while(($bool) && ($i!=0))//判断重复844 {845 while($b[$i]==$b[$j])846 {847 $b[$i]= addSubMulDiv($min, $max, $num1, $r);848 while(($r->r1)<0)//结果为负,重新出题849 {850 $b[$i]= addSubMulDiv($min, $max, $num1, $r);851 }852 $j=0;853 }854 $j++;855 if($j==$i)856 {857 $bool=false;858 }859 }860 echo "( ".($i+1)." ) ".$b[$i]."<br/><br/>";861 $d[$i]=$b[$i]."\n";862 $e[$i]=$r->r1."\n";863 fwrite($question,$d[$i]);864 fwrite($answer,$e[$i]);865 }866 fclose($question);867 fclose($answer);868 }869 ?>870 <br/><br/><br/>871 <a href="submitAnswer.php" target="_blank">点此输入答案</a>872 </body>873 </html>874 875 submitAnswer.php876 877 <html>878 <head>879 <meta charset="UTF-8">880 <title>提交答案界面</title>881 <script>882 function check() {883 var tt=/^(0|[1-9]\d*)$/; //非负整数884 if(!tt.test(form2.answer.value))885 {886 alert('答案输入不合法');887 form2.answer.focus();888 return false;889 }890 return true;891 }892 </script>893 </head>894 <body bgcolor="Lavender">895 896 <center>897 <form action="acceptAnswer.php" method="post" name="form2" onsubmit="return check()">898 899 <font color="red" size="4">请输入答案,输入一次,提交一次,全部输入完毕后,再点击判断答案,否则可能会出错</font><br/><br/>900 <font color="red" size="4">每套题第一次输入前,请先清空答案</font><br/><br/>901 <input type="text" name="answer" /> <br/><br/>902 903 <input type="submit" value="确认" name="send" />904 <input type="reset" value="重置" name="send" />905 </form>906 <br/><br/><br/><br/><br/>907 <a href="deleteAnswer.php">点此清空答案</a>908 <br/><br/><br/><br/><br/>909 <a href="judgeAnswer.php">点此判断答案</a>910 </center>911 </body>912 </html>913 914 acceptAnswer.php915 916 <html>917 <head>918 <meta charset="UTF-8">919 <title>接收答案界面</title>920 <meta http-equiv="refresh" content="0.1;url=submitAnswer.php">921 </head>922 <body>923 <?php924 if(is_numeric($_POST["answer"]))925 {926 if($_POST["answer"]>=0) //只有输入的答案为非负时,才会接收927 {928 $ans=$_POST["answer"]."\n";929 }930 }931 $answer1= fopen("answer1.txt", "a");932 fwrite($answer1,$ans);933 fclose($answer1);934 ?>935 </body>936 </html>937 938 judgeAnswer.php939 940 <html>941 <head>942 <meta charset="UTF-8">943 <title>判断答案界面</title>944 </head>945 <body bgcolor="Thistle">946 <?php947 $an="answer.txt";948 $an1="answer1.txt";949 $a= fopen($an, "r");950 $a1= fopen($an1, "r");951 $c1 = count(file($an));//判断答案行数952 $c2 = count(file($an1));//判断用户输入答案文件的行数953 //行数$line取最小值954 if($c1<$c2)955 {956 $line=$c1;957 }958 else959 {960 $line=$c2;961 }962 $j=0; //做对的题数963 for($i=1;$i<=$line;$i++)964 {965 $aa= fgets($a);//读取单行文件966 $aa1= fgets($a1);967 if($aa==$aa1)968 {969 echo "第 ".$i." 道题答案正确<br/><br/>";970 $j++;971 }972 else973 {974 echo "第 ".$i." 道题答案错误,正确答案为".$aa."<br/><br/>";975 }976 }977 echo "<br/><br/>总共做对了 ".$j." 道题<br/>";978 ?>979 </body>980 </html>981 982 deleteAnswer.php983 984 <html>985 <head>986 <meta charset="UTF-8">987 <title>清空答案界面</title>988 <meta http-equiv="refresh" content="0.1;url=submitAnswer.php">989 </head>990 <body>991 <?php992 fclose(fopen('answer1.txt','w'));993 ?>994 </body>995 </html>
3.运行结果截图
4.编程体会
通过这次任务,我真正体会到了什么是“做中学”。以前也看过PHP还有HTML的书,但很少动手去做,那时感觉都简单,没必要一个个做下实验。现在发现不是那样的,只有动手做了才会知道自己哪里还欠缺,哪里还需进一步学习。由于以前的想法,所以在预计耗费时间时认为各模块花费不了多长时间,直到做完这个程序才知道其实不是那样的。总之,通过这次任务,我知道了本学期剩下的时间应该往哪方面进一步学习。
5.psp记录