zoukankan      html  css  js  c++  java
  • 四则运算终极版

    程序设计思想:

      首先,由于之前的四则运算已经基本上把需要实现的功能都实现了,所以这次任务的重心在于怎么把一个Java程序变成网页版的。

    第一步我的想到需要哪几个网页,每个网页都实现什么功能。那么,主页是必不可少的,用户需要在主页上选择一些出题的基本参数,比如说自然数的范围、

    除法有无余数,减法有无负数等,当用于选择好之后,由后台开始出题,于另一个页面显示后台出的题目,用户于此页面进行答题,做完之后,

    提交到另一个页面,对用户输入的答案与出题同时写进数据库的答案进行比较,同时告诉用户做对的题目是哪些,做错的题目是哪些。

      以上是这个在线答题系统的整体框架,接下来就是对上述描述进行实现,代码如下:

    首先是主页的代码: 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>index</title>
    <link href="css/css01.css" rel="stylesheet" type="text/css"/>
    <script language="javascript">
    function istrue(form1){
    text1=form1.text1.value;
    text2=form1.text2.value;
    if(text1.length==0) 
    {
    alert("题目数量不能为空!");
    form1.text1.focus();
    return false;
    }
    if(text2.length==0) 
    {
    alert("自然数范围不能为空!");
    form1.text2.focus();
    return false;
    }
    }
    </script>
    </head>
    
    <body>
    <h2>Online答题系统</h2>
    <div id="index" >
    <form action="jsp01.jsp" name="form1" id="form1" method="post" onsubmit="return istrue(form1)">
    <table>
    <tr>
    <td>
    <label for="text1">请输入题目的数量:</label></td><td>
    <input type="text" name="text1" id="text1" value="10" />
    </td>
    </tr>
    <tr>
    <td>
    <label for="text2">请输入自然数的范围:</label></td><td>
    <input type="text" name="text2" id="text2" value="10"/>
    </td>
    </tr>
    <tr>
    <td>
    <label for="text3">请输入真分数的范围:</label></td><td>
    <input type="text" name="text3" id="text3" value="10"/>
    </td>
    </tr>
    <tr>
    <td>
    <label for="text4">请输入真分数分母的范围:</label></td><td>
    <input type="text" name="text4" id="text4" value="10" />
    </td>
    </tr>
    <tr>
    <td>
    <label id="label1">请选择是否需要乘除法?</label></td><td>
    <input type="radio" name="radio1" checked="checked" id="radio1" value="y" />
    <label for="radio1">是</label>
    <input type="radio" name="radio1" id="radio1" value="n" />
    <label for="radio1">否</label>
    </td>
    </tr>
    <tr>
    <td>
    <label id="label2">请选择是否需要括号?</label></td><td>
    <input type="radio" checked="checked" name="radio2" id="radio2" value="y" />
    <label for="radio2">是</label>
    <input type="radio" name="radio2" id="radio2" value="n" />
    <label for="radio2">否</label>
    </td>
    </tr>
    <tr>
    <td>
    <label id="label3">请选择是否需要负数?</label></td><td>
    <input type="radio" name="radio3" checked="checked" id="radio3" value="y" />
    <label for="radio3">是</label>
    <input type="radio" name="radio3" id="radio3" value="n" />
    <label for="radio3">否</label>
    </td>
    </tr>
    <tr>
    <td>
    <label id="label4">请选择是否需要余数?</label></td><td>
    <input type="radio" name="radio4" checked="checked" id="radio4" value="y" />
    <label for="radio4">是</label>
    <input type="radio" name="radio4" id="radio4" value="n" />
    <label for="radio4">否</label>
    </td>
    </tr>
    <tr>
    <td>
    <input type="submit" name="submit" id="submit" value="开始出题"/>
    </td>
    </tr>
    </table>
    </form>
    </div>
    </body>
    </html>
    

      

    接下来是答题页面的代码:

    <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*,java.util.*,javabean01.*,javax.sql.*,javax.naming.*" errorPage="" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- TemplateBeginEditable name="doctitle" -->
    <title>无标题文档</title>
    <!-- TemplateEndEditable -->
    <!-- TemplateBeginEditable name="head" -->
    <!-- TemplateEndEditable -->
    <link href="css/css01.css" rel="stylesheet" type="text/css"/>
    </head>
    
    <body>
    <%
    int number=Integer.parseInt(request.getParameter("text1"));
    int i; //用于循环
    Random ran=new Random();   //专门用于产生随机数
    int ranNumber;//存随机产生的数
    //建一个Ways类的对象,用于方法的调用
    Ways ways=new Ways();
    
    //用于存储用户的选择
    char choice[]=new char[4];
    choice[0]=request.getParameter("radio1").charAt(0);
    choice[1]=request.getParameter("radio2").charAt(0);
    choice[2]=request.getParameter("radio3").charAt(0);
    choice[3]=request.getParameter("radio4").charAt(0);
    
    int range1=Integer.parseInt(request.getParameter("text2"));
    int range2=Integer.parseInt(request.getParameter("text3"));
    int range3=Integer.parseInt(request.getParameter("text4"));%>
    <form name=form2 action="jsp02.jsp" method=post>
    
    <%
    //清空数据库中原来的东西
    
    Connection conn=null;
    Statement stmt=null;
    try{
    Context ctx=new InitialContext();
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/calculation");
    conn=ds.getConnection();
    stmt=conn.createStatement();
    String sql="truncate table biaodashi";
    stmt.execute(sql);
    sql="truncate table anwsy";
    stmt.execute(sql);
    }
    catch(SQLException se){
        se.printStackTrace();
    }
    finally{
        if(stmt!=null){
            try{
                stmt.close();
            }
            catch(SQLException se)
            {
                se.printStackTrace();
            }
            stmt=null;
        }
        if(conn!=null){
            try
            {
                conn.close();
            }
            catch(SQLException se)
            {
                se.printStackTrace();
            }
            conn=null;
        }
    }
    for(i=1;i<=number;i++){
        //开始出题
        int ran1=ran.nextInt(8)+1;
        switch(ran1){
        case 1:
            String result1=ways.addInt(range1);
            if(result1!=null){
            out.println(result1);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        case 2:
            String result2=ways.mimusInt(range1, choice[2]);
            if(result2!=null){
            out.println(result2);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        case 3:
            String result3=ways.multiplyInt(range1, choice[0]);
            if(result3!=null){
                out.println(result3);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        case 4:
            String result4=ways.divideInt(range1, choice[0],choice[3]);
            if(result4!=null){
                out.println(result4); %><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        case 5:
            String result5=ways.add(range1);
                if(result5!=null){
                out.println(result5);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
                }
                else i--;
            break;
        case 6:
            String result6=ways.minus(range1,choice[2]);
            if(result6!=null){
                out.println(result6);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        case 7:
            String result7=ways.multiply(range1,choice[0]);
            if(result7!=null){
                out.println(result7);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        case 8:
            String result8=ways.divide(range1,choice[0]);
            if(result8!=null){
                out.println(result8);%><input type="text" class=daan name="text<%=i%>"></input><br/><%
            }
            else i--;
            break;
        }
    }
    
    %>
    <input type="hidden" name="number" value="<%=number%>"></input>
    <input type="submit" value="提交答案"></input>
    </form>
    </body>
    </html>
    

      

    最后是判断结果页面的代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.sql.*,javax.sql.*,javax.naming.*"%>
        
    <!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>
    <link href="css/css01.css" rel="stylesheet" type="text/css"/>
    </head>
    <body>
    <%
        int number=Integer.parseInt(request.getParameter("number"));//获取题目的数量
        String tjdaan[]=new String[number];
        for(int i=1;i<=number;i++)
        {
            tjdaan[i-1]=request.getParameter("text"+i);
        }
        
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        
        try
        {
        Context ctx=new InitialContext();
        DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/calculation");
        conn=ds.getConnection();
        stmt=conn.createStatement();
        String sql="select daan from anwsy";
        rs=stmt.executeQuery(sql);
        String daan[]=new String [number];
        int i=0;
        while(rs.next())
        {
            daan[i]=new String(rs.getString(1));
            i++;
        }
        
        //用来存正确或错误题目的编号
        int right[]=new int[number];
        int rightnumber=0;
        int error[]=new int[number];
        int errornumber=0;
        
        for(int j=0;j<number;j++)
        {
            if(daan[j].equals(tjdaan[j]))
            {
                right[rightnumber]=j+1;
                rightnumber++;
            }
            else
            {
                error[errornumber]=j+1;
                errornumber++;
            }
        }
        
        //把做题的情况输出去
        out.print("做对的题目有:");
        for(int j=0;j<rightnumber;j++)
        {
            if(j==rightnumber-1)
                out.println(right[j]);
            else
                out.print(right[j]+" 、 ");
        }
        %><br/><%
        out.print("做错的题目有:");
        for(int j=0;j<errornumber;j++)
        {
            if(j==errornumber-1)
                out.println(error[j]);
            else
                out.print(error[j]+" 、 ");
        }
        }
        catch(SQLException se)
        {
            se.printStackTrace();
        }
        finally
        {
            if(rs!=null)
            {
                try{
                    rs.close();
                }
                catch(SQLException se)
                {
                    se.printStackTrace();
                }
                rs=null;
            }
            if(stmt!=null)
            {
                try{
                    stmt.close();
                }
                catch(SQLException se)
                {
                    se.printStackTrace();
                }
                stmt=null;
            }
            if(conn!=null)
            {
                try{
                    conn.close();
                }
                catch(SQLException se)
                {
                    se.printStackTrace();
                }
                conn=null;
            }
        }
    %>
    </body>
    </html>
    

      

    以上部分是前端的实现,接下来的代码是以前实现的功能代码(也就是后台程序):

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.sql.*,javax.sql.*,javax.naming.*"%>
        
    <!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>
    <link href="css/css01.css" rel="stylesheet" type="text/css"/>
    </head>
    <body>
    <%
        int number=Integer.parseInt(request.getParameter("number"));//获取题目的数量
        String tjdaan[]=new String[number];
        for(int i=1;i<=number;i++)
        {
            tjdaan[i-1]=request.getParameter("text"+i);
        }
        
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        
        try
        {
        Context ctx=new InitialContext();
        DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/calculation");
        conn=ds.getConnection();
        stmt=conn.createStatement();
        String sql="select daan from anwsy";
        rs=stmt.executeQuery(sql);
        String daan[]=new String [number];
        int i=0;
        while(rs.next())
        {
            daan[i]=new String(rs.getString(1));
            i++;
        }
        
        //用来存正确或错误题目的编号
        int right[]=new int[number];
        int rightnumber=0;
        int error[]=new int[number];
        int errornumber=0;
        
        for(int j=0;j<number;j++)
        {
            if(daan[j].equals(tjdaan[j]))
            {
                right[rightnumber]=j+1;
                rightnumber++;
            }
            else
            {
                error[errornumber]=j+1;
                errornumber++;
            }
        }
        
        //把做题的情况输出去
        out.print("做对的题目有:");
        for(int j=0;j<rightnumber;j++)
        {
            if(j==rightnumber-1)
                out.println(right[j]);
            else
                out.print(right[j]+" 、 ");
        }
        %><br/><%
        out.print("做错的题目有:");
        for(int j=0;j<errornumber;j++)
        {
            if(j==errornumber-1)
                out.println(error[j]);
            else
                out.print(error[j]+" 、 ");
        }
        }
        catch(SQLException se)
        {
            se.printStackTrace();
        }
        finally
        {
            if(rs!=null)
            {
                try{
                    rs.close();
                }
                catch(SQLException se)
                {
                    se.printStackTrace();
                }
                rs=null;
            }
            if(stmt!=null)
            {
                try{
                    stmt.close();
                }
                catch(SQLException se)
                {
                    se.printStackTrace();
                }
                stmt=null;
            }
            if(conn!=null)
            {
                try{
                    conn.close();
                }
                catch(SQLException se)
                {
                    se.printStackTrace();
                }
                conn=null;
            }
        }
    %>
    </body>
    </html>
    

      

    运行结果截图:

    (主页部分)

    (答题部分)

    (判断结果部分)

    (数据库的表结构)

    编程体会与总结:

      每一次的任务都能让人学到很多东西,现在我开始认识到,任务的结果对我们来说可能不是最重要的,最重要的应该是做任务的这个过程,

    每一个挫折都代表着一次成长,可能说的有点夸张了,但是从每个挫折中,我们都能学到一些意料之外的东西。由于是在解决实际问题中学到的东西,

    所有才能记得更加深刻,被动学习与主动学习是截然不同的。

      在这次实验中,我感觉自己对于数据库的了解又加深了很多,并且学会了JDBC数据源与连接池的使用方法,懂得了如何运用css+div对页面进行

    精美的设计。当然对于运用后台解决问题的逻辑思路更加的清晰了。

      以上就是通过这次实验我所学到的东西。

  • 相关阅读:
    form标签
    roadmap
    自我介绍
    3 week work—Grid Layout
    3 week work—Position
    2nd week
    objects
    个人简介
    7th week :DOM BOM
    颜色表示法
  • 原文地址:https://www.cnblogs.com/xulei11-/p/6679538.html
Copyright © 2011-2022 走看看