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否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)." ) ".$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.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.運行結果截圖
4.編程體會
通過這次任務,我真正體會到了什麼是“做中學”。以前也看過PHP還有HTML的書,但很少動手去做,那時感覺都簡單,沒必要一個個做下實驗。現在發現不是那樣的,只有動手做了才會知道自己哪裡還欠缺,哪裡還需進一步學習。由於以前的想法,所以在預計耗費時間時認為各模塊花費不了多長時間,直到做完這個程序才知道其實不是那樣的。總之,通過這次任務,我知道了本學期剩下的時間應該往哪方面進一步學習。
5.psp記錄