四则运算(网页版)结对开发

 

1.结对开发成员:刘子伦、康杨

2.设计思想:

javabean里写四则运算出题的核心代码。出题的java代码在以前的博客里。因为要写网页版,先设置一个首页MyHtml.html,然后通过一个按钮,从MyHtml.html跳转到NewFile.html页面。这个页面编写为出题页面,页面里面有数值范围、题目个数和题目类型。然后提交跳转到NewFile.jsp页面,这个页面编写为答题页面,里面有题目输入答案,答完题目以后点击提交跳转到MyFile.jsp。这个页面里面显示答题是否正确和正确结果。

3.程序源代码

MyHtml.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

   <style type="text/css">
body 
{
background-image:url(5.jpg);
background-size:100%;
}//设置背景图片
</style>
<body>
 <center>
  <h1>欢迎使用四则运算答题系统<h1>
 
  <center>
    <td align="center">
 <form action="MyHtml.html" method="post">
 <center>

 <input type="submit"  name="submit" style="text-align:center,vertical-align:middle;width:400px;height:70px;font-size:20px" value="我已准备好,请开始出题"  onClick="window.location.href='NewFile.html'">
<input type="submit"  name="submit" style="text-align:center,vertical-align:middle;width:400px;height:70px;font-size:20px" value="我没准备好,退出系统" onClick="window.close()";>
</div></form>
</td>
</center>
   
<div id="jnkc">
 
</div>
 
<script>setInterval("jnkc.innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",1000);
 
</script>
    
</body>
</html>

NewFile.html

<!DOCTYPE html>
  <html>
    <head>
      <title>四则运算</title>
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      <meta name="keywords" content="keyword1,keyword2,keyword3">
      <meta name="description" content="this is my page">
     
      
     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
 
   </head>   
<style type="text/css">
body 
{
background-image:url(2.jpg);
background-size:100%;
}//设置背景图片
</style>
  
    <script type="text/javascript">
        
        function tick() {
            var today;
            today = new Date();
            document.getElementById("localtime").innerHTML = showLocale(today);
            window.setTimeout("tick()", 1000);
        }
        tick();
    </script>
    <br />
    <h1 align="center">题目选择</h1>
   <!-- 传递参数的值给NewFile.jsp处理 -->
   <form action="NewFile.jsp" method="post">  
   <!-- 互斥选择,值只能有一个 -->
   <center>
   <p><br>
     请输入最大值:<input type="value" name="TopNumber"><br>
     <br>
     请输入最小值:<input type="value" name="BaseNumber">
     <br>   
     <br> 
     请输入题目个数:
     <input type="text" name="timugeshu">
   </p>
   <p>题目类型:     <br>
   </p>
   <tr> 请选择需要题型是否有乘除法:
     <input type="radio" name="xuanze" value=1><input type="radio" name="xuanze" value=2>×
 </tr>
   <br>
   <tr>请选择需要的题型是否有余数:
   <input type="radio" name="xuanze1" value=3><input type="radio" name="xuanze1" value=4>×
   </tr>
   <br>
   <tr>请选择需要的题型是否有括号:
   <input type="radio" name="xuanze2" value=5><input type="radio" name="xuanze2" value=6>×</tr>
   <br>
   <br>
   
   <input type="submit" name="submit" value="提交">
   </center>

   </form>
   </body>
 </html>

NewFile.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" 
     pageEncoding="utf-8"%>
  <%@ page import="szys.*"%>
  <%
  String path = request.getContextPath();
  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  %> 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
   <head>
   <script type="text/javascript">
var c=0
var t
function timedCount()
{
document.getElementById('txt').value=c
c=c+1
t=setTimeout("timedCount()",1000)
}

function stopCount()
{
c=0;
setTimeout("document.getElementById('txt').value=0",0);
clearTimeout(t);
}
</script>
   
     <base href="<%=basePath%>">     
     <title>四则运算</title>
     <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
          <meta http-equiv="pragma" content="no-cache">
     <meta http-equiv="cache-control" content="no-cache">
     <meta http-equiv="expires" content="0">    
     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
     <meta http-equiv="description" content="This is my page">
     <!--
     <link rel="stylesheet" type="text/css" href="styles.css">
     -->
     
   </head>   
