1.设计思路:
  在index.php中建立两个表单,有两个提交,一个跳转到fourArithmeticOperation.php,这里保存用户输入的参数到config.txt中,留给main函数调出。界面跳转到main.php。main.php执行简单四则运算。main.php中调用exercise类中的randomNumber函数,将生成的习题和结果写入到txt,main.php再读出显示给用户,待用户输入结果后,再输出判断结果。并将当前执行次数写入到time.txt。然后再次执行main.php。当time中的参数达到用户定制数量要求时,界面跳转到quit.php中,此处有一个按钮,点击界面跳转到load.php,执行下载exercise.txt文件。
  另一个提交,跳转到multitermOperation.php,其思路与上面几乎相同,差别在main1.php调用的为exercise类中的randomFormula函数。
2.源代码
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<form method = "post" action = "fourArithmeticOperation.php">
简单四则运算 <input type = "submit" name = "continue" value = "简单四则运算"></form>
<form method = "post" action = "multitermOperation.php">
多项运算 <input type = "submit" name = "continue" value = "多项运算"></form>
<?php
if(isset($_REQUEST["continue"]))
{
}
?>
</html> fourArithmeticOperation.php
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title></title>
</head>
<form method = "get" action = "fourArithmeticOperation.php">
简单四则运算 <br>
习题数量 <input type = "text" name = "test1" > <br>
数值范围 <input type = "text" name = "test2" > <br>
<input type = "submit"></form>
<body>
<?php
if(isset($_REQUEST["test1"]) && (isset($_REQUEST["test2"])))
{
$open1 = fopen("config.txt","w+" ); //config.txt用于存放用户在表单输入的参数。
fwrite($open1,$_REQUEST["test1"]."\r\n".$_REQUEST["test2"]);
fclose($open1);
$open2 = fopen("time.txt","w+" ); //time.txt用于更新用户当前答题数量。
fwrite($open2,"0");
fclose($open2);
$open3 = fopen("exercise.txt","w+" ); //exercise.txt用于存放本次程序所出试题,同时用于判断是否有重复。
fclose($open3);
header("Refresh:0;url = main.php"); //配置完成后跳转到主程序页面。
}
?>
</body>
</html> multitermOperation.php
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title></title>
</head>
<form method = "get" action = "multitermOperation.php">
多项运算 <br>
习题数量 <input type = "text" name = "test3" > <br>
数值范围 <input type = "text" name = "test4" > <br>
<input type = "submit"></form>
<body>
<?php
if(isset($_REQUEST["test3"]) && (isset($_REQUEST["test4"])))
{
$open1 = fopen("config.txt","w+" ); //config.txt用于存放用户在表单输入的参数。
fwrite($open1,$_REQUEST["test3"]."\r\n".$_REQUEST["test4"]);
fclose($open1);
$open2 = fopen("time.txt","w+" ); //time.txt用于更新用户当前答题数量。
fwrite($open2,"0");
fclose($open2);
$open3 = fopen("exercise.txt","w+" ); //exercise.txt用于存放本次程序所出试题,同时用于判断是否有重复。
fclose($open3);
header("Refresh:0;url = main1.php"); //配置完成后跳转到主程序页面。
}
?>
</body>
</html> main.php
<?PHP
static $flag = true; //用于标记是否出题,逻辑上的变量。
$open0 = file("config.txt");
$range = chop($open0[1]); //读取随机数大小上限。
if(!(isset($_REQUEST["answer"])) && $flag) //出现回答后不再运行。
{
include("exercise.php");
$object = new exercise();
$object->randomNumber($range);
$flag = false;
} $open1 = fopen("exercise.txt",'r'); //读取exercise.txt的最后一行数据,即当前试题。
while($buf = fgets($open1))
{
$res = $buf;
}
fclose($open1);
echo $res; if(isset($_REQUEST["answer"])) //输出答案和输入结果。
{
echo file_get_contents("result.txt")."<br>"."您的结果为:".$_REQUEST["answer"]."<br>";
}
else
{
?>
<form method = "post">
<input type = "text" name = "answer"><br>
<input type = "submit"></form>
<?PHP
}
if(isset($_REQUEST["answer"])) //输入结果后进行判断。
{
judge($_REQUEST["answer"]); }
function judge($answer)
{
$result = file_get_contents("result.txt");
if($result == $answer)
{
echo "结果正确 ";
}
else
{
echo "结果错误 "; }
$open2 = file("config.txt");
$timeMax = chop($open2[0]); //读取习题数量。
$open3 = file("time.txt");
$time = chop($open3[0]); //读取当前为第几题。
if($time < $timeMax - 1) //习题未出完时,当前题数加一,更新time.txt,重新运行main.txt
{
echo "(第".($time + 1)."/".($timeMax)."题)";
$time++;
$open3 = fopen("time.txt","w+" );
fwrite($open3,"$time");
fclose($open3);
?>
<form method = "post" action = "main.php">
<input type = "submit" value = "下一题"></form>
<?PHP
}
else //否则跳转到退出界面。
{
echo "答题完毕。";
header("Refresh:3;url = quit.php");
}
} main1.php
<?PHP
static $flag = true; //用于标记是否出题,逻辑上的变量。
$open0 = file("config.txt");
$range = chop($open0[1]); //读取随机数大小上限。
if(!(isset($_REQUEST["answer1"])) && $flag) //出现回答后不再运行。
{
include("exercise.php");
$object = new exercise();
$object->randomFormula($range);
$flag = false;
} $open1 = fopen("exercise.txt",'r'); //读取exercise.txt的最后一行数据,即当前试题。
while($buf = fgets($open1))
{
$res = $buf;
}
fclose($open1);
echo $res; if(isset($_REQUEST["answer1"])) //输出答案和输入结果。
{
echo file_get_contents("result.txt")."<br>"."您的结果为:".$_REQUEST["answer1"]."<br>";
}
else
{
?>
<form method = "post">
<input type = "text" name = "answer1"><br>
<input type = "submit"></form>
<?PHP
}
if(isset($_REQUEST["answer1"])) //输入结果后进行判断。
{
judge($_REQUEST["answer1"]); }
function judge($answer)
{
$result = file_get_contents("result.txt");
if($result == $answer)
{
echo "结果正确 ";
}
else
{
echo "结果错误 "; }
$open2 = file("config.txt");
$timeMax = chop($open2[0]); //读取习题数量。
$open3 = file("time.txt");
$time = chop($open3[0]); //读取当前为第几题。
if($time < $timeMax - 1) //习题未出完时,当前题数加一,更新time.txt,重新运行main.txt
{
echo "(第".($time + 1)."/".($timeMax)."题)";
$time++;
$open3 = fopen("time.txt","w+" );
fwrite($open3,"$time");
fclose($open3);
?>
<form method = "post" action = "main1.php">
<input type = "submit" value = "下一题"></form>
<?PHP
}
else //否则跳转到退出界面。
{
echo "答题完毕。";
header("Refresh:3;url = quit.php");
}
} exercise.php
<?PHP
class exercise
{
public $numberA;
public $numberB;
public $numberC;
public $result;
public function exercise()
{
$this->numberA = null;
$this->numberB = null;
$this->result = null;
}
public function randomFormula($a)
{
$symbolA = rand(0,3);
$symbolB = rand(0,3);
$this->numberA = rand(0,$a);
$this->numberB = rand(0,$a);
$this->numberC = rand(0,$a);
$openA = fopen("exercise.txt","a" );
$openB = fopen("result.txt","w+" );
fwrite($openA,$this->numberA.symbol($symbolA).$this->numberB.symbol($symbolB).$this->numberC." = "."\r\n");
fwrite($openB,$this->result);
if($symbolA == 0)
{
if($symbolB == 0)
{
$this->result = $this->numberB + $this->numberC;
}
if($symbolB == 1)
{
$this->result = $this->numberB - $this->numberC;
}
if($symbolB == 2)
{
$this->result = $this->numberB * $this->numberC;
}
if($symbolB == 3)
{
$this->result = $this->numberB / $this->numberC;
}
$this->result += $this->numberA;
}
if($symbolA == 1)
{
if($symbolB == 0)
{
$this->result = $this->numberA - $this->numberB + $this->numberC;
}
if($symbolB == 1)
{
$this->result = $this->numberA - $this->numberB - $this->numberC;
}
if($symbolB == 2)
{
$this->result = $this->numberA - $this->numberB * $this->numberC;
}
if($symbolB == 3)
{
$this->result = $this->numberA - $this->numberB / $this->numberC;
}
} if($symbolA == 2)
{
if($symbolB == 0)
{
$this->result = $this->numberA * $this->numberB + $this->numberC;
}
if($symbolB == 1)
{
$this->result = $this->numberA * $this->numberB - $this->numberC;
}
if($symbolB == 2)
{
$this->result = $this->numberA * $this->numberB * $this->numberC;
}
if($symbolB == 3)
{
$this->result = $this->numberA * $this->numberB / $this->numberC;
}
} if($symbolA == 3)
{
if($symbolB == 0)
{
$this->result = $this->numberA / $this->numberB + $this->numberC;
}
if($symbolB == 1)
{
$this->result = $this->numberA / $this->numberB - $this->numberC;
}
if($symbolB == 2)
{
$this->result = $this->numberA / $this->numberB * $this->numberC;
}
if($symbolB == 3)
{
$this->result = $this->numberA / $this->numberB / $this->numberC;
}
}
fwrite($openB,$this->result);
fclose($openA);
fclose($openB); }
public function randomNumber($a)
{
$case2 = "0";
$symbol = rand(0,3);
$this->numberA = rand(0,$a);
$this->numberB = rand(0,$a);
$openA = fopen("exercise.txt","a" );
$openB = fopen("result.txt","w+" );
if($symbol == 0)
{
$this->result = $this->numberA + $this->numberB;
$case1 = $this->numberA." + ".$this->numberB." = "."\r\n";
$case2 = $this->numberB." + ".$this->numberA." = "."\r\n";
if(isRepeat($openA,$case1,$case2))
{
fwrite($openA,$this->numberA." + ".$this->numberB." = "."\r\n");
}
}
if($symbol == 1)
{
$this->numberB = rand(0,$this->numberA);
$case1 = $this->numberA." - ".$this->numberB." = "."\r\n";
$this->result = $this->numberA - $this->numberB;
if(isRepeat($openA,$case1,$case2))
{
fwrite($openA,$this->numberA." - ".$this->numberB." = "."\r\n");
}
}
if($symbol == 2)
{
$case1 = $this->numberA." * ".$this->numberB." = "."\r\n";
$case2 = $this->numberB." * ".$this->numberA." = "."\r\n";
$this->result = $this->numberA * $this->numberB;
if(isRepeat($openA,$case1,$case2))
{
fwrite($openA,$this->numberA." * ".$this->numberB." = "."\r\n");
}
}
if($symbol == 3)
{
$this->numberB = rand(1,$a);
$this->numberA = rand(1,$this->numberB);
$case1 = $this->numberA." / ".$this->numberB." = "."\r\n";
$gcd = getGreatestCommonDivisor($this->numberA,$this->numberB);
$this->result = ($this->numberA / $gcd)."/".($this->numberB / $gcd);
if($this->result == "1/1")
{
$this->result = "1";
}
if(isRepeat($openA,$case1,$case2))
{
fwrite($openA,$this->numberA." / ".$this->numberB." = "."\r\n");
}
}
fwrite($openB,$this->result);
fclose($openA);
fclose($openB);
} } function symbol($a)
{
$symbol = "";
switch($a)
{
case 0:
$symbol = " + ";break;
case 1:
$symbol = " - ";break;
case 2:
$symbol = " * ";break;
case 3:
$symbol = " / ";break;
}
return $symbol;
} function isRepeat($open1,$case1,$case2)
{
while($buf = fgets($open1))
{
if($buf == $case1 || $buf == $case2)
{
header("Refresh:0;url = main.php");
return false;
}
else
{
continue;
}
}
return true;
}
function getGreatestCommonDivisor($numberA,$numberB)
{
$n = 0;
while($numberB > 0)
{
$n = $numberA % $numberB;
$numberA = $numberB;
$numberB = $n;
}
return $numberA;
} quit.php
<?php
echo "欢迎再次使用!";
?>
<form method = "post" action = "load.php">
<input type = "submit" value = "下载习题"> load.php
<?php
$filename = "exercise.txt";
header('Content-Type‘txt'); //指定下载文件类型
header('Content-Disposition: attachment; filename="'.$filename.'"'); //指定下载文件的描述
header('Content-Length:'.filesize($filename)); //指定下载文件的大小
readfile($filename);//将文件内容读取出来并直接输出,以便下载

