当前位置:Gxlcms > PHP教程 > 软件工程结对功课02

软件工程结对功课02

时间:2021-07-01 10:21:17 帮助过:28人阅读

软件工程结对作业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 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否f105 }106 if(is_string($_POST["div"]))107 {108 $div=$_POST["div"]; //选择是否加入除法 是t否f109 }110 111 /* 定义数组 */112 $a=array(); //方法中使用,存储随机数字和运算符113 $amd=array(); //方法中使用,将算好乘/除法后的算式存入此数组114 $b=array(); //调用方法时使用115 $d=array(); //存储题目116 $e=array(); //存储答案117 118 /* Result 类用于封装结果 */119 class Result120 {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 else185 {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 else258 {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 else342 {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 }

人气教程排行