软件工程结对作业02,软件工程结对02
-
原创
-
2016-06-13 08:42:26
722浏览
软件工程结对作业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
3
9
10
11 12 四则运算出题系统 13 37
38
39
40 41
42 欢迎来到小学四则运算出题系统
43
44
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
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。