• 四则运算2


    四则运算2

    上次写的只是在java基础的上写的程序,其功能页面的效果都不怎么样。这次和Ms Wang结对对四则运算做了改进,实现了基本的页面美化;

    四则运算网页版,而且对三元、二元运算都可以实现,数字的运算都在一百以内的整数。但是对计时什么的还没实现,下次继续改进。

    源程序:

    src的com.jaovo.msg.model

    package com.jaovo.msg.model;
    
    public class DoubleOperation {
        private static int operationNumber;
        private static double[] result;
        private static double[] child_result;
        public static double[] getChild_result() {
            return child_result;
        }
        public static void setChild_result(double[] child_result) {
            DoubleOperation.child_result = child_result;
        }
        public int getOperationNumber() {
            return operationNumber;
        }
        public void setOperationNumber(int operationNumber) {
            this.operationNumber = operationNumber;
        }
        public double[] getResult() {
            return result;
        }
        public void setResult(double[] result) {
            this.result = result;
        }
        
    
    }

    jsp文件

    为了适应小朋友,我先做了一个欢迎界面

    先选择答题类型:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="css/style.css"/>
    <title>小学生四则运算</title>
    <style type="text/css">
      body{
          background-image:url(image/4.jpg);
      }
      </style>
    </head>
    <body>
        <form action="DoubleOperation.jsp" class="option">
            <center><h2>题目定制</h2></center>
            <p>选择题目类型:
                <select name="elementNum">
                    <option>2</option>
                    <option>3</option>
                </select>元运算<br /></p>
            选择题目数量:
                    <input name="count" value="10" type="radio" />10
                    <input name="count" value="20" type="radio" />20
                    <input name="count" value="30" type="radio" />30
                    <input name="count" value="40" type="radio" />40
                    <input name="count" value="50" type="radio" />50
                    <input name="count" value="5000" type="radio" />5000<br/>
                    <input name="count" value="1000000" type="radio" />10000000(极限测试,慎选!!)
                <br /><br />
            <button class="submit" style="margin-top:50px">开始答题!</button>
        </form>
    </body>
    </html>

    CSS中的代码

    @charset "UTF-8";
    /****四则运算题目表格(<table>)****/
    .box{
        margin-top: 50px;
    }
    /****结果输入框(<input>)****/
    .result{
         60px;
        padding: 5px;
        border:none;
        font-size:20px;
        border-bottom: solid yellowgreen 5px;
        text-align:center;
    }
    /****题目(<td>)****/
    .expr{
        font-size: x-large;
    }
    
    /****非分数/运算符(<div>)*****/
    .nomal{
        text-align:center;
        float:left;
        position: relative;
        top: 16px;
        margin-left: 3px;
        margin-right: 3px;
        width="20px"
    }
    
    /****分数(<div>)****/
    .fraction{
        text-align:center;
        float: left;
        margin-left:3px;
        margin-right: 3px;
        width="20px"
    }
    
    /****题目选择*****/
    .option{
        text-align: center;
    }
    /******你准备好了吗?按钮******/
    .submit1{
        padding-top: 10px;
        padding-bottom: 10px;
        padding-left: 20px;
        padding-right: 20px;
        background: #C90;
        font-family: "微软雅黑";
        font-weight: bold;
        font-size: 20px;
    }
    /*****提交按钮*****/
    .submit{
        padding-top: 10px;
        padding-bottom: 10px;
        padding-left: 20px;
        padding-right: 20px;
        border-radius: 5px;
        background: cornflowerblue;
        border: none;
        cursor: pointer;
        color:lightyellow;
        font-family: "微软雅黑";
        font-weight: bold;
        font-size: 20px;
    }
    /******计时器*******/
    .timer{
        position:fixed;
        top: 10px;
        right: 10px;
        border: none;
        50px;
        text-align: right;
        background: none;
    }
    .pause{
        position:fixed;
        top: 30px;
        right: 10px;
    }
    /****题目选项****/
    .option{
        margin-left:auto;
        margin-right:auto;
        600px;
        margin-top: 130px;
        border:dashed #9ACD32 2px;
        padding-top: 100px;
        padding-bottom: 100px;
    }
    /****答题按钮*****/

    插入的图片在image中

    先二元运算

    <%@ page import="java.util.Random" %> 
    <%@ page import="java.lang.Math" %>
    <%@ page import="com.jaovo.msg.model.DoubleOperation" %>
    <%@ page import="java.math.BigInteger" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>二元运算</title>
    
    </head>
    <body  style="background-image:url(image/5.jpg)"/>
    <form action="doDoubleOperation.jsp" method="post">
    <%! int operationNumber=30;//打印题目的数量%>
    <%! int character=0;//运算符+,-,*,/%>
    <%! int num1=0;//运算式中第一个数%>
    <%!  int num2=0;//运算式中第二个数%>
    <%!  int correct=0;//计算正确的数目%>
    <%! int error=0;//计算错误的数目%>
    <%! String operat=null;//计算式%>
    <%! double result[]=new double[operationNumber];//计算式的结果%>
    <%! double child_result[]=new double[operationNumber];//界面获取的结果%>
    <%! String[] question=new String[operationNumber]; %>
    <%!Random random = new Random(); %>
    <%! int Endtime=1; //跳转时间%>
    <%
      long  endMili;
      for(int i=0;i<operationNumber;i++)//初始化计算式的结果
      {
          result[i]=0;
          child_result[i]=0;
      }
      for(int i=0;i<operationNumber;i++) 
      { 
         
        character=random.nextInt(4)%4+1; 
        if(character==1)//计算加法
        {
            num1=random.nextInt(100)%100;//随机出一个0~100的数
            num2=random.nextInt(100)%100;
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"+"+number2+"=";
            result[i]=num1+num2;
        }
        else if(character==2)//计算减法
        {
            num1=random.nextInt(100)%100;//随机出一个1~100的数
            if(num1==0)
                num1=num1+2;//若num1=0,则加2
            num2=(int)random.nextInt(num1)%(num1);//随机出一个0~num1的数
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"-"+number2+"=";
            result[i]=num1-num2;
        }
        else if(character==3)//计算乘法
        {
            num1=random.nextInt(9)%9;//随机出一个0~9的数
            num2=random.nextInt(9)%9;
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"*"+number2+"=";
            result[i]=num1*num2;
        }
        else //计算除法
        {
            do{
            num1=random.nextInt(81)%81;//随机出一个0~81的数
            if(num1>9)
                num2=random.nextInt(9)%9;
            else 
            {
                if(num1==0)
                    num1++;
                num2=(int)random.nextInt(num1)%(num1);
            }
            if(num2==0)//当num2=0再重新生成num2
            {
                num2=num2+1;
            } 
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"/"+number2+"=";
            result[i]=num1/num2;
            }while((result[i]>=10)||(num1%num2!=0));//商为10以内的数
            
        }
        
        if(Double.valueOf(result[i])>100) {//如果结果大于100或小数位数大于1则不输出
            i--;
        }
        else {
            %>
            <%=operat %><input type="text" name="child_result<%=i %>" size="3"><br> <br>
            <% 
            
        }
    }
     
    %>
     <input type="submit" value="提交" name="提交">  
    
    <%
    
    DoubleOperation doubleoperation=new DoubleOperation();
    doubleoperation.setOperationNumber(operationNumber);
    doubleoperation.setResult(result); 
    
    %>
    
    
    <%-- <meta http-equiv="refresh" content ="<%=Endtime*60 %>;url=doDoubleOperation.jsp">  --%>
    <!-- Endtime分钟后跳转到结果界面 -->
    </form>
    </body>
    </html>
    <%@ page import="com.jaovo.msg.model.DoubleOperation" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    
    
    </head>
    <body>
    
    <%!  int correct=0;//计算正确的数目%>
    <%! int error=0;//计算错误的数目%>
    <%! int nullerror=0;//没答题的数目 %>
    <%
        DoubleOperation doubleoperation=new DoubleOperation();
        double[] result=doubleoperation.getResult();
        int operationNumber=doubleoperation.getOperationNumber();
        System.out.println("count="+operationNumber);
        for(int i=0;i<operationNumber;i++)
        {
            String child_result=request.getParameter("child_result"+i);
            if((null==child_result)||("".equals(child_result)))
            {
                nullerror++;
            }
            else
            {
                double child_result2=Double.valueOf(child_result);
              if(child_result2==result[i])
              {
                 correct++;
              }
              else
              {
                error++;
               }
            }
        }
    
    %>
      恭喜你!答对了<%=correct %>道题,答错了<%=error %>道题,没答<%=nullerror %>道题!!!
    </body>
    </html>

     

    三元运算:

    <%@ page import="java.util.Random" %> 
    <%@ page import="java.lang.Math" %>
    <%@ page import="com.jaovo.msg.model.DoubleOperation" %>
    <%@ page import="java.math.BigInteger" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>三元运算</title>
    </head>
    <body>
    <form action="doDoubleOperation.jsp" method="post">
    <%! int operationNumber=30;//打印题目的数量%>
    <%! int character1=0;//第一个运算符+,-,*,/%>
    <%! int character2=0;//第二个运算符 %>
    <%! int num1=0;//运算式中第一个数%>
    <%!  int num2=0;//运算式中第二个数%>
    <%! int num3=0;//运算式中的第三个数 %>
    <%!  int correct=0;//计算正确的数目%>
    <%! int error=0;//计算错误的数目%>
    <%! String operat=null;//计算式%>
    <%! double result[]=new double[operationNumber];//计算式的结果%>
    <%!Random random = new Random(); %>
    <%! int Endtime=1; //跳转时间%>
    <%
      for(int i=0;i<operationNumber;i++)//初始化计算式的结果
      {
          result[i]=0;
    
      }
      for(int i=0;i<operationNumber;i++) 
      { 
         
        character1=random.nextInt(4)%4+1; 
        if(character1==1)//计算加法
        {
            num1=random.nextInt(100)%100;//随机出一个0~100的数
            num2=random.nextInt(100)%100;
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"+"+number2;
            result[i]=num1+num2;
        }
        else if(character1==2)//计算减法
        {
            num1=random.nextInt(100)%100;//随机出一个1~100的数
            if(num1==0)
                num1=num1+2;//若num1=0,则加2
            num2=(int)random.nextInt(num1)%(num1);//随机出一个0~num1的数
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"-"+number2;
            result[i]=num1-num2;
        }
        else if(character1==3)//计算乘法
        {
            num1=random.nextInt(9)%9;//随机出一个0~9的数
            num2=random.nextInt(9)%9;
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"*"+number2;
            result[i]=num1*num2;
        }
        else //计算除法
        {
            do{
            num1=random.nextInt(81)%81;//随机出一个0~81的数
            if(num1>9)
                num2=random.nextInt(9)%9;
            else 
            {
                if(num1==0)
                    num1++;
                num2=(int)random.nextInt(num1)%(num1);
            }
            if(num2==0)//当num2=0再重新生成num2
            {
                num2=num2+1;
            } 
            String number1=String.valueOf(num1);
            String number2=String.valueOf(num2);
            operat="第("+(i+1)+")题"+number1+"/"+number2;
            result[i]=num1/num2;
            }while((result[i]>=10)||(num1%num2!=0));//商为10以内的数
            
        }
        
        
        
        
        character2=random.nextInt(4)%4+1; 
        if(character2==1)//计算第二个加号
        {
            num3=random.nextInt(100)%100;
            String number3=String.valueOf(num3);
            operat=operat+"+"+num3+"=";
            result[i]=result[i]+num3;
        }
        else if(character2==2)//第二个运算符是减号
        {
            if(result[i]==0)
                result[i]=result[i]+2;
            if(result[i]<100){
                 num3=(int)random.nextInt((int)result[i])%((int)result[i]);//随机出一个小于被减数的数
            }
            else
            {
                num3=random.nextInt(100)%100;
            }
            String number3=String.valueOf(num3);
            operat=operat+"-"+num3+"=";
            result[i]=result[i]-num3;
        }
        else if(character2==3)//乘号
        {
            if(character1==2)//若第一个运算符是减号,则再随机出来一个第二个数与第三个随机的数小于第二个数   num1>=num2*num3  num3<=num1/num2
            {
                if(num1==0)
                    num3=0;
                else 
                {
                    int num4=num1/num2;
                    num3=(int)random.nextInt(num4)%(num4);
                }
                String number3=String.valueOf(num3);
                operat=operat+"*"+num3+"=";
                result[i]=num1-(num2*num3);
            }
            else //第一个符号是加乘除。若是加,则先计算num2与num3,若是乘除,则计算顺序不变
            {
                if(character1==1){//第一个运算符是加号
                    num3=(int)random.nextInt(100)%(100);
                    String number3=String.valueOf(num3);
                    operat=operat+"*"+num3+"=";
                    result[i]=num1+(num2*num3);
                }
                else if(character1==3)//第一个符号是乘号,num1*num2<=9
                {   
                    String number2,number3;
                    do{
                        num2=(int)random.nextInt(9)%(9);
                        result[i]=num1*num2;
                        number2=String.valueOf(num2);
                    }while(result[i]>9);
                    num3=(int)random.nextInt(9)%(9);
                    number3=String.valueOf(num3);
                    operat=operat+"*"+num3+"=";
                    result[i]=result[i]*num3;
                }
                else {//第一个符号是除号
                    num3=(int)random.nextInt(100)%(100);
                    String number3=String.valueOf(num3);
                    operat=operat+"*"+num3+"=";
                    result[i]=result[i]*num3;
                }
            }
        }
        else//第二个运算符是除号
        {
            if(num2>81){//第二个符号是除号
                num2=(int)random.nextInt(81)%(81);
            }
            if(character1==1)//第一个运算符是加号,先算num2/num3,再算num+(num2/num3)
            {   
                String number3,number2;
                if(num2>81){//第二个符号是除号
                    num2=(int)random.nextInt(81)%(81);
                }
                do{
                    
                    if(num2>9)
                        num3=random.nextInt(9)%9;
                    else 
                    {
                        if(num2==0)
                            num2++;
                        num3=(int)random.nextInt(num2)%(num2);
                    }
                    if(num3==0)
                    {
                        num3=num3+1;
                    } 
                    number3=String.valueOf(num3);
                    num2=random.nextInt(81)%(81);
                    }while(((num2/num3)>=10)||(num2%num3!=0));//商为10以内的数
                    operat="第("+(i+1)+")题"+num1+"+"+num2+"/"+num3+"=";
                   result[i]=num1+(num2/num3);
            }
            else if(character1==2)//第一个运算式减号,则num1-num2/num3
            {
                String number3=null;
                int k=0;
                if(num2>81){//第二个符号是除号
                    num2=(int)random.nextInt(81)%(81);
                }
                do{
                    if(num2>9)
                        num3=random.nextInt(9)%9;
                    else 
                    {
                        if(num2==0)
                            num2++;
                        num3=(int)random.nextInt(num2)%(num2);
                    }
                    
                    if(num3==0)
                    {
                        num3=num3+1;
                    } 
                    number3=String.valueOf(num3);
                    num2=(int)random.nextInt(81)%(81);
                    
                }while(((num2/num3)>=10)||(num2%num3!=0)||((num2/num3)>num1));//商为10以内的数
                    operat="第("+(i+1)+")题"+num1+"-"+num2+"/"+num3+"=";
                   result[i]=num1-(num2/num3);
            }
            else if(character1==4)//第一个运算符是除号,按顺序计算
            {
                String number3;
                do{
                    if(result[i]>9)
                        num3=random.nextInt(9)%9;
                    else 
                    {
                        if(result[i]==0)
                            num2++;
                        num3=(int)random.nextInt((int)result[i])%((int)result[i]);
                    }
                    if(num3==0)
                    {
                        num3=num3+1;
                    } 
                    number3=String.valueOf(num3);
                    
                    }while(((result[i]/num3)>=10)||(result[i]%num3!=0));//商为10以内的数
                    operat=operat+"/"+number3+"=";
                result[i]=result[i]/num3;
            }
            else //第一个运算符是乘号,按顺序计算
            {
                do{
                    if(result[i]>9)
                        num3=random.nextInt(9)%9;
                    else 
                    {
                        if(result[i]==0)
                            result[i]++;
                        num3=(int)random.nextInt((int)result[i])%((int)result[i]);
                    }
                    if(num3==0)
                    {
                        num3=num3+1;
                    } 
                    String number3=String.valueOf(num3);
                    }while(((result[i]/num3)>=10)||(result[i]%num3!=0));//商为10以内的数 
                    operat=operat+"/"+num3+"=";
                    result[i]=result[i]/num3;
            }
        }
        if(Double.valueOf(result[i])>100) {//如果结果大于100或小数位数大于1则不输出
            i--;
        }
        else {
            System.out.println(operat+result[i]);
            %>
            <%=operat %><input   type="text" name="child_result<%=i %>" ><br> <br>
            <% 
            
        }
    }
     
    %>
     <input type="submit" value="提交" name="提交">  
    
    <%
    
    DoubleOperation doubleoperation=new DoubleOperation();
    doubleoperation.setOperationNumber(operationNumber);
    doubleoperation.setResult(result); 
    
    %>
    </form>
    </body>
    </html>
    <%@ page import="com.jaovo.msg.model.DoubleOperation" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%!  int correct=0;//计算正确的数目%>
    <%! int error=0;//计算错误的数目%>
    <%! int nullerror=0;//没答题的数目 %>
    <%
        System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        DoubleOperation doubleoperation=new DoubleOperation();
        double[] result=doubleoperation.getResult();
        int operationNumber=doubleoperation.getOperationNumber();
        System.out.println("count="+operationNumber);
        for(int i=0;i<operationNumber;i++)
        {
            String child_result=request.getParameter("child_result"+i);
            System.out.println("reuslt="+result[i]);
            System.out.println("child_reuslt="+child_result);
            if((null==child_result)||("".equals(child_result)))
            {
                nullerror++;
            }
            else
            {
                double child_result2=Double.valueOf(child_result);
              if(child_result2==result[i])
              {
                 correct++;
              }
              else
              {
                error++;
               }
            }
        }
    %>
    
      恭喜你!答对了<%=correct %>道题,答错了<%=error %>道题,没答<%=nullerror %>道题!!!
    
    </body>
    </html>

    这是对上次四则运算做的基础改进

    但是由于时间原因,对计时的功能还没有完善,而且对choose页面的选择,在二元运算,和三元运算还没有实行传参,需要继续改进。

    这次做的最基础出的问题就是对CSS还了解不够,在做choose页面的时候还借鉴了李的,这次和王的合作还比较愉快,还需继续改进。

  • 相关阅读:
    77、Android设置虚线、圆角、渐变
    c# 制作自定义控件并生成dll文件旷展到其他项目使用
    VB ListView罗列图片
    (壹)、java面向对象详解
    php基本语法
    1.单例模式
    Memcached详解
    MySql的优化
    页面静态化详解
    mysql常用知识点
  • 原文地址:https://www.cnblogs.com/lovema1210/p/7994627.html
Copyright © 2020-2023  润新知