软件工程个人作业02

题目

 

看完题目,决定写一个web版的程序,由于知识和时间欠缺,所以没有把要求全部做到,没有添加括号和多个数字运算,最后的输入答案也没有确定判断方式。我会继续完善的!!!

 

设计思路:

乘除法:根据页面传来的值,控制随机数范围,进而控制有无乘除

char [] fu = new char [4];//生成符号,控制有无乘除
        fu[0] = '-';
        fu[1] = '+';
        fu[2] = '/';
        fu[3] = '*';
         
        if(cc)
            fh = fu[new Random().nextInt(4)];
        else
            fh = fu[new Random().nextInt(2)];

 

 

 

 

括号:(暂未实现)

 

数值范围:通过下拉框确定数值位数,然后控制随机数范围,生成数字

 

if(wei == 1)
        {    
            shu1 = new Random().nextInt(9) + 1;
            shu2 = new Random().nextInt(9) + 1;
        }
        else if(wei == 2)
        {
            shu1 = new Random().nextInt(99) + 1;
            shu2 = new Random().nextInt(99) + 1;
        }
        else
        {
            shu1 = new Random().nextInt(999) + 1;
            shu2 = new Random().nextInt(999) + 1;
        }

 

 

 

有无负数、余数:通过单选框的值,然后对结果的判断,重新生成算式

for(int j = 0;j < i;j++)
            {
                if((c1[i].getShu1() == c1[j].getShu1() && c1[j].getShu2() == c1[i].getShu2()&& 
                    c1[i].getFh() == c1[j].getFh()) ||(fs == false && c1[i].getResult() < 0)||(ys == false && !c1[i].isInteger()))
                {
                    c1[i] = new Cal_zs(cc, w);
                    j = 0;
                }
            }
            c2[i] = new Cal_zfs(cc, w);
            for(int k = 0;k < i;k++)
            {
                if((c2[i].getShu1() == c2[k].getShu1() && c2[k].getShu2() == c2[i].getShu2() && 
                        c2[i].getFh() == c2[k].getFh())||(!fs && c1[i].getResult() < 0))
                {
                    c2[i] = new Cal_zfs(cc, w);
                    k = 0;
                }
            }

 

 

 

代码:

first.jsp:

 

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>出题</title>
    <style type="text/css">
    h2{color:red}
    </style>
</head>
<body>
    <h2 align="center">出题器</h2>
    <form name="form1" action="chuti.jsp" method="post">
        <table align="center">
            <tr>
                <td>题目类型:</td>
                <td>
                    <select name="lei">
                      <option value="整数" selected>整数</option>
                      <option value="真分数">真分数</option>
                      <option value="混合">混合</option>
                    </select>
                </td>  
            </tr>
            <tr>
                <td>是否有乘除法:</td>
                <td>
                    <input type="radio" name="cc" value="无" checked><input type="radio" name="cc" value="有"></td>
            </tr>
            <tr>
                <td>是否有括号:</td>
                <td>
                    <input type="radio" name="kh" value="无" checked><input type="radio" name="kh" value="有"></td>
            </tr>
            <tr>
                <td>数值范围:</td>
                <td>
                    <select name="wei">
                      <option value="一位数" selected>一位数</option>
                      <option value="两位数">两位数</option>
                      <option value="三位数">三位数</option>
                    </select>
                </td>  
            </tr>
            <tr>
                <td>加减有无负数:</td>
                <td>
                    <input type="radio" name="fushu" value="无" checked><input type="radio" name="fushu" value="有"></td>
            </tr>
            <tr>
                <td>除法有无余数:</td>
                <td>
                    <input type="radio" name="yushu" value="无" checked><input type="radio" name="yushu" value="有"></td>
            </tr>
            <tr>
                <td>题量</td>
                <td>
                    <input type="text" name="num" value="1">不大于100题
                </td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="开始出题!"></td>
            </tr>
        </table>
    </form>
</body>
</html>

 

 

chuti.jsp:

<%@ page language="java" import="java.util.*, java.sql.*, calculat.shu" contentType="text/html; charset=gb2312"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:requestEncoding value="gb2312"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style type="text/css">
    h2{color:red}
    
    .tb1{
    border-left-style:solid;
    border-bottom-style:solid;
    border-top-style:solid;
    border-right-style:solid;
    border-width:2px;
    }
</style>
<script type="text/javascript">
  var i = 0;
  var Color = new Array("#0000FF", "#99FF00", "#660033", "#CC66CC", "#FFFF33");
  function change(){
      if(i > Color.length - 1)
          i = 0;
      table1.style.borderColor = Color[i];
      i++;
      setTimeout("change()", 500);
  }
</script>
<script type="text/javascript">
function Case(txt)
{
    var x=document.getElementById("result").value;
    if(x == txt.value)
    {    
        alert("正确!");
        outline="none";
        border="1 solid green";
    }
    else
    {    
        outline="none";
        border="1 solid red";
    }
}
</script>
    <title>出题</title>
