• 软件工程结对作业01


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

    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>
    

      程序结果截图

  • 相关阅读:
    SpringBoot-启动原理解析及源码阅读-todo
    SpringBoot-入门简介和优缺点分析
    《机器学习》笔记 第2章——模型评估与选择: 经验误差与过拟合、评估方法、性能度量、比较检验方法、偏差与方差
    《机器学习》笔记 第1章——绪论 : 基本术语/假设空间的基础概念
    【JS 01】 JS中的JSON.stringify后的json字符串后怎么转为Java中String.class可以直接接受的转义json字符串?
    【Java多线程07】 并发安全读取Shell脚本/命令的输出的INFO流和ERR流
    时序预测 03
    时序预测 02
    时序预测 01
    【搬运链接】美团技术团队
  • 原文地址:https://www.cnblogs.com/shouhutian/p/6678757.html
Copyright © 2020-2023  润新知