<style type="text/css">
body 
{
background-image:url(3.jpg);
background-size:100%;
}//设置背景图片
</style>
       

    <%
    int timugeshu=Integer.parseInt((String)request.getParameter("timugeshu"));
    String[] s=new String[timugeshu];
    float k[]=new float[timugeshu];
    math a=new math();
    request.setCharacterEncoding("UTF-8");
    String xuanze = request.getParameter("xuanze");
    String xuanze1 = request.getParameter("xuanze1");
    String xuanze2 = request.getParameter("xuanze2");
    String TopNumber,BaseNumber;
    TopNumber=request.getParameter("TopNumber");
    BaseNumber=request.getParameter("BaseNumber");
    a.SetValue(a.StrToNum(TopNumber),a.StrToNum(BaseNumber));
    if(xuanze!=null&&xuanze1!=null&&xuanze2!=null){
    if(xuanze.equals("1"))
    {
          a.SetValue1(1);
    }
    if(xuanze1.equals("3"))
    {
           a.SetValue2(1);
    }
    if(xuanze2.equals("5"))
    {
          a.SetValue3(1);
    }
 }
     %>
    <form action="MyFile.jsp" method="post">
    <center>
    <%
      a.main();
      float temp;
      String[] se=new String[timugeshu];
      for(int i=0;i<timugeshu;i++){
      s[i]=a.cs(i);
      se[i]="name";
      se[i]=se[i]+i;
      k[i]=a.css(i);
      out.print(s[i]);
     
      
    %>   
   <input type="text" style="color: blue;width:50px;height:21px;" name=<%=se[i] %>>
  <% out.print("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"); %>
   <% 
   if((i+1)%3==0)
         out.print("<br><br>");%>
    <%
        } 
         session.setAttribute( "v1",s);
         session.setAttribute( "v2",k); 
     %>
      </center>
         
     
         <center>
     <br><input type="submit" name="submit" value="提交">   
     <input type="hidden" name="timugeshu" value="<%=timugeshu %>"> 
     <input type="button" value="开始计时!" onClick="timedCount()">
      <input type="text" id="txt">
     <input type="button" value="停止计时!" onClick="stopCount()">   
     <%    %>
      </center>
   </form>
  
      
   
    
     
   </body>
 </html>

MyFile.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312" contentType="text/html; charset=gb2312"%>
<%@ page import="szys.*"%>
<%String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
     <base href="<%=basePath%>">     
     <title>答题情况</title>     
     <meta http-equiv="pragma" content="no-cache">
     <meta http-equiv="cache-control" content="no-cache">
     <meta http-equiv="expires" content="0">    
     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
     <meta http-equiv="description" content="This is my page">
     <!--
     <link rel="stylesheet" type="text/css" href="styles.css">
     --> 
   </head>
   <style type="text/css">
body 
{
background-image:url(4.jpg);
background-size:100%;
}//设置背景图片
</style>
   <% request.setCharacterEncoding("UTF-8");%> 
   <center>
   <%  
     int timugeshu=Integer.parseInt((String)request.getParameter("timugeshu"));
     String[] name=new String[timugeshu];
     String[] sum=new String[timugeshu];
     math a=new math();
     float sum1[]=new float[timugeshu];
     int right=0;
     String[] s= (String[])session.getAttribute("v1");
     float[] k=(float[])session.getAttribute("v2");
     
     for(int i=0;i<timugeshu;i++)
         sum1[i]=0;
     for(int i=0;i<timugeshu;i++){
         name[i]="name";
         name[i]=name[i]+i;         
         sum[i]=request.getParameter(name[i]);
         out.print(s[i]);
         out.print("<tr>"+sum[i]+"</tr>");
         if(sum[i]=="")
            out.print("未回答!");
         else{
             if(((int)(k[i]*100))%100!=0)
                sum1[i]=a.StrToFloat1(sum[i]);
             else
                sum1[i]=a.StrToFloat(sum[i]);
             if(Math.abs(sum1[i]*100-k[i]*100)<4){
                out.print(" 回答正确!");
                right++;
             }
             else
                out.print(" 回答错误,正确答案是: "+k[i]);
         }   
         
          out.println("<br>");
     }
     out.print("总共做对 "+right+" 题");
     

   %><br>
    <input type="button" value="返回首页" onClick="window.location.href='MyHtml.html'">
    <input type="button" value="关闭" onClick="window.close();">
     </center>
   </body>
 </html>