</head>
<body onload="change()">
    <h1 align="center">题目</h1>
      <table id="table1" align="center" class="tb1">
          <tr>
              <td>题目类型:</td>
              <td>${param.lei}</td>
              <td>&nbsp;&nbsp;</td>
              <td>是否有乘除法:</td>
              <td>${param.cc}</td>
          </tr>
          <tr>
              <td>是否有括号:</td>
              <td>${param.kh}</td>
              <td>&nbsp;&nbsp;</td>
              <td>数值范围:</td>
              <td>${param.wei}</td>
          </tr>
          <tr>
              <td>加减有无负数:</td>
              <td>${param.fushu}</td>
              <td>&nbsp;&nbsp;</td>
              <td>除法有无余数:</td>
              <td>${param.yushu}</td>
          </tr>
      </table>
      
      <h2 align="center">请填写答案:</h2>
      <form name="form2" action="yanzheng.jsp" method="post">
          <table align="center">
          <tr>
              <th>题目</th>
              <th>&nbsp;</th>
              <th>答案</th>
          </tr>
          
          <jsp:useBean id="c" class="calculat.shu" scope="request"/>
          <%
          boolean cc = true;//有无乘除,并赋值
          if(request.getParameter("cc").equals(""))
              cc = false;
          int w;
          if(request.getParameter("wei").equals("一位数"))
              w = 1;
          else if(request.getParameter("wei").equals("两位数"))
              w = 2;
          else
              w = 3;
           
          boolean fs = true;
          if(request.getParameter("fushu").equals(""))//负数
              fs = false;
          boolean ys = true;
          if(request.getParameter("yushu").equals(""))//余数
              ys = false;
          
          //生成算式
          c = new shu(cc, w, fs, ys);
          int N = Integer.parseInt(request.getParameter("num"));//出题数
          c.setN(N);
          
          String str = request.getParameter("lei");//出题类型
          c.setCc(cc);
         
          String s = "";
          for(int i = 0;i < N;i++)
            {
            out.print("<tr><td>");
              if(str.equals("整数"))
              {
                  out.print(c.show1(i) + "</td>");
                  s = c.result1(i);
              }
              else if(str.equals("真分数"))
              {
                  out.print(c.show2(i) + "</td>");
                  s = c.result2(i);
              }
              else
              {
                  if((new Random().nextInt(99) + 1)%2 == 0)
                  {
                      out.print(c.show1(i) + "</td>");
                      s = c.result1(i);
                  }
                  else
                  {
                      out.print(c.show2(i) + "</td>");
                      s = c.result2(i);
                  }
              }
          %>
             <td>=</td>
             <td><input id="result" type="text" onblur="Case(s)"></td>
             </tr>
          <%} %>
          </table>
      </form>
</body>
</html>

 

Cal_zs.java:

 

package calculat;
import java.util.Random;

public class Cal_zs{
    public char fh;
    public int shu1;
    public int shu2;
    public int result;
    
    public int getResult() {
        return result;
    }
    public Cal_zs()
    {}
    public char getFh() {
        return fh;
    }

    public int getShu1() {
        return shu1;
    }

    public int getShu2() {
        return shu2;
    }
    public Cal_zs(boolean cc,int wei)
    {
        char [] fu = new char [4];//生成符号,控制有无乘除
        fu[0] = '-';
        fu[1] = '+';
        fu[2] = '/';
        fu[3] = '*';
         
        if(cc)
            fh = fu[new Random().nextInt(4)];
        else
            fh = fu[new Random().nextInt(2)];
        if(wei == 1)
        {    
            shu1 = new Random().nextInt(9) + 1;
            shu2 = new Random().nextInt(9) + 1;
        }
        else if(wei == 2)
        {
            shu1 = new Random().nextInt(99) + 1;
            shu2 = new Random().nextInt(99) + 1;
        }
        else
        {
            shu1 = new Random().nextInt(999) + 1;
            shu2 = new Random().nextInt(999) + 1;
        }
        
        if(fh == '+')
            result = shu1 + shu2;
        else if(fh == '-')
            result = shu1 - shu2;
        else if(fh == '*')
            result = shu1 * shu2;
        else
        result = shu1 / shu2;
    }
    
    public String show()
    {
        return shu1 + " " + fh + " " + shu2;
    }
    
    public boolean isInteger(){ 
        double r, s1 = shu1, s2 = shu2;
        if(fh == '/')
        {    
            r = s1 / s2;
            String str = r + "";
            for(int i = 0;i < str.length();i++)
            {
                if(str.charAt(i) == '.' && i == str.length() - 2 && str.charAt(i + 1) == '0')
                    return true;
            }
            return false;
        }
        else
            return true;
        
         
    } 
}

 

 

 

Cal_zfs.java:

 

package calculat;
import java.util.Random;

public class Cal_zfs{
    public char fh;
    public String shu1;
    public String shu2;
    public String result;
    
    public char getFh() {
        return fh;
    }

