热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

软件工程结对作业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["p"])) 107 { 108 $p=$_POST["p"]; //选择是否加入除法 是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]=' &pide; '; 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]==' &pide; ') 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]=' &pide; '; 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]==' &pide; ') 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') && ($p=='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
推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了《中秋夜作》的翻译及原文赏析,以及诗人当代钱钟书的背景和特点。通过对诗歌的解读,揭示了其中蕴含的情感和意境。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
author-avatar
Only_cxy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有