3.结果截图

4.难点分析

  编码一开始难点就在如何使用表单中得到的值,如果提交到当前文件中,会使另一个文件中使用不了,即使提交到别的文件中,也很有局限性。所以实现一个数的运算及比较都花了很长时间。上网查了很多,后来发现可以存到txt中实现,虽然打开关闭的很麻烦,但好在逻辑上没错。后来在网上提问和web上机时,发现了session功能(还没有在php中尝试)。还有一些小问题也困扰过我,如不知道<?php ?>,if,else和表单之间的嵌套,不知道txt的读取打开方式和下载以及php中类的声明等等。

5.耗时

php实现网站四则运算。的更多相关文章

  1. 结对编程——paperOne基于java web的简易四则运算出题网站

    项目成员:张金生     张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...

  2. paperOne基于java web的简易四则运算出题网站

    项目成员:张金生     张政 需求概要 1.运算数均为正整数 2.包含的运算符有+,-,*,/ 3.除法运算结果为整除运算 4.批量生成题目并判题 核心功能分析 1.题目生成——java后端 题目生 ...

  3. 四则运算appNABCD模型

    团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  4. 20175126Apollo 20175126《Java程序设计》结队编程项目——四则运算

    结队编程项目——四则运算 一.项目需求 自动生成小学四则运算题目(加.减.乘.除)统计正确率 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 需求分析: 生成四则运算:需要使用 ...

  5. 四则运算之GUI

    四则运算之GUI Coding克隆地址:https://git.coding.net/lvgx/pair_programming.git   目录: 一.前言 二.计划时间——PSP 三.接口设计 四 ...

  6. 结对作业——web四则运算

    目录: 一.Coding.net项目地址 二.PSP 三.接口设计 四.接口实现 五.性能分析 六.单元测试 七.异常处理 八.模块设计 九.模块对接 十.结对 十一.思考 十二.PSP 网站:htt ...

  7. 结对作业——四则运算 Part3. 对于结对编程的总结与思考

    结对作业——四则运算 Part3. 对于结对编程的总结与思考 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分 Part ...

  8. 四则运算web版需求规格说明书

    目录 1引言... 4 1.1  目的... 4 1.2  背景... 4 1.3  术语... 4 1.4  预期读者与阅读建议... 5 1.5  参考资料... 6 1.6  需求描述约定... ...

  9. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