    public String getResult() {
        return result;
    }

    public String getShu1() {
        return shu1;
    }

    public String getShu2() {
        return shu2;
    }
    public Cal_zfs()
    {
        
    }
    
    public Cal_zfs(boolean cc, int w)
    {
        int fzi1;
        int fmu1;
        int fzi2;
        int fmu2;
        char [] fu = new char [4];//生成符号,控制有无乘除
        fu[0] = '-';
        fu[1] = '+';
        fu[2] = '/';
        fu[3] = '*';
        if(cc)
            fh = fu[new Random().nextInt(4)];
        else
            fh = fu[new Random().nextInt(2)];
        
        
        if(w == 1)
        {    
            fmu1 = new Random().nextInt(9) + 1;
            fmu2 = new Random().nextInt(9) + 1;
        }
        else if(w == 2)
        {
            fmu1 = new Random().nextInt(99) + 1;
            fmu2 = new Random().nextInt(99) + 1;
        }
        else
        {
            fmu1 = new Random().nextInt(999) + 1;
            fmu2 = new Random().nextInt(999) + 1;
        }
        
        fzi1 = new Random().nextInt(fmu1) + 1;
        fzi2 = new Random().nextInt(fmu2) + 1;
        int gy = gys(fzi1, fmu1);
        int gy2 = gys(fzi2, fmu2);
        if(fzi1 == fmu1)
            shu1 = "1";
        else
            shu1 = fzi1 / gy + "/" + fmu1 / gy;
        if(fzi2 == fmu2)
            shu1 = "1";
        else
            shu2 = fzi2 / gy2 + "/" + fmu2 / gy2;
        
        int fm = 0, fz = 0;
        if(fh == '+')
        {
            fm = fmu1 * fmu2;
            fz = fmu1 * fzi2 + fmu2 * fzi1;
        }
        else if(fh == '-')
        {
            fm = fmu1 * fmu2;
            fz = fmu2 * fzi1 - fmu1 * fzi2;
        }
        else if(fh == '*')
        {
            fm = fmu1 * fmu2;
            fz = fzi1 * fzi2;
        }
        else
        {
            fm = fmu1 * fzi2;
            fz = fzi1 * fmu2;
        }
        
        int g = gys(fz, fm);
        if(fz == fm)
            result = "1";
        else
            result = fz / g + "/" + fm / g;
    }
    
    public int gys(int s1, int s2)
    {
        int gy = 1;
        for(int i = 1; i <= (s1 < s2 ? s1 : s2); i++)
        {
            if(s1 % i == 0 && s2 % i == 0)
                gy = i;
        }
        return gy;
    }
    
    public String show()
    {
        return shu1 + " " + fh + " " + shu2;
    }
}

 

 

 

shu.java:

 

package calculat;

public class shu {
    private Cal_zs [] c1 = new Cal_zs [100];
    private Cal_zfs [] c2 = new Cal_zfs [100];
    boolean cc;
    int N;
    int wei;

    public void setN(int n) {
        N = n;
    }

    public void setwei(int w)
    {
        wei = w;
    }
    public void setCc(boolean cc) {
        this.cc = cc;
    }

    public shu()
    {
        
    }
    
    public shu(boolean cc, int w, boolean fs, boolean ys)
    {
        for(int i = 0;i < 100;i++)
        {
            c1[i] = new Cal_zs(cc, w);
            for(int j = 0;j < i;j++)
            {
                if((c1[i].getShu1() == c1[j].getShu1() && c1[j].getShu2() == c1[i].getShu2()&& 
                    c1[i].getFh() == c1[j].getFh()) ||(fs == false && c1[i].getResult() < 0)||(ys == false && !c1[i].isInteger()))
                {
                    c1[i] = new Cal_zs(cc, w);
                    j = 0;
                }
            }
            c2[i] = new Cal_zfs(cc, w);
            for(int k = 0;k < i;k++)
            {
                if((c2[i].getShu1() == c2[k].getShu1() && c2[k].getShu2() == c2[i].getShu2() && 
                        c2[i].getFh() == c2[k].getFh())||(!fs && c1[i].getResult() < 0))
                {
                    c2[i] = new Cal_zfs(cc, w);
                    k = 0;
                }
            }
        }
    }
    
    public String show1(int i)
    {
        return c1[i].show();
    }
    public String show2(int i)
    {
        return c2[i].show();
    }

    public String result1(int i)
    {
        return c1[i].getResult() + "";
    }
    public String result2(int i)
    {
        return c2[i].getResult() + "";
    }
}

 

运行效果图:

出题器

题目类型:
是否有乘除法:
是否有括号:
数值范围:
加减有无负数:
除法有无余数:
题量 不大于100题
 

 

运行结果截图(未选择所有情况):

 

 

总结:在web上学会了很多,可是也知道自己还有许多要学的,继续学习吧!

 

posted @ 2017-03-10 18:20  丶枫  阅读(181)  评论(0编辑  收藏  举报