当前位置: 代码迷 >> PHP >> 软件工程结对功课02
  详细解决方案

软件工程结对功课02

热度:101   发布时间:2016-04-28 16:38:32.0
软件工程结对作业02

1.设计思想:

  本次任务我用php实现的主要功能,默认必须有加减法。

  首先,创建index.php文件,在HTML语句里创建表单,表单内容包括,出题数目,最大最小值,及其他的一些选项。

  然后,创建rubric.php文件,将表单信息提交到此文件下,四则运算方法实现时调用传递过来的值。实现四则运算的方法和前几次用Java时的方法差不多,将代码做了修改和优化。将题目和答案分别放入question.txtanswer.txt文件里,以备后用。

  第三,创建submitAnswer.phpacceptAnswer.phpdeleteAnswer.phpjudgeAnswer.php文件,分别用于在线提交答案,接收答案,删除答案和判断答案。提交的答案放在answer1.txt文件里,判断答案时通过比较answer.txtanswer1.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>&nbsp;&nbsp; <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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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)." )&nbsp;&nbsp;".$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>
The Main Code

 

3.运行结果截图

 

4.编程体会

  通过这次任务,我真正体会到了什么是“做中学”。以前也看过PHP还有HTML的书,但很少动手去做,那时感觉都简单,没必要一个个做下实验。现在发现不是那样的,只有动手做了才会知道自己哪里还欠缺,哪里还需进一步学习。由于以前的想法,所以在预计耗费时间时认为各模块花费不了多长时间,直到做完这个程序才知道其实不是那样的。总之,通过这次任务,我知道了本学期剩下的时间应该往哪方面进一步学习。

 5.psp记录

 

  相关解决方案