四则运算*4

结对队友:胡康臻,杨寒寒

1、设计思想:先编写javabean,在javabean中实现四则运算,并把生成的表达式和答案写入数据库;接下来写四则运算用户选择界面,针对用户的选择,编写处理界面,表达式输出界面,核对答案界面

2、源代码:

  四则运算javabean:

package 四则运算4;
import java.sql.*;
public class T {
    //只有整数运算
    public void zhengshu(int num,int num_max) throws Exception
    {
        System.out.println("整数四则运算:");
        String biaodashi;
        String result = null;
        //清空数据表
        Connection conn=null;
        try{
            //连接驱动
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("成功加载Mysql驱动");
            //数据库操作
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
            Statement stmt = conn.createStatement();
            //清空数据表
            String sql;
            sql="truncate table zhengshu";
            stmt.execute(sql);
        }
        catch(SQLException e1)
        {
            System.out.println("Mysql操作错误");
            e1.printStackTrace();
        }
        catch(Exception e1)
        {
            e1.printStackTrace();
        }
         
        for(int i  = 0;i<num;i++){
            //获得两个数
            int x =1+ (int)(Math.random()*num_max);
            int y = 1+(int)(Math.random()*num_max);
             
            //随机获得符号
            int fuhao = 1+(int)(Math.random()*4);
            //加法运算
            if(fuhao == 1)
            {
                biaodashi = x+ " + " +y;
                result = String.valueOf(x+y);
            }
            //减法运算并检验结果无负数
            else if(fuhao == 2)
            {
                if(x<y)
                    {
                    biaodashi = y+ " - " +x;
                    result = String.valueOf(y-x);
                    }
                else
                    {
                    biaodashi = x+ "-" +y;
                    result = String.valueOf(x-y);
                    }
                 
            }
             
            //乘法运算
            else if(fuhao ==3)
                {
                biaodashi = x+ " * " +y;
                result = String.valueOf(x*y);
                }
            //除法运算并判断结果有无余数
            else
            {
                while(y==0)
                {
                    y = 1+(int)(Math.random()*10);
                }
                biaodashi = x+ " / " +y;
                result = fenshu_print(x,y);
                System.out.println(result);
            }//else结束
            conn = null;
            try{
                //连接驱动
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("成功加载Mysql驱动");
                //数据库操作
                conn = null;
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
                Statement stmt = conn.createStatement();
                String sql;
                sql = "insert into zhengshu(biaodashi,answer) values('"+biaodashi+"','"+result+"')";
                stmt.executeUpdate(sql);
            }
            catch(SQLException e)
            {
                System.out.println("Mysql操作错误");
                e.printStackTrace();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            finally{
                conn.close();
            }
        }
 
    }
    //分数化简
    public static int huajian(int a,int b)
    {
        int m = a;
        if(m<b)
            m = b;
        int i = 0;
        for(i=m;i>1;i--)
        {
            if(a%i==0&&b%i==0)
                break;
        }
        return i;
    }
    //整数球结果
    public static int integer(int num1,int num2,int fuhao)
        {
            if(fuhao == 0)
                fuhao = num1 + num2;
            else if(fuhao == 1)
                if(num1 >num2)
                {
                    fuhao = num1 - num2;
                }
                else
                    fuhao = num2 - num1;
            else if(fuhao == 2)
                fuhao = num1 * num2;
            return fuhao;
        }
    //分数输出
    public static String fenshu_print(int x,int y)
    {
        String result = null;
        if(x>y&&x%y!=0)
        {
            result = x/y + "’" + (x/huajian(x,y))%(y/huajian(x,y)) + "/" + y/huajian(x,y);
        }
        else if(x<y)
        {
            result =  x/huajian(x,y) + "/" + y/huajian(x,y);
        }
        else if(x%y==0)
            result = String.valueOf(x/y);
        return result;
    }
    //分数运算
    public void fenshu(int num,int num_max) throws Exception
    {
        System.out.println("分数四则运算:");
        String biaodashi;
        String result = null;
        //清空数据表
                Connection conn=null;
                try{
                    //连接驱动
                    Class.forName("com.mysql.jdbc.Driver");
                    System.out.println("成功加载Mysql驱动");
                    //数据库操作
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
                    Statement stmt = conn.createStatement();
                    //清空数据表
                    String sql;
                    sql="truncate table fenshu";
                    stmt.execute(sql);
                }
                catch(SQLException e1)
                {
                    System.out.println("Mysql操作错误");
                    e1.printStackTrace();
                }
                catch(Exception e1)
                {
                    e1.printStackTrace();
                }
                 
        for(int i  = 0;i<num;i++){
            //获得两个数
            int a =1+ (int)(Math.random()*num_max);
            int b = 1+(int)(Math.random()*num_max);
            int c = 1+(int)(Math.random()*num_max);
            int d = 1+(int)(Math.random()*num_max);
            int fuhao = 1+(int)(Math.random()*4);
            String fu = null;
            if(fuhao ==1)
                fu = "+";
            else if(fuhao ==2)
                fu = "-";
            else if(fuhao==3)
                fu = "*";
            else
                fu = "/";
            biaodashi = a+"/"+b+" "+fu+" "+c+"/"+d;
            result = fenshu_result(a,b,c,d,fuhao);
            conn = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("成功加载Mysql驱动");
                //数据库操作
                conn = null;
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
                Statement stmt = conn.createStatement();
                String sql;
                sql = "insert into fenshu(biaodashi,answer) values('"+biaodashi+"','"+result+"')";
                stmt.execute(sql);
            }
            catch(SQLException e)
            {
                System.out.println("Mysql操作错误");
                e.printStackTrace();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            finally{
                conn.close();
            }
        }
 
         
    }
    //分数求结果
    public static String fenshu_result(int a,int b,int c,int d,int fuhao)
    {
        String result = null;
        if(fuhao == 1)
        {
            result = fenshu_print(a*d+b*c,b*d);
        }
        else if(fuhao == 2)
        {
            if(a*d-b*c>0)
                result = fenshu_print(a*d-b*c,b*d);
            else
                result = "-"+fenshu_print(a*d-b*c,b*d);
        }
        else if(fuhao == 3)
            result = fenshu_print(a*c,b*d);
        else
            result = fenshu_print(a*d,b*c);
        return result;
    }
    public void kuohao(int number,int num_max) throws Exception
    {
        //清空数据表
                Connection conn=null;
                try{
                    //连接驱动
                    Class.forName("com.mysql.jdbc.Driver");
                    System.out.println("成功加载Mysql驱动");
                    //数据库操作
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
                    Statement stmt = conn.createStatement();
                    //清空数据表
                    String sql;
                    sql="truncate table kuohao";
                    stmt.execute(sql);
                }
                catch(SQLException e1)
                {
                    System.out.println("Mysql操作错误");
                    e1.printStackTrace();
                }
                catch(Exception e1)
                {
                    e1.printStackTrace();
                }
                 
        for(int ti = 0;ti<number;ti++){
        int x=(int) (1+(Math.random()*num_max));
        int y=0;//符号随机
        int j;//寻找(
        int p;//确定)的位置
        int e=0;//确定表达式中是否有右括号
        int a = 10;
        String f = null ;
        String biaodashi = x+"";
        String result = null;
        int num = 8;
         
        for(int i = 0;i<5-1;i++){
             
            y = (int)(1+(Math.random()*num));
             
            if(y==1)
                f = "+";
            else if(y==2)
                f = "-";
            else if(y==3)
                f = "*";
            else if(y==4)
                f = "/";
            else if(y==5)
                f = "+(";
            else if(y==6)
                f = "-(";
            else if(y==7)
                f = "*(";
            else if(y==8)
                f = "/(";
             
            biaodashi = biaodashi+ f + x ;
            x=(int)(1+(Math.random()*num_max));
            //控制左括号
            if(y>4)
                {
                num = 4;
                a = i;
                }
            else if(4-i>0)
                num = 4;
            //控制右括号
            if(i-a>=1&&e==0)
                {
                p=(int)(1+(Math.random()*2));
                if(p==1)
                    biaodashi+="";
                else
                    {
                    biaodashi+=")";
                    e=1;
                    }
                }
             
             
        }
        for(int q = 0;q<biaodashi.length();q++){
            if(biaodashi.charAt(q)=='(')
                for(int w = q;w<biaodashi.length();w++)
                    if(biaodashi.charAt(w)==')')
                        break;
                    else
                        {
                        if(w==biaodashi.length()-1)
                            biaodashi+=")";
                        }
                             
            }
        result = String.valueOf(opt(biaodashi));
        conn=null;
        try{
            //连接驱动
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("成功加载Mysql驱动");
            //数据库操作
            conn = null;
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
            Statement stmt = conn.createStatement();
            String sql;
            sql = "insert into kuohao(biaodashi,answer) values('"+biaodashi+"','"+result+"')";
            stmt.execute(sql);
        }
        catch(SQLException e1)
        {
            System.out.println("Mysql操作错误");
            e1.printStackTrace();
        }
        catch(Exception e1)
        {
            e1.printStackTrace();
        }
        finally{
            conn.close();
        }
        }
             
    }
    public static float opt(String s) throws Exception{
        if(s == null || "".equals(s.trim())) {
            return 0f;
        }
        int a1=s.indexOf("+");
        int a2=s.indexOf("-");
        int a3=s.indexOf("*");
        int a4=s.indexOf("/");
        int a5=s.indexOf("(");
        if(a1==-1&&a2==-1&&a3==-1&&a4==-1){
            if(s.trim()==null||"".equals(s.trim())){
                throw new Exception("operate error");
            }
            return Float.parseFloat(s.trim());
        }
          
        if(a5!=-1){
        int a6=s.indexOf(")");
            if(a6==-1){
                throw new Exception("括号不匹配");
            }else{
                float f=opt(s.substring(a5+1,a6).trim());
                s=s.replace(s.substring(a5,a6+1), String.valueOf(f));
                return opt(s);
            }
        }
          
        if(a1!=-1){
            return opt(s.substring(0,a1))+opt(s.substring(a1+1,s.length()));
        }
        if(a2!=-1){
            return opt(s.substring(0,a2))-opt(s.substring(a2+1,s.length()));
        }
        if(a3!=-1){
            return opt(s.substring(0,a3))*opt(s.substring(a3+1,s.length()));
        }
        if(a4!=-1){
            return opt(s.substring(0,a4))/opt(s.substring(a4+1,s.length()));
        }
        return Integer.parseInt(s.trim());
    }
    private int num;
    private int max;
    private int if_fenshu;
    private int if_kuohao;
}

用户选择界面:

<!-- js验证输入是否正确 -->


<!DOCTYPE html>
<html>
<head>
<script language = "JavaScript">
    function fun(form)
    {
        max = form.max.value;
        num = form.num.value;
        if(num.length==0)
            {
            alert("请输入题的数量");
            form.num.focus();
            return false;
            }
        else if(max.length==0)
            {
            alert("请输入数值范围");
            form.max.focus();
            return false;
            }
    }
    
</script>
<meta charset="UTF-8">
<title>请选择题型</title>
</head>
<body>
<h2 align = "center">请做选择</h2>
<form name = "form1" action = "confirm.jsp" method = "post" name = "mychose"
onsubmit = " return fun(form1)">
<table align = "center">
    <tr>
        <td>题数:</td>
        <td><input type ="text" name = "num" value = ""></td>
    </tr>
    
