欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

软件工程结对作业02 - 京魂

程序员文章站 2022-05-14 11:28:08
...
1.设计思想:

  本次任务我用php实现的主要功能,默认必须有加减法。

  首先,创建index.php文件,在HTML语句里创建表单,表单内容包括,出题数目,最大最小值,及其他的一些选项。

  然后,创建rubric.php文件,将表单信息提交到此文件下,四则运算方法实现时调用传递过来的值。实现四则运算的方法和前几次用Java时的方法差不多,将代码做了修改和优化。将题目和答案分别放入question.txtanswer.txt文件里,以备后用。

  第三,创建submitAnswer.phpacceptAnswer.phpdeleteAnswer.phpjudgeAnswer.php文件,分别用于在线提交答案,接收答案,删除答案和判断答案。提交的答案放在answer1.txt文件里,判断答案时通过比较answer.txtanswer1.txt文件里的内容即可。

2.源程序代码

软件工程结对作业02 - 京魂
  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软件工程结对作业02 - 京魂

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 软件工程结对作业02 - 京魂
  • 专题推荐