java

package Calculator;
import java.util.*;
import Calculator.arithmetic;
import Calculator.subject;
import Calculator.Formula;
import java.lang.*;
 
public class calculator {
    static int N=100;
    //public int length = 0;//运算数个数
    static int fuh;//表示运算符的数(0、1、2、3分别代表+、-、*、/)
    static subject sub[]=new subject[N];//所有算式
    static int lpoint1;//内层左括号的位置
    static int rpoint1;//内层右括号的位置
    static int lpoint2;//外层左括号的位置
    static int rpoint2;//外层右括号的位置
    static Formula Formul[]=new Formula[N];    //定义一个字符串数组
    static int Flength;    //字符串数组长度
    static int i, j;
    static int Result;    //算式的运算结果
    static int dataS[]=new int[N];    //存储算式中的数
    static String fuhaoS[]=new String[N];    //存储算式中的符号
    static int count;    //记录答对题数
    static int CountNum=-1;    //记录对每道题求解
    static int CountStr=-1;    //记录每道题
    static int low;    //算式数值范围的最小值
    static int high;    //算式数值范围的最大值
    static int MulAndDiv;   //是否有乘除
    static int Bracket;     //是否有括号
    static int Negative;       //是否有负数
    static int Remainder;       //是否有余数
    //static int IsRep;       //是否重复
    static int Results[]= new int[N];      //正确结果数组
    //public subject buffer[] = new subject[N];     //缓冲区数组
    static String buffer[]=new String[N];
    static int LENGTH[]=new int[N];        //记录算式的长度
    static int number;    //题目数量
    //将算式转化为string数组
    public void ToString(int geti, int length)
    {
        Flength = -1;
        for (j = 0; j < length; j++)
        {
            if (sub[geti].arith[j].left2 != "")
            {
                Flength =Flength+ 1;
                Formul[Flength].str = sub[geti].arith[j].left2;
            }
            if (sub[geti].arith[j].left1 != "")
            {
                Flength =Flength+ 1;
                Formul[Flength].str = sub[geti].arith[j].left1;
            }
            Flength =Flength+ 1;
            Formul[Flength].str = String.valueOf(sub[geti].arith[j].member);
            Formul[Flength].data = sub[geti].arith[j].member;
            if (sub[geti].arith[j].right1 != "")
            {
                Flength =Flength+ 1;
                Formul[Flength].str = sub[geti].arith[j].right1;
            }
            if (sub[geti].arith[j].right2 != "")
            {
                Flength =Flength+ 1;
                Formul[Flength].str = sub[geti].arith[j].right2;
            }
            if (sub[geti].arith[j].fuhao != "")
            {
                Flength =Flength+ 1;
                Formul[Flength].str = sub[geti].arith[j].fuhao;
            }
        }
        String bstr="";
        for(i=0;i<Flength;i++)
        {
            bstr=bstr+Formul[i].str;
        }
        CountStr+=1;
        buffer[CountStr]=bstr;
    }
     
    //比较优先级
    public String Precede(String Fuhao1, String Fuhao2)
    {
        String FuResult="";    //返回优先级关系">"、"<"、"="
        if (Fuhao1 == "+")
        {
            if (Fuhao2 == "+" || Fuhao2 == "-" || Fuhao2 == ")" || Fuhao2 == "#")
            {
                FuResult = ">";
            }
            else
            {
                FuResult = "<";
            }
        }
        if (Fuhao1 == "-")
        {
            if (Fuhao2 == "+" || Fuhao2 == "-" || Fuhao2 == ")" || Fuhao2 == "#")
            {
                FuResult = ">";
            }
            else
            {
                FuResult = "<";
            }
        }
        if (Fuhao1 == "*")
        {
            if (Fuhao2 == "(")
            {
                FuResult = "<";
            }
            else
            {
                FuResult = ">";
            }
        }
        if (Fuhao1 == "/")
        {
            if (Fuhao2 == "(")
            {
                FuResult = "<";
            }
            else
            {
                FuResult = ">";
            }
        }
        if (Fuhao1 == "(")
        {
            if (Fuhao2 == ")")
            {
                FuResult = "=";
            }
            else
            {
                FuResult = "<";
            }
        }
        if (Fuhao1 == ")")
        {
            FuResult = ">";
        }
        if (Fuhao1 == "#")
        {
            if (Fuhao2 == "#")
            {
                FuResult = "=";
            }
            else
            {
                FuResult = "<";
            }
        }
        return FuResult;
    }
     
