軟件工程結對作業02,軟件工程結對02
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記錄
