php四则运算出题器

php四则运算出题器

要求

1.可以将出题结果导出到EXCEL文件
2.用户可以指定题目的数量
3.用户可指定操作数的数目(至少二个、至多四个),如果指定的操作数超过2个,应该随机出现括号用于改变运算顺序。
4.用户可以指定结果是否允许出现负数。
5.用户可以指定每个操作数的最大值
6.用户可以指定题目的类型(加、减、加减、乘除、加减乘除)
7.用户可以指定除法运算结果有余数还是保留小数点位数(只实现了2位的)

想法

(想法源于网络)

随机加括号问题

假设待去括号的表达式为 (m1 op1 n1) op (m2 op2 n2) 这里m1、n1、m2、m2可能自身就是个表达式,也可能是数字,op、op1、op2为运算符

1、若op为’/’,则 (m2 op2 n2)的括号必须保留;

2、若op为’*‘或’-’,如果op2为’+‘或’-’,则(m2 op2 n2)的括号必须保留;

3、若op为’*‘或’/’,如果op1为’+‘或’-’,则(m1 op1 n1)的括号必须保留;

4、 除此之外,去掉括号不影响表达式的计算顺序。
【这里整理的去括号法则来源于互联网】

1-num_max选一个数

m 1 = r a n d ( 1 , m1=rand(1, m1=rand(1,num_max);

余数

n u m = i n t v a l ( f l o o r ( num=intval(floor( num=intval(floor(m1/ m 2 ) ) . ′ . . . . . . ′ . m2)).'......'. m2))........m1%$m2;

随机计算符号

o p e r a t o r = a r r a y ( ′ + ′ , ′ − ′ , ′ ∗ ′ , ′ / ′ ) ; s h u f f l e ( operator=array('+','-','*','/'); shuffle( operator=array(+,,,/);shuffle(operator);
s e l 1 = sel1= sel1=operator[0];

负数

考虑减号影响

导出到EXCEL文件
if($_POST['file']=='是')
{
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:attachment;filename=test_data.xls");
} 
计算

$result=eval(“return $str;”);

不导出时结果

在这里插入图片描述
页面不是很好看,优化指路: Bootstrap菜鸟教程.

第一个显示页面

在这里插入图片描述

1.php


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form name="form1" method="post" action="2.php">

是否包括导出:   
<select name="file" id="answer">
<option value="是"></option>
<option value="否"></option>
</select>
<br />
是否包括答案:   
<select name="answer" id="answer">
<option value="是"></option>
<option value="否"></option>
</select>
<br />
出题数量:
<input type="text" name="number" id="XH" />

<br />
操作数的数目:
<select name="operand" id="operand">
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>

<br />
结果是否允许出现负数
<select name="negative" id="negative">
<option value="是"></option>
<option value="否"></option>
</select>

<br />  
操作数的最大值
<input type="text" name="number_max" id="XH" />
<br />

题目的类型:
<select name="type" id="type">
<option value="加"></option>
<option value="减"></option>
<option value="加减">加减</option>
<option value="乘除">乘除</option>
<option value="加减乘除">加减乘除</option>
</select>

<br />
有余数?保留小数点位数
<select name="deal" id="deal">
<option value="保留小数点位数">保留小数点位数</option>
<option value="有余数">有余数</option>

</select>
<br />
<br />
<input type='submit' name='sub'/>
</form>

</body>
</html>



2.php

代码片.

<!DOCTYPE HTML>
<html>
<head>

<?php


    if($_POST['file']=='是')
    {
        header("Content-type:application/vnd.ms-excel");
        header("Content-Disposition:attachment;filename=test_data.xls");

    }  
    $answer=$_POST["answer"];
    $number=$_POST["number"];
    $operand=$_POST["operand"];
    $negative=$_POST["negative"];
    $num_max=$_POST["number_max"];
    $type=$_POST["type"];
    $deal=$_POST["deal"];
    if($type=='加')
    {
        $operator=array('+');
    }   
    else if($type=='减')
    {
        $operator=array('-');
    }
    else if($type=='加减')
    {
        $operator=array('+','-');
    }
    else if($type=='乘除')
    {
        $operator=array('*','/');
    }
    else if($type=='加减乘除')
    {
        $operator=array('+','-','*','/');
    }
    if($operand==2)
    {
        for($i=0;$i<$number;$i++)
        {
            $m1=rand(1,$num_max);
            $m2=rand(1,$num_max);
            shuffle($operator);
            $sel1=$operator[0];
            if($sel1=="+")
            {
                $num=$m1+$m2;
            }
            else if($sel1=="-")
            {
                $num=$m1-$m2;
            }
            else if($sel1=="*")
            {
                $num=$m1*$m2;
            }
            else if($sel1=="/")
            {
                if($deal=='有余数')
                {
                    $num=intval(floor($m1/$m2)).'......'.$m1%$m2;
                }
            
                else $num=$m1/$m2;
            }
            if($num<0&&$negative=='否')
            {
                echo $m2,$sel1,$m1,'=';
                $num=$m2-$m1;
                if($answer=='是')
                {
                    echo $num;
                }
                echo '<br>';
            }
            else 
            {
                echo $m1,$sel1,$m2,'=';
                if($answer=='是')
                {
                    echo $num;
                }
                echo '<br>';
            }
        }
    }
    if($operand==3)
    {
        for($i=0;$i<$number;$i++)
        {
            $m1=rand(1,$num_max);
            $m2=rand(1,$num_max);
            $m3=rand(1,$num_max);
            shuffle($operator);
            $sel1=$operator[0];
            shuffle($operator);
            $sel2=$operator[0];
            if($sel1=='/'&&$m2!=$m3)
            {
                $str=(string)$m1.$sel1.'('.(string)$m2.$sel2.(string)$m3.')';
                $result=eval("return $str;");
                echo $str,'=';
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';
            }
            else if($sel1=='*'||$sel1=='-'&&$sel2=='+'||$sel2=='-'&&$m2!=$m3)
            {
                $str=(string)$m1.$sel1.'('.(string)$m2.$sel2.(string)$m3.')';
                $result=eval("return $str;");
                if($result<0&&$negative=='否')
                {
                    if($sel1=='-')
                    {
                        $str='('.(string)$m2.$sel2.(string)$m3.')'.$sel1.(string)$m1;
                        $result=eval("return $str;");
                    }
                    else if($sel2=='-')
                    {
                        $str=(string)$m1.$sel1.'('.(string)$m3.$sel2.(string)$m2.')';
                        $result=eval("return $str;");
                    }
                }
                
                echo $str,'=';
            
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';
                
            }
            else 
            {
                $str=(string)$m1.$sel1.(string)$m2.$sel2.(string)$m3; 
                $result=eval("return $str;");
                if($result<0&&$negative=='否')
                {
                    if($sel1=='-')$sel1='+';
                    if($sel2=='-')$sel2='+';
                    $str=(string)$m1.$sel1.(string)$m2.$sel2.(string)$m3; 
                    $result=eval("return $str;");
                }
                echo $str,'=';
               
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';
            }
    
        }
    }
    if($operand==4)
    {
        for($i=0;$i<$number;$i++)
        {
            $m1=rand(1,$num_max);
            $m2=rand(1,$num_max);
            $m3=rand(1,$num_max);
            $m4=rand(1,$num_max);
            shuffle($operator);
            $sel1=$operator[0];
            shuffle($operator);
            $sel2=$operator[0];
            shuffle($operator);
            $sel3=$operator[0];
            if($sel2=='/'&&$m3!=$m4)
            {
                $str=(string)$m1.$sel1.(string)$m2.$sel2.'('.(string)$m3.$sel3.(string)$m4.')';
                $result=eval("return $str;");
                if($result<0&&$negative=='否')
                {
                    $str=(string)$m2.$sel1.(string)$m1.$sel2.'('.(string)$m3.$sel3.(string)$m4.')';
                    $result=eval("return $str;");
                }
                echo $str,'=';
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';
                
            }
            else if($sel2=='*'||$sel2=='-'&&$sel3=='+'||$sel3=='-'&&$m3!=$m4)
            {
                $str=(string)$m1.$sel1.(string)$m2.$sel2.'('.(string)$m3.$sel3.(string)$m4.')';
                $result=eval("return $str;");
                if($result<0&&$negative=='否')
                {
                    if($sel2=='-')
                    {
                        $str=(string)$m3.$sel3.(string)$m4.$sel2.'('.(string)$m1.$sel1.(string)$m2.')';
                        $result=eval("return $str;");
                        
                    }
                    else
                    {
                        if($sel1=='-')$sel1='+';
                        if($sel3=='-')$sel3='+';
                        $str=(string)$m1.$sel1.(string)$m2.$sel2.'('.(string)$m3.$sel3.(string)$m4.')';
                        $result=eval("return $str;");
                        
                    }
                }
                echo $str,'=';
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';
            }
            else if($sel2=='*'||$sel2=='/'&&$sel1=='+'||$sel1=='-')
            {
                $str='('.(string)$m1.$sel1.(string)$m2.')'.$sel2.(string)$m3.$sel3.(string)$m4;
                $result=eval("return $str;");
                if($result<0&&$negative=='否')
                {
                    if($sel1=='-')$sel1='+';
                    if($sel3=='-')$sel3='+';
                    $str='('.(string)$m1.$sel1.(string)$m2.')'.$sel2.(string)$m3.$sel3.(string)$m4;
                    $result=eval("return $str;");
                }
                echo $str,'=';
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';   
            }
            else
            {
                $str=(string)$m1.$sel1.(string)$m2.$sel2.(string)$m3.$sel3.(string)$m4;
                $result=eval("return $str;");
                if($result<0&&$negative=='否')
                {
                    if($sel1=='-')$sel1='+';
                    if($sel2=='-')$sel3='+';
                    if($sel3=='-')$sel3='+';
                    $str=(string)$m1.$sel1.(string)$m2.$sel2.(string)$m3.$sel3.(string)$m4;
                    $result=eval("return $str;");
                }
                echo $str,'=';
                if($answer=='是')
                {
                    echo $result;
                }
                echo '<br>';    
            }
        }
    }
    
?>
</head>
</html>

第一次写,这个是web课的实验作业,有优化修改建议评价

代码已更新
注:
1.php和2.php要放在一个目录下面

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值