    //两个数运算
    public int Operate(int num1, String theta, int num2)
    {
        int InResult;    //返回运算结果
        if (theta == "+")
        {
            InResult = num1 + num2;
        }
        else if (theta == "-")
        {
            InResult = num1 - num2;
        }
        else if (theta == "*")
        {
            InResult = num1*num2;
        }
        else
        {
            InResult = num1 / num2;
        }
        return InResult;
    }
     
    //表达式求值
    public int ValueResult(int geti, int length)
    {
        int i;
        Flength = 0;
        String PResult;    //优先级比较结果
        String theta;    //出栈符号
        int num1, num2;    //出栈运算数
        int dalength=0;    //算式数据数组的长度
        int fulength=0;    //算式符号数组的长度
        ToString(geti, length);
         
        Formul[Flength].str = "#";
        //InitStack(OPND);
        //fuInitStack(OPTR);
        //fuPush(OPTR, "#");
        fuhaoS[fulength]="#";
         
        for (i = 0; i <= Flength; i++)
        {
            if (Formul[i].str == "#")
            {
                while (fuhaoS[fulength]!= "#")
                {
                    PResult = Precede(fuhaoS[fulength], Formul[i].str);
                    if (PResult == ">")
                    {
                        //fuPop(OPTR, theta);
                        theta=fuhaoS[fulength];
                        fulength-=1;
                        //Pop(OPND, num2);
                        num2=dataS[dalength];
                        dalength-=1;
                        //Pop(OPND, num1);
                        num1=dataS[dalength];
                        dalength-=1;
                        int num3 = Operate(num1, theta, num2);
                        //Push(OPND, num3);
                        dalength+=1;
                        dataS[dalength]=num3;
                    }
                    else if (PResult == "<")
                    {
                        //fuPush(OPTR, Formul[i].str);
                        fulength+=1;
                        fuhaoS[fulength]=Formul[i].str;
                    }
                    else
                    {
                        //fuPop(OPTR, theta);
                        theta=fuhaoS[fulength];
                        fulength-=1;
                    }
                }
            }
            else if (Formul[i].str == "(" || Formul[i].str == ")" || Formul[i].str == "+" || Formul[i].str == "-" || Formul[i].str == "*" || Formul[i].str == "/")
            {
                PResult = Precede(fuhaoS[fulength], Formul[i].str);
                if (PResult == ">")
                {
                    //fuPop(OPTR, theta);
                    theta=fuhaoS[fulength];
                    fulength-=1;
                    //Pop(OPND, num2);
                    num2=dataS[dalength];
                    dalength-=1;
                    //Pop(OPND, num1);
                    num1=dataS[dalength];
                    dalength-=1;
                    int num3 = Operate(num1, theta, num2);
                    //Push(OPND, num3);
                    dalength+=1;
                    dataS[dalength]=num3;
                    PResult = Precede(fuhaoS[fulength], Formul[i].str);
                    if (PResult == "=")
                    {
                        //fuPop(OPTR, theta); continue;
                        theta=fuhaoS[fulength];
                        fulength-=1;continue;
                    }
                    else
                    {
                        //fuPush(OPTR, Formul[i].str);
                        fulength+=1;
                        fuhaoS[fulength]=Formul[i].str;
                    }
                }
                else if (PResult == "<")
                {
                    //fuPush(OPTR, Formul[i].str);
                    fulength+=1;
                    fuhaoS[fulength]=Formul[i].str;
                }
                else
                {
                    //fuPop(OPTR, theta);
                    theta=fuhaoS[fulength];
                    fulength-=1;
                }
            }
            else
            {
                //Push(OPND, Formul[i].data);
                dalength+=1;
                dataS[dalength]=Formul[i].data;
            }
        }
        return dataS[dalength];
    }
     
