首頁 > php教程 > php手册 > 主體

软件工程结对作业02,软件工程结对02

WBOY
發布: 2016-06-13 08:42:26
原創
868 人瀏覽過

软件工程结对作业02,软件工程结对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 3 9 10 11 12 四则运算出题系统 13 37 38 39    40

41
42 欢迎来到小学四则运算出题系统


43 44
45 默认只有两个数参与运算的加减法

46 47 请输入参与运算的最小数值(非负整数) 48

49 50 请输入参与运算的最大数值(非负整数且不小于最小数值) 51

52 53 请输入出题数目(正整数) 54

55 56 选择参与运算的数的个数 57 2 58 3 59 4

60 61 选择是否加入乘法 62 63

64 65 选择是否加入除法 66 67

68 69 70 71
72
73 74 75 76 rubric.php 77 78 79 80 81 出题界面 82 83 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$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$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$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$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$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$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$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$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$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)//当结果为负时,重新随机 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)//结果为负,重新出题 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]."

"; 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)//当结果为负时,重新随机 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)//结果为负,重新出题 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]."

"; 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)//当结果为负时,重新随机 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)//结果为负,重新出题 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]."

"; 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)//结果为负,重新出题 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)//结果为负,重新出题 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]."

"; 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)//结果为负,重新出题 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)//结果为负,重新出题 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]."

"; 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)//结果为负,重新出题 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)//结果为负,重新出题 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]."

"; 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)//结果为负,重新出题 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)//结果为负,重新出题 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]."

"; 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)//结果为负,重新出题 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)//结果为负,重新出题 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]."

"; 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->r
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!