这次的四则运算,是基于上次的java基础上改的。

1.思路:现有三个页面

              页面一:index.jsp     输入总题数:count,输入出题每行的个数:rcount;

                   将action=“show.jsp”中

              页面二:show.jsp     显示随机产生的式子

                   用request接受      将所填写的结果存入到result[],将正确答案存入到answer[],将随机产生的式子存入到posture[];

             页面三:judge.jsp    判断答案

                          关键点: String results[]=request.getParameterValues("results");
                                         String answer[]=request.getParameterValues("answer");

      index.jsp源码:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>四则运算自动出题界面</title>
<style>
  .name{
  align:center;
  font-size:20px;
  font-color:black;
  }
</style>
</head>
<body type="text" style="background:url(img/child.jpg);   background-size:100%">

   <form action="show.jsp" action="judge.jsp"  method="post"  onsubmit="return checkAll()"  aglin="center">
   <div  class="name">
    <h2>随机四则运算选题界面</h2>
    <table>
        <tr>
            <td>请输入你需要测试的题目数量:</td>
            <td><input type="text"  name="count" id="count" placeholder="题目总数量"  onchange="checkCount()"></td>
        </tr>
        <tr>
             <td>请输入每行的出题数量(最多是4个):</td>
             <td><input type="text" name="rcount" id="rcount" placeholder="每行的数量"  onchang="checkRcount()"></td>
        </tr>
        <tr>
            <td><input type="submit" value="确定"></td>
            <td> <input type="reset" value="重置" onclick="formReset()"></td>
        </tr>
    </table>
    </div>
</body>

<script type="text/javascript">

        function formReset() 
      {//重置按钮处添加onclick调用formReset %>
              document.getElementById("form").reset();
       }
        function checkCount(){
            var count=document.getElementById("count");
            var count_print=count.value;
            if(count_print==""){
                alert("出题的总数不能为空,请重新输入!")
                count.focus();
                return false;
            }
            else
                return true;
        }
        function checkRcount(){
            var rcount=document.getElementById("rcount");
            var rcount_print=rcount.value;
            if(rcount==""){
                alert("每行的出题数不能为空,请重新输入!");
                rcount.focus();
                return false;
            }
            else
                return true;
        }
        function checkAll(){
            var count=document.getElementById("count");
            var count_print=count.value;
            var rcount=document.getElementById("rcount");
            var rcount_print=rcount.value;
            if(count_print==""){
                alert("出题的总数不能为空,请重新输入!")
                count.focus();
                return false;
            }
            else
                return true;
        }
        if(rcount==""){
            alert("每行的出题数不能为空,请重新输入!");
            rcount.focus();
            return false;
        }
        else
            {
            return true;
          }
       }
</script>
</html>

show.jsp源码:

<%@page import="org.omg.CORBA.portable.ValueBase"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<form action="judge.jsp" method="post">
<body type="text" style="background:url(img/child.jpg);background-size:100%">
   <h2>题目如下:</h2>
   <%
       int count= Integer.parseInt(request.getParameter("count"));//得到前面index.jsp中输入的总题数
       int rcount = Integer.parseInt(request.getParameter("rcount"));//得到前面index.jso中输入的一行中的个数
       //request表示客户端向服务器发送的请求
       //response表示服务器端对客户端的响应
          String x = null;
          int stra[]=new int[100000];//产生符号前面的随机数组
          int strb[]=new int[100000];//产生符号后面的随机数组
          String[] posture=new String[1000000];//存放整个式子
           int answer[]=new int[10000];//用于存放每个式子的正确答案
           int result[]=new int[10000];//用于存放你输入的答案
           int flag=1;
          aa: for(int i=1;i<=count;i++)
           {
               int a=(int)(1+Math.random()*99);//产生随机数
               int b=(int)(1+Math.random()*99);
               int c=(int)(1+Math.random()*4);
               stra[i]=a;
               strb[i]=b;
               switch(c)//将c(随机数)表示为运算符号
               {
               case 1:x="+";break;
               case 2:x="-";break;
               case 3:x="*";break;
               case 4:x="/";break;
               }
               for(int j=0;j<i;j++)
               {
                   if(stra[j]==stra[i]&&strb[j]==strb[i])
                       flag=0;
                   else
                       flag=1;
               }
               if(flag==1)
               {
                        if(a>=b&&(a%b)==0&&a*b<=100) 
                        {
                
                        out.print(i+":"+a+x+b+"="+"      ");
                        posture[i]=i+":"+a+x+b+"="+"      ";//将得到的式子存放到posture中
                      if(x=="+") answer[i]=a+b;//得到正确答案
                      else if(x=="-") answer[i]=a-b;
                      else if(x=="*") answer[i]=a*b;
                      else if(x=="/") answer[i]=a/b;
                        //out.println(answer[i]);
                      %>

                         <input type="text" name="results" >
                         <input type="hidden" name="answer" value=<%=answer[i] %>>
                      <% 
                        //<input type="text" name="value[i] id=">
                        //posture[i]=i+":"+a+x+b+"="+"      ";
                        }
                          else 
                        {
                            i--;
                            continue;
                        }
                  if(i%rcount==0)
                  {
                      %>
                        <pre> 
                    <%   
                       out.println();//1.print换行表示,必须使用<pre>标签           2.或者直接使用<br>
                     %> 
                 </pre> 
               
                      <% 
                  }
               }
           }
           //session.setAttribute("answer1", answer);
           //session.setAttribute("count1", count);

         %>
    <input type="submit" value="提交(可查看结果)">
  </form>

</body>
</html>

judge.jsp源码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>做题结果</title>
</head>
<body  type="text" style="background:url(img/child.jpg);   background-size:100%">
 <form type="text" method="post">
     
     <%
     
         String results[]=request.getParameterValues("results");
         String answer[]=request.getParameterValues("answer");  
            int tr=0;
            int fa=0;
            for(int i=0;i<results.length;i++)
            {
                if(results[i].equals(answer[i]))
                {
                    tr++;%>
                    <p>第<%=i+1 %>题正确</p>
                    <% 
                }
                    else{
                        fa++;%>
                        <p>第<%=i+1 %>题错误,输入为<%=results[i] %>,正确答案为<%=answer[i] %></p>
                        <%
                    }
                }
            %>
        
     <h3>你答对了<%=tr %>题,答错了<%=fa %>题</h3>
 </form>
</body>
</html>

 代码测试截图:

页面一:

 

页面二:

 

 

 页面三:

 

 遇到的问题:

      页面er中所记录输入结果的数组result[]和记录正确答案的数组answer[],传不到页面三中的jsp中,始终显示500错误,

但是解决方法,在judge中,将两者定义为字符串

String results[]=request.getParameterValues("results");
String answer[]=request.getParameterValues("answer");

 

posted on 2019-11-08 09:30  阡陌祁画  阅读(199)  评论(0编辑  收藏  举报