    //随机数产生运算符
    String Fuhao(int fuh)
    {
        String fuh0;//返回运算符号
        if (fuh == 0)
            fuh0 = "+";
        else if (fuh == 1)
            fuh0 = "-";
        else if (fuh == 2)
            fuh0 = "*";
        else
            fuh0 = "/";
        return fuh0;
    }
     
    //初始化算式
    public void Init(int geti,int length, int high, int low, int TwoOrFour)
    {
        Random rand = new Random();
        for (j = 0; j < length - 1; j++)
        {
            sub[geti].arith[j].left2 = "";
            sub[geti].arith[j].left1 = "";
            sub[geti].arith[j].right1 = "";
            sub[geti].arith[j].right2 = "";
            sub[geti].arith[j].member = rand.nextInt() % (high - low) + low;
            //无乘除法
            if (TwoOrFour == 2)
            {
                fuh = rand.nextInt() % 2;
            }
            //有乘除法
            if (TwoOrFour == 4)
            {
                fuh = rand.nextInt() % 4;
            }
            sub[geti].arith[j].fuhao = Fuhao(fuh);
        }
        sub[geti].arith[length - 1].left2 = "";
        sub[geti].arith[length - 1].left1 = "";
        sub[geti].arith[length - 1].right1 = "";
        sub[geti].arith[length - 1].right2 = "";
        sub[geti].arith[length - 1].member = rand.nextInt() % (high - low) + low;
        sub[geti].arith[length - 1].fuhao = "=";
        for (j = 0; j < length; j++)
        {
            if (sub[geti].arith[j].right1 == "" || sub[geti].arith[j].right1 == ")")
            {
                if (sub[geti].arith[j].fuhao == "/"&&sub[geti].arith[j].left2 == ""&&sub[geti].arith[j].left1 == ""&&sub[geti].arith[j].right2 == "")
                {
                    if (sub[geti].arith[j + 1].fuhao == "/"&&sub[geti].arith[j + 1].left2 == ""&&sub[geti].arith[j + 1].left1 == ""&&sub[geti].arith[j + 1].right1 == ""&&sub[geti].arith[j + 1].right2 == "")
                    {
                        sub[geti].arith[j].left1 = "(";
                        sub[geti].arith[j + 1].right1 = ")";
                        j +=1;
                    }
                }
            }
        }
    }
    /*
    //输出函数
    public void Output(int geti, int length)
    {
        for (j = 0; j < length; j++)
        {
            //cout << sub.arith[j].left2 << sub.arith[j].left1 << sub.arith[j].member << sub.arith[j].right1 << sub.arith[j].right2 << sub.arith[j].fuhao;
            System.out.print(sub[geti].arith[j].left2);
            System.out.print(sub[geti].arith[j].left1);
            System.out.println(sub[geti].arith[j].member);
            System.out.print(sub[geti].arith[j].right1);
            System.out.print(sub[geti].arith[j].right2);
            System.out.print(sub[geti].arith[j].fuhao);
        }
        //cout << endl;
    }
    */
    //括号的产生
    public int Bracket(int geti, int length)
    {
        Random rand = new Random();
        int check = 0;
        if (length > 2)
        {
            int floor = rand.nextInt() % 2 + 1;//产生括号的层数
            if (floor == 1)
            {
                lpoint1 = rand.nextInt() % (length - 1);//产生左括号的位置
                rpoint1 = lpoint1 + rand.nextInt() % (length - 1 - lpoint1);//产生右括号的位置
                if (lpoint1 == rpoint1)
                {
                    if (lpoint1 > 0)
                    {
                        lpoint1 -= 1;
                    }
                    else
                    {
                        if (rpoint1 < length - 1)
                        {
                            rpoint1 +=1;
                        }
                    }
                }
                sub[geti].arith[lpoint1].left1 = "(";
                sub[geti].arith[rpoint1].right1 = ")";
            }
            else
            {
                if (length > 3)
                {
                    lpoint1 = rand.nextInt() % (length - 1);//产生内层左括号的位置
                    rpoint1 = lpoint1 + rand.nextInt() % (length - 1 - lpoint1);//产生内层右括号的位置
                    if (lpoint1 == rpoint1)
                    {
                        if (lpoint1 > 0)
                        {
                            lpoint1 -= 1;
                        }
                        else
                        {
                            if (rpoint1 < length - 1)
                            {
                                rpoint1 +=1;
                            }
                        }
                    }
                    sub[geti].arith[lpoint1].left1 = "(";
                    sub[geti].arith[rpoint1].right1 = ")";
                    if (lpoint1 == 0)
                    {
                        lpoint2 = lpoint1;//产生外层左括号的位置
                    }
                    else
                    {
                        lpoint2 = lpoint1 - rand.nextInt() % lpoint1;//产生外层左括号的位置
                    }
                    rpoint2 = rpoint1 + rand.nextInt() % (length - rpoint1);//产生外层右括号的位置
                    if (lpoint2 == lpoint1&&rpoint2 == rpoint1)
                    {
                        if (lpoint2 > 0)
                        {
                            lpoint2 -= 1;
                        }
                        else
                        {
                            if (rpoint2 < length - 1)
                            {
                                rpoint2 +=1;
                            }
                        }
                    }
                    sub[geti].arith[lpoint2].left2 = "(";
                    sub[geti].arith[rpoint2].right2 = ")";
                }
                else
                {
                    check = 1;
                }
            }
        }
        return check;
    }
 
