四则运算终极版

程序设计思想:

  首先,由于之前的四则运算已经基本上把需要实现的功能都实现了,所以这次任务的重心在于怎么把一个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对页面进行

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

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

原文地址:https://www.cnblogs.com/xulei11-/p/6679538.html