    <tr>
        <td>数值范围:</td>
        <td><input type = "text" name = "max" value = ""></td>
    </tr>
    
    <tr>
        <td>是否有分数:</td>
        <td><input type = "radio" name = "checked_fenshu"
         value = "1" checked>有分数</td>
         <td><input type = "radio" 
         name = "checked_fenshu" 
         value = "2">没有分数</td>
    </tr>
    
    <tr>
        <td>是否有括号:</td>
        <td><input type = "radio" name = "checked_kuohao"
         value = "1" checked>有括号</td>
         <td><input type = "radio" name = "checked_kuohao" 
         value = "2">没有括号</td>
    </tr>
    <tr>
        <td> <input type="reset" value="重置"></td>
        <td> <input type="submit"  value="开始做题" ></td>
    </tr>   
</table>    
</form>
</body>
</html>

处理界面:

<%@ page language="java" import = "java.sql.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
   <%@ page import = "四则运算4.T" %>
<!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>确认信息 </title>
</head>
<body>

<%
    request.setCharacterEncoding("utf-8");
    int num = Integer.parseInt(request.getParameter("num"));
    int num_max = Integer.parseInt(request.getParameter("max"));
    int checked_fenshu = Integer.parseInt(request.getParameter("checked_fenshu"));
    int checked_kuohao = Integer.parseInt(request.getParameter("checked_kuohao"));
    out.println(num+" "+num_max+" "+checked_fenshu+" "+checked_kuohao);
    T t = new T();
    if(checked_fenshu==2&&checked_kuohao==2)
        t.zhengshu(num, num_max);
    else if(checked_fenshu==1&&checked_kuohao==2)
    {
        t.zhengshu(num/2, num_max);
        t.fenshu(num-num/2, num_max);
    }
    else if(checked_fenshu==2&&checked_kuohao==1)
    {
        t.zhengshu(num/2, num_max);
        t.kuohao(num-num/2, num_max);
    }
    else
    {
        t.zhengshu(num/3, num_max);
        t.fenshu(num/3, num_max);
        t.kuohao(num-num/3*2, num_max);
    }
%>
<jsp:forward page = "print.jsp"></jsp:forward>
</body>
</html>

表达式输出界面:

<%@ page language="java" import = "java.sql.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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>请开始做题</title>
</head>
<style type="text/css">
.text1{100px; height:20px}
</style><style type="text/css">
.text1{100px; height:20px}
</style>
<body><form action = "check.jsp">
    <table align = "center"  >
    <tr><td>表达式</td><td >答案</td>
        <%
        Connection conn=null;
        try{
            //连接驱动
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("成功加载Mysql驱动");
            //数据库操作
            conn = null;
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
            Statement stmt = conn.createStatement();
            String sql;
            sql = "select biaodashi from zhengshu";
            ResultSet rs=stmt.executeQuery(sql); //执行查询语句
            //从结果集中读取各字段并输出
            int i = 0;
            while(rs.next())
            {i++;
            out.println("<tr><td>"+rs.getString(1));
            %>
            <td><input type = "text" name = "text<%=i%>" class = "text1"></td>
            <% 
            }
            sql = "select biaodashi from fenshu";
            rs=stmt.executeQuery(sql); //执行查询语句
            //从结果集中读取各字段并输出
            while(rs.next())
            {i++;
            out.println("<tr><td>"+rs.getString(1));
            %>
            <td><input type = "text" name = "text<%=i%>" class = "text1"></td>
            <% 
            }
            sql = "select biaodashi from kuohao";
            rs=stmt.executeQuery(sql); //执行查询语句
            //从结果集中读取各字段并输出
            while(rs.next())
            {
            out.println("<tr><td>"+rs.getString(1));
            %>
            <td><input type = "text" name = "text<%=i%>" class = "text1"></td>
            <% 
            }
        }
        catch(SQLException e1)
        {
            System.out.println("Mysql操作错误");
            e1.printStackTrace();
        }
        catch(Exception e1)
        {
            e1.printStackTrace();
        }
        finally{
            conn.close();
        }
        %>    
        <tr><td><input type = "reset" value = "重置" ></td>
        <td><input type = "submit" value = "提交"</td></tr>
    </table>
</body>
</html>

答案处理界面

<%@ page language="java" import = "java.sql.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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>
</head>
<body>
<%
out.println(request.getParameter("text"+1));
Connection conn=null;
try{
    //连接驱动
    Class.forName("com.mysql.jdbc.Driver");
    System.out.println("成功加载Mysql驱动");
    //数据库操作
    conn = null;
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mldn","root","hanhan");
    Statement stmt = conn.createStatement();
    String sql;
    int zhengshu_num=0,fenshu_num = 0,kuohao_num = 0;
    String int_an[] = new String[100];
    String fen_an[] = new String[100];
    String kuo_an[] = new String[100];
     
   //查询整数的个数
    sql = "select answer from zhengshu";
    ResultSet rs=stmt.executeQuery(sql);
      
    while(rs.next())
    {
        zhengshu_num++;
        int_an[zhengshu_num] = rs.getString(1);
          
    }
    out.println(zhengshu_num);
    //查询分数的个数
    sql = "select answer from fenshu";
    rs=stmt.executeQuery(sql);
      
    while(rs.next())
    {
        fenshu_num++;
        fen_an[fenshu_num] = rs.getString(1);
          
    }
    //查询括号的个数
    sql = "select answer from kuohao";
    rs=stmt.executeQuery(sql);
      
    while(rs.next())
    {
        kuohao_num++;
        kuo_an[kuohao_num] = rs.getString(1);
          
    }
     
    int dui[] = new int[zhengshu_num+fenshu_num+kuohao_num];
    int cuo[] = new int[zhengshu_num+fenshu_num+kuohao_num];
    int dui_num = 0;
    int cuo_num = 0;
    String daan[] = new String[100];
    for(int i = 1;i<=zhengshu_num;i++)
    {
        daan[i] = request.getParameter("text"+i);
        out.println(daan[i]);
        if(int_an[i].equals(daan[i]))
        {
            dui[dui_num] = i;
            dui_num++;
        }
        else
        {
            cuo[cuo_num] = i;
            cuo_num++;
        }
    }
     
    for(int i = 1;i<=fenshu_num;i++)
    {
        daan[i] = request.getParameter("text"+i+zhengshu_num);
        if(fen_an[i].equals(daan[i]))
        {
            dui[dui_num] = i+zhengshu_num;
            dui_num++;
        }
        else
        {
            cuo[cuo_num] = i+zhengshu_num;
            cuo_num++;
        }
    }
     
    for(int i = 1;i<=kuohao_num;i++)
    {
        daan[i] = request.getParameter("text"+i+zhengshu_num+fenshu_num);
        if(kuo_an[i].equals(daan[i]))
        {
            dui[dui_num] = i+zhengshu_num+fenshu_num;
            dui_num++;
        }
        else
        {
            cuo[cuo_num] = i+zhengshu_num+fenshu_num;
            cuo_num++;
        }
    }
 %><br><%
    out.println("做错的题目有:");
    for(int i = 0;i<cuo_num;i++)
    {
        if(i==cuo_num-1)
            out.println(cuo[i]);
        else
            out.println(cuo[i]+",");
    }
    out.println("做对的题目有:");
    for(int i = 0;i<dui_num;i++)
    {
        if(i==dui_num-1)
        {
            out.println(dui[i]);
             
        }
        else
            out.println(dui[i]+",");
    }
    }
catch(Exception e)
{
    e.printStackTrace();
}
%>
</body>
</html>

程序结果截图

原文地址:https://www.cnblogs.com/clueless/p/7025704.html