    //判断用户是否答对
    public int Right(int result, int answer)
    {
        if (answer == result)
        {
            return 0;
        }
        else
        {
            return 1;
        }
        //return 0;
    }
 
    //验证除法有无余数
    public int change(int geti, int length)
    {
        int check = 0;
        for (j = 0; j < length; j++)
        {
            if (sub[geti].arith[j].fuhao == "/"&&sub[geti].arith[j].right1 != ")")
            {
                if (sub[geti].arith[j].member%sub[geti].arith[j + 1].member != 0)
                {
                    check = 1;
                }
            }
            if (sub[geti].arith[j].fuhao == "/"&&sub[geti].arith[j].right1 == ")")
            {
                if ((sub[geti].arith[j - 1].member / sub[geti].arith[j].member) % sub[geti].arith[j + 1].member != 0)
                {
                    check = 1;
                }
            }
        }
        return check;
    }
 
    //有乘除法、有括号、加减有负数、除法有余数
    public void Output1(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验产生式是否合格
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            Result = ValueResult(i, sub[i].length);
            check = Bracket(i, sub[i].length);
            if (Result>high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //有乘除法、有括号、加减有负数、除法无余数
    public void Output2(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验产生式是否合格
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            int check1 = 0;//检验除法是否有余数
            Init(i, sub[i].length, high, low, 4);
            check = Bracket(i, sub[i].length);
            check1 = change(i, sub[i].length);
            Result = ValueResult(i, sub[i].length);
            if (Result > high)
            {
                check = 1;
            }
            if (check == 1 || check1 == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //有乘除法、有括号、加减无负数、除法有余数
    public void Output3(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验产生式是否合格
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            check = Bracket(i, sub[i].length);
            Result = ValueResult(i, sub[i].length);
            if (Result < 0 || Result > high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //有乘除法、有括号、加减无负数、除法无余数
    public void Output4(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验产生式是否合格
            int check1 = 0;//检验除法是否有余数
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            check = Bracket(i, sub[i].length);
            check1 = change(i, sub[i].length);
            Result = ValueResult(i, sub[i].length);
            if (Result < 0 || Result > high)
            {
                check = 1;
            }
            if (check == 1 || check1 == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //有乘除法、无括号、加减有负数、除法有余数
    public void Output5(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            Result = ValueResult(i, sub[i].length);
            if (Result > high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            //Output(sub[i], sub[i].length);
            //LENGTH[CountNum++]=sub[i].length;
            //buffer[CountNum++]=sub[i];
            CountNum+=1;
            Results[CountNum]=Result;
            //int answer = Input();
            //Right(Result, answer);
        }
        //UserResult(count);
    }
    //有乘除法、无括号、加减有负数、除法无余数
    public void Output6(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            check = change(i, sub[i].length);
            Result = ValueResult(i, sub[i].length);
            if (Result > high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            //Output(sub[i], sub[i].length);
            //LENGTH[CountNum++]=sub[i].length;
            //buffer[CountNum++]=sub[i];
            CountNum+=1;
            Results[CountNum]=Result;
            //int answer = Input();
            //Right(Result, answer);
        }
        //UserResult(count);
    }
    //有乘除法、无括号、加减无负数、除法有余数
    public void Output7(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            Result = ValueResult(i, sub[i].length);
            if (Result < 0 || Result > high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //有乘除法、无括号、加减无负数、除法无余数
    public void Output8(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 4);
            Result = ValueResult(i, sub[i].length);
            check = change(i, sub[i].length);
            if (Result < 0 || Result > high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //无乘除法、有括号、加减有负数
    public void Output9(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验产生式是否合格
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 2);
            Result = ValueResult(i, sub[i].length);
            check = Bracket(i, sub[i].length);
            if (Result>high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //无乘除法、有括号、加减无负数
    public void Output10(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            int check = 0;//检验产生式是否合格
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 2);
            check = Bracket(i, sub[i].length);
            Result = ValueResult(i, sub[i].length);
            if (Result < 0 || Result > high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            else
            {
                //Output(sub[i], sub[i].length);
                //LENGTH[CountNum++]=sub[i].length;
                //buffer[CountNum++]=sub[i];
                CountNum+=1;
                Results[CountNum]=Result;
                //int answer = Input();
                //Right(Result, answer);
            }
        }
        //UserResult(count);
    }
    //无乘除法、无括号、加减有负数
    public void Output11(int number, int low, int high)
    {
        int count = 0;
        for (i = 0; i < number; i++)
        {
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 2);
            Result = ValueResult(i, sub[i].length);
            if (Result>high)
            {
                i = i - 1; continue;
            }
            //Output(sub[i], sub[i].length);
            //LENGTH[CountNum++]=sub[i].length;
            //buffer[CountNum++]=sub[i];
            CountNum+=1;
            Results[CountNum]=Result;
            //int answer = Input();
            //Right(Result, answer);
        }
        //UserResult(count);
    }
    //无乘除法、无括号、加减无负数
    public void Output12(int number, int low, int high)
    {
        //int count = 0;//记录用户答对题数
        for (i = 0; i < number; i++)
        {
            Random rand = new Random();
            sub[i].length = rand.nextInt() % 9 + 2;
            Init(i, sub[i].length, high, low, 2);
            int check = 0;//检验
            Result = ValueResult(i, sub[i].length);
            if (Result<0 || Result>high)
            {
                check = 1;
            }
            if (check == 1)
            {
                i = i - 1; continue;
            }
            //Output(sub[i], sub[i].length);
            //LENGTH[CountNum++]=sub[i].length;
            //buffer[CountNum++]=sub[i];
            CountNum+=1;
            Results[CountNum]=Result;
            //int answer = Input();
            //Right(Result, answer);
        }
        //UserResult(count);
    }
     
    public void SetValue(int high1,int low1,int number1){
        MulAndDiv=0;
        Bracket=0;
        Negative=0;
        Remainder=0;
        high=high1;
        low=low1;   
        number=number1;
    } 
    public void SetValue1(int MAD)
    {
        MulAndDiv=MAD;
    }
    public void SetValue2(int Bra)
    {
        Bracket=Bra;
    }
    public void SetValue3(int Neg)
    {
        Negative=Neg;
    }
    public void SetValue4(int Rem)
    {
        Remainder=Rem;
    }
     
    public int Choose(){
        if(MulAndDiv==1&&Bracket==1&&Negative==1&&Remainder==1){
            return 1;
        }
        else if(MulAndDiv==1&&Bracket==1&&Negative==1&&Remainder==0){
            return 2;
        }
        else if(MulAndDiv==1&&Bracket==1&&Negative==0&&Remainder==1){
            return 3;
        }
        else if(MulAndDiv==1&&Bracket==1&&Negative==0&&Remainder==0){
            return 4;
        }
        else if(MulAndDiv==1&&Bracket==0&&Negative==1&&Remainder==1){
            return 5;
        }
        else if(MulAndDiv==1&&Bracket==0&&Negative==1&&Remainder==0){
            return 6;
        }
        else if(MulAndDiv==1&&Bracket==0&&Negative==0&&Remainder==1){
            return 7;
        }
        else if(MulAndDiv==1&&Bracket==0&&Negative==0&&Remainder==0){
            return 8;
        }
        else if(MulAndDiv==0&&Bracket==1&&Negative==1&&Remainder==0){
            return 9;
        }
        else if(MulAndDiv==0&&Bracket==1&&Negative==0&&Remainder==0){
            return 10;
        }
        else if(MulAndDiv==0&&Bracket==0&&Negative==1&&Remainder==0){
            return 11;
        }
        else
            return 12;
    }
     
     public int StrToNum(String strget)
     {
         int num=0;
         for(int i=0;i<strget.length();i++)
         {
             num=num*10+strget.charAt(i)-48;
         }
         return num;
     }
     //输出算式
     public String OutputEq(int number1)
     {
         return buffer[number1];
     }
     //输出答案
     public int OutputAn(int number1)
     {
         return Results[number1];
     }
     public int OutputLE(int number1)
     {
         return LENGTH[number1];
     }
 
    public int main()
    {
        int chooseWay;    //条件筛选结果
        chooseWay = Choose();        //条件筛选
        switch (chooseWay)
        {
        case 1:Output1(number, low, high); break;
        case 2:Output2(number, low, high); break;
        case 3:Output3(number, low, high); break;
        case 4:Output4(number, low, high); break;
        case 5:Output5(number, low, high); break;
        case 6:Output6(number, low, high); break;
        case 7:Output7(number, low, high); break;
        case 8:Output8(number, low, high); break;
        case 9:Output9(number, low, high); break;
        case 10:Output10(number, low, high); break;
        case 11:Output11(number, low, high); break;
        case 12:Output12(number, low, high);
        }
        return 0;
    }
     
}

 

 

4.运行结果截图

 

5.总结体会

这次是第一个的web网页程序,通过这次作业熟悉了java的书写,这次主要是题目的要求比较多,所以要求逻辑思路要清楚,每一个模块完成哪个部分要知道。也了解了web程序的书写。web主要就是设计网页界面。既然是网页版要给别人使用页面就要美观,所以加入一些比如时间,字体颜色的改变。每个页面要完成一个板块,网页版最重要的就是网页之间的跳转,所以跳转的过程要清楚。这次作业是结对开发,也是第一次合作完成程序,设计和编写也有冲突的时候,但是正是有冲突才有思路的碰撞才有新的方法。这样写程序的速度比一个人更快。在写程序时候也有一个人督促着,使着学习的积极性更高。

6.psp表

估计各个模块需要的时间

PSP2.1

Personal Software Process Stages

Time

Planning

计划

 

  · Estimate

  · 估计这个任务需要多少时间

 24h

Development

开发

 

  · Analysis

  · 需求分析 (包括学习新技术)

5h

 

  · Design Spec

  · 生成设计文档

 2h

  · Design Review

  · 设计复审 (和同事审核设计文档)

 1h

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 1h

  · Design

  · 具体设计

 3h

  · Coding

  · 具体编码

 8h

  · Code Review

  · 代码复审

 2h

  · Test

  · 测试(自我测试,修改代码,提交修改)

 4h

Reporting

报告

 

  · Test Report

  · 测试报告

 1h

  · Size Measurement

  · 计算工作量

 1h

  · Postmortem & Process Improvement Plan

  · 事后总结并提出过程改进计划

 1h

 

合计

 28h

 

各个模块实际需要的时间

PSP2.1

Personal Software Process Stages

Time

Planning

计划

 

  · Estimate

  · 估计这个任务需要多少时间

 20h

Development

开发

 

  · Analysis

  · 需求分析 (包括学习新技术)

5h

 

  · Design Spec

  · 生成设计文档

 1h30min

  · Design Review

  · 设计复审 (和同事审核设计文档)

 30min

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 1h

  · Design

  · 具体设计

 1h30min

  · Coding

  · 具体编码

 10h

  · Code Review

  · 代码复审

 1h

  · Test

  · 测试(自我测试,修改代码,提交修改)

 1h30min

Reporting

报告

 

  · Test Report

  · 测试报告

 1h

  · Size Measurement

  · 计算工作量

 1h

  · Postmortem & Process Improvement Plan

  · 事后总结并提出过程改进计划

 1h

 

合计

 25h

posted @ 2017-04-07 18:18  康杨  阅读(324)  评论(0编辑  收藏  举报