软件工程结对功课02

软件工程结对作业02

1.设计思想:

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

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

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

  第三,创建submitAnswer.phpacceptAnswer.phpdeleteAnswer.phpjudgeAnswer.php文件,分别用于在线提交答案,接收答案,删除答案和判断答案。提交的答案放在answer1.txt文件里,判断答案时通过比较answer.txtanswer1.txt文件里的内容即可。

2.源程序代码

 

软件工程结对功课02软件工程结对功课02
  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否f
105             }
106             if(is_string($_POST["div"]))
107             {
108                 $div=$_POST["div"];  //选择是否加入除法 是t否f
109             }
110             
111             /* 定义数组 */
112             $a=array();  //方法中使用,存储随机数字和运算符
113             $amd=array(); //方法中使用,将算好乘/除法后的算式存入此数组
114             $b=array();  //调用方法时使用
115             $d=array();  //存储题目
116             $e=array();  //存储答案
117             
118             /* Result 类用于封装结果 */
119             class Result
120             {
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                     else
185                     {
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                     else
258                     {
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                     else
342                     {
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.php
876 
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.php
915 
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         <?php
924             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.php
939 
940 <html>
941     <head>
942         <meta charset="UTF-8">
943         <title>判断答案界面</title>
944     </head>
945     <body bgcolor="Thistle">
946         <?php
947             $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             else
959             {
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                 else
973                 {
974                     echo "第 ".$i." 道题答案错误,正确答案为".$aa."<br/><br/>";
975                 }
976             }
977             echo "<br/><br/>总共做对了 ".$j." 道题<br/>";
978     ?>
979     </body>
980 </html>
981 
982 deleteAnswer.php
983 
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         <?php
992             fclose(fopen('answer1.txt','w'));
993         ?>
994     </body>
995 </html>
The Main Code

 

3.运行结果截图

 软件工程结对功课02软件工程结对功课02软件工程结对功课02软件工程结对功课02软件工程结对功课02软件工程结对功课02

4.编程体会

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

 5.psp记录

软件工程结对功课02