随机推荐

  1. power designer 从sqlserver数据库获取字段说明&导出rtf文档模板

    具体的操作稍后在修改 附件下载:https://files.cnblogs.com/files/zinan/powerDesigner.rar

  2. Ubuntu安装时没注册root用户密码,怎么登录root

    一.其实我个人认为这没有多大必要,因为当你需要 root 的权限时,使用 sudo 便可以了.如果你实在需要在 Ubuntu 中启用 root 帐号的话,那么不妨执行下面的操作: 1.重新设置 roo ...

  3. c#异步等待

    1:一直等待 2方法  现实等待 3:方法    带返回值得 begin -endinvoke 4: func 带返回值

  4. c# txt内存映射技术总结

    对于大文件操作,readline 的方式读取文档,那操作起来跟蜗牛爬一样的慢了, 于是使用内存映射技术, 参考微软的这个使用方法说明 https://msdn.microsoft.com/zh-cn/ ...

  5. html标签三

    1.下拉框和下拉表框 <select name="" id="" multiple> <option value="xx" ...

  6. ParseCrontab类,解析时间规则

    <?php /** * Created by PhpStorm. * User: ClownFish 187231450@qq.com * Date: 14-12-27 * Time: 上午11 ...

  7. XiaoKL学Python(E)Generator Expressions

    在 阅读 https://github.com/vitonzhang/objc_dep 中的 objc_dep.py 时遇到: objc_files = (f for f in files if f. ...

  8. Shell脚本中$0、$?、$!等的意义

    变量说明$$ Shell本身的PID(ProcessID)$! Shell最后运行的后台Process的PID$? 最后运行的命令的结束代码(返回值)$- 使用Set命令设定的Flag一览$* 所有参 ...

  9. vue获取DOM元素并设置属性

    这里我想到了2个方法: 方法一: 直接给相应的元素加id,然后再document.getElementById("id");获取,然后设置相应属性或样式 方法二: 使用ref,给相 ...

  10. OneZero_Aphla发布总结以及自己的体会

    Aphla发布正式结束了.清明时节,总要祭奠点什么. 以下是这一周的燃尽图. 可以发现,并没有燃尽.所以OneZero的Aphla发布失败了. 失败原因有至少以下三点: 1.组长分配任务存在隐患,高风 ...