软件工程结对作业01--四则运算Web版

一.设计思想:

  首先,写出一个菜单界面,有两个选项一个是分数,一个是整数。而这两个标签后面则是转向其更详细的菜单,题目数量,有无括号,运算的项数等等详细功能,再点击这两个按钮之后,就会跳转过去。当选择整数运算时,显示出需要的菜单,输入完要求之后,跳转到生成算式的JSP文件,在此文件中首先是用request方法来获取上个页面中你所需要的功能,然后再强制类型转化来为下面使用,通过随机数生成,分别生成参与运算的数和符号,0代表加法1代表减法3代表乘法4代表除法。选择有负数和有余数式子生成,选择没有负数或者没有余数的情况下,就需要将随机的数进行运算,符合条件flag=1,不符合条件的flag=0。定义一个数来表示他的结果,在每个运算符号的if语句中,将结果运算出来,在整个式子都通过前面的用户需求时,将运算数和符号连成一个字符串,然后再进行查重,如果没有重复则flag1=1,如果有重复flag1=0。当全部满足条件时,在页面中显示出来,并且在式子右侧写一个文本框用来填写结果。然后设置一个统计按钮,填完结果之后,统计的答题情况,我是用session方法来保存式子数组和答案数组的。然后跳转到核对界面进行核对,如果对了提示回答正确,count++,如果错误提示错误。上面是两个数的运算,多个数的运算则是用的先生成两个数的运算,然后在随机是否生成括号,如果生成然后在随机括号的位置是在这一组上的前面加括号,还是后面加括号。上面就是整数部分的运算。分数部分的运算和整数部分差不多,首先随机生成四个数两个构成一个分数,然后再定义个随机数来表示运算符。然后,分子分母进行比较,是否是真分数。如果不是此次循环结束,i--重新开始。需要满足的条件基本上和整数差不多,不过需要在jsp中写一个求最大公约数的方法,来进行化简,在运算的时候先运算然后进行化简。最后数字和符号组成字符串,结果字符串。通过session方法进行保存。跳到核对界面进行核对。多个分数运算有无括号和整数的原理也一致。最后来说说数据库,在jsp中连接数据库的话和在.java文件中连接有所不同,在加载驱动时,加载驱动语句右面要加.Instance();才能加载成功。然后在情况下,所满足条件的生成式子。通过SQL增加语句进行写入数据库。

二.程序源代码:

  开始界面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>菜单页面</title>

</head>
<body >
	<div align="center">
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<br/>
	<a href="zs.jsp"  >●整数运算</a>
	<br/>
	<br/>
	<a href="fens.jsp">⊙分数运算</a>
	</div>
</body>
</html>

   整数菜单:

  

<%@ page language="java" 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>
<body>
	<form name="form1" method=post action="index.jsp">
	<center> 整数四则运算</center>
	<table align="center">
	<tr>
	<td>请输入需要生成的题目数量</td>
	<td><input name="shuliang" id="shuliang" type="text" > </td>
	</tr>
	<tr>
	<td>
		 请输入最小值
	</td>
		<td>
		<input name="zuixiao" id="zuixiao" type="text">
		</td>
	</tr>
	 <tr>
	 <td>请输入最大值</td>
	 <td> <input name="zuida" id="zuida" type="text"> </td>
	 </tr>
	 <tr>
	 <td> 请选择是否需要括号1有2没有</td>
	 <td> <input name="kuohao" id="kuohao" type="text"> </td>
	 </tr>
	 <tr>
	  <td>请选择生成算式的位数1两位数2多位数</td>
	  <td><input name="weishu" id="weishu" type="text"> </td>
	 </tr>
	 <tr>
	  <td>加减有无负数</td>
	  <td><input name="fs" id="fs" type="text"> </td>
	  </tr>
	  <tr>
	  <td> 除法有无余数</td>
	  <td><input name="ys" id="ys"type="text"></td>
	  </tr>
	</table>
		<center><input type="submit" value="开始出题"> </center>
	</form>
</body>
</html>

  整数试题和填写

  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.Connection,java.sql.DriverManager,java.sql.ResultSet"%>
<!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>
<%
	String driverStr = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	Class.forName(driverStr).newInstance();
	String connStr = "jdbc:sqlserver://localhost:1433; DatabaseName=Webys";
	String dbusername = "sa";
	String dbpassword = "123456";
	Connection conn=null;
	java.sql.Statement stmt=null;

	conn=DriverManager.getConnection(connStr, dbusername, dbpassword);
	stmt=conn.createStatement();
	String weishu=request.getParameter("weishu");
	String kuohao=request.getParameter("kuohao");
	String zuix=request.getParameter("zuixiao");
	String zuid=request.getParameter("zuida");
	String fss=request.getParameter("fs");
	String yss=request.getParameter("ys");
	if(Integer.parseInt(weishu)==1)
	{
		int ans=0;
		String j=request.getParameter("shuliang");
		int sl=Integer.valueOf(j);
		int litt=Integer.valueOf(zuix);
		int bi=Integer.valueOf(zuid);
		String []ss=new String[sl];
		String s="";
		String daan[] =new String [sl];
		String ans2[]=new String[sl];
		int a[]=new int [sl];
		int b[]=new int [sl];
		int flag=0;
		int flag1=0;
		int c[]=new int [sl];
		int d[]=new int[sl];
		int e[]=new int[sl];
		int fs=Integer.valueOf(fss);
		int ys=Integer.valueOf(yss);
		for(int i=0;i<sl;i++)
		{
			daan[i]="name"+i;
			flag1=0;
			a[i]=(int)(Math.random()*(bi-litt)+1+litt);
			b[i]=(int)(Math.random()*(bi-litt)+1+litt);
		 	c[i]=(int)(Math.floor((Math.random()*4)));
			if(fs==1)
			{
				flag=0;
			}
			if(fs==2)
			{
			   if(c[i]==1)
			   {
					if((a[i]-b[i])>=0)
					{
						flag=0;
					}
					else
					{
						flag=1;
					}
			   }
			}

			if(c[i]==0)
			{
				s=" + ";
				ans=a[i]+b[i];
			}
			if(c[i]==1)
			{
				s=" - ";
				ans=a[i]-b[i];
			}
			if(c[i]==2)
			{
				s=" * ";
				ans=a[i]*b[i];
			}
			if(c[i]==3)
			{

				if(b[i]!=0)
				{
					if(ys==1)
					{
						s=" ÷ ";
						ans=a[i]/b[i];
					}
					if(ys==2)
					{
						if((a[i]%b[i])==0)
						{
							s=" ÷ ";
							ans=a[i]/b[i];
						}
						else
						{
							flag=1;
						}
					}
				}
				else
					flag=1;
			}
			ss[i]=a[i]+s+b[i];
			for(int i1=0;i1<i;i1++)   //查重
			{
				if((a[i1]==a[i])&&(b[i1]==b[i])&&(c[i1]==c[i]))
					flag1=1;
				if((a[i1]==b[i])&&(b[i1]==a[i])&&(c[i1]==0)&&(c[i]==0))
					flag1=1;

				if((a[i1]==b[i])&&(b[i1]==a[i])&&(c[i1]==2)&&(c[i]==2))
					flag1=1;
			}
			if((flag==0)&&(flag1==0))  //输出
			{
				String sql="INSERT INTO size VALUES (‘"+ss[i]+"‘,‘"+ans+"‘)";
				stmt.executeUpdate(sql);
				ans2[i]=""+ans;
				out.print(ss[i]); 

				%>
				<br>
				<form name="form2" method="post" action="zscheck2.jsp">
				 请输入答案<input name=<%=daan[i] %> type="text" id="daan">
				 <br/>				 

						<%
		  	}
			else
			{
				i--;
			}

		}

		session.setAttribute("v1", ss);
		session.setAttribute("v2", ans2);
		%>
	<input type="submit" value="统计结果"> </form>
	<%
	}
		 if(Integer.parseInt(weishu)==2)
		 {
			 String j=request.getParameter("shuliang");
				int sl=Integer.valueOf(j);
				int litt=Integer.valueOf(zuix);
				int bi=Integer.valueOf(zuid);
				String []ss=new String[sl];
				String s="";
				String daan[] =new String [sl];
				int a[]=new int [sl];
				int b[]=new int [sl];
				int flag=0;
				int flag1=0;
				String [] ans2=new String[sl];
				int ans=0;
				int c[]=new int [sl];
				int d[]=new int[sl];
				int e[]=new int[sl];
				int fs=Integer.valueOf(fss);
				int ys=Integer.valueOf(yss);
				int y=0;
				int y1=0;
				int y2=0;
				String j1=request.getParameter("kuohao");
				int y3=Integer.valueOf(j1);
				for(int i=0;i<sl;i++)
				{
					daan[i]="name"+i;
					int c1 []=new int [20000];
					flag1=0;
					y=(int )(Math.random()*4+3);//生成数的个数
					y1=(int )(Math.random()*2);//有无括号
					y2=(int )(Math.random()*2);//前后
					a[i]=(int)(Math.random()*(bi-litt)+1+litt);
					b[i]=(int)(Math.random()*(bi-litt)+1+litt);
				 	c[i]=(int)(Math.floor((Math.random()*4)));
					if(fs==1)
					{
						flag=0;
					}
					if(fs==2)// 没有负数
					{
					   if(c[i]==1)
					   {
							if((a[i]-b[i])>=0)
							{
								flag=0;
							}
							else
							{
								flag=1;
							}
					   }
					}

					if(c[i]==0)
					{
						s=" + ";
						ans=a[i]+b[i];
					}
					if(c[i]==1)
					{
						s=" - ";
						ans=a[i]-b[i];
					}
					if(c[i]==2)
					{
						s=" * ";
						ans=a[i]*b[i];
					}
					if(c[i]==3)
					{

						if(b[i]!=0)
						{
							if(ys==1)
							{
								s=" ÷ ";
								ans=a[i]/b[i];
							}
							if(ys==2)
							{
								if((a[i]%b[i])==0)
								{
									s=" ÷ ";
									ans=a[i]/b[i];
								}
								else
									flag=1;
							}
						}
						else
							flag=1;
					}
					ss[i]=a[i]+s+b[i];

					if(y3==1)//有括号生成
					{
						for(int  r=0;r<(y-2);r++)
						{
							y1=(int )(Math.random()*2);//有无括号
							y2=(int )(Math.random()*2);//前后
							d[r]=(int)(Math.random()*(bi-litt)+1+litt);
						 	c1[i]=(int )(Math.random()*4);

							if(c1[i]==0)
							{
								s=" + ";
								ans=ans+d[r];
							}
							if(c1[i]==1)
							{
								s=" - ";
								ans=ans-d[r];
							}
							if(c1[i]==2)
							{
								s=" * ";
								ans=ans*d[r];
							}
							if(c1[i]==3)
							{

								if(b[i]!=0)
								{
									if(ys==1)
									{
										s=" ÷ ";
										ans=ans/d[r];
									}
									if(ys==2)
									{
										if((a[i]%b[i])==0)
										{
											s=" ÷ ";
											ans=ans/d[r];
										}
										else
											flag=1;
									}
								}
								else
									flag=1;
							}
							if(y1==1) //随机数生成没有括号情况
							{
								if(y2==0) //加在后面
								{
									ss[i]=ss[i]+s+d[r];
								}
								if(y2==1)  //加在前面
								{
									ss[i]=d[r]+s+ss[i];

								}
							}
							if(y1==0) //随机数生成了括号
							{
								if(y2==0)  //加在后面
								{
									ss[i]="("+ss[i]+")"+s+d[r];

								}
								if(y2==1)  //括号加在前边
								{
									ss[i]=d[r]+s+"("+ss[i]+")";

								}
							}
							for(int i2=0;i2<i;i2++)
							{
								if(ss[i2]==ss[i])
									flag1=1;
								else
									flag1=0;
							}
						}
					}
					if(y3==2)
					{
						for(int  r=0;r<(y-2);r++)
						{
							y1=(int)(Math.random()*2);//有无括号
							y2=(int)(Math.random()*2);//前后
							d[r]=(int)(Math.random()*(bi-litt)+1+litt);
						 		c1[i]=(int)(Math.random()*4);

							if(c1[i]==0)
							{
								s=" + ";
								ans=ans+d[r];
							}
							if(c1[i]==1)
							{
								s=" - ";
								ans=ans-d[r];
							}
							if(c1[i]==2)
							{
								s=" * ";
								ans=ans*d[r];
							}
							if(c1[i]==3)
							{

								if(b[i]!=0)
								{
									if(ys==1)
									{
										s=" ÷ ";
										ans=ans/d[r];
									}
									if(ys==2)
									{
										if((a[i]%b[i])==0)
										{
											s=" ÷ ";
											ans=ans/d[r];
										}
										else
											flag=1;
									}
								}
								else
									flag=1;
							}
							if(y1==1) //没有括号
							{
								if(y2==0) //加在后面
								{
									ss[i]=ss[i]+s+d[r];

								}
								if(y2==1)
								{
									ss[i]=d[r]+s+ss[i];

								}
							}
							for(int i2=0;i2<i;i2++)
							{
								if(ss[i2]==ss[i])
									flag1=1;
								else
									flag1=0;
							}

					} //小for 循环

				}

					if((flag==0)&&(flag1==0))
					{
						String sql="INSERT INTO size VALUES (‘"+ss[i]+"‘,‘"+ans+"‘)";
						stmt.executeUpdate(sql);
						ans2[i]=""+ans;
						out.print(ss[i]+" "); %>
						<br>
					<form name="form2" method="post" action="zscheck2.jsp">
						 请输入答案<input name=<%=daan[i] %> type="text" id="daan">
				 	<br/>
						<% 

					}
					else
						i--;
			}
				session.setAttribute("v1", ss);
				session.setAttribute("v2", ans2);%>
				<input type="submit" value="统计结果"> </form>
				<% 

		  }
		  %>

</body>
</html>

  结果核查

  

<%@ page language="java" 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>
	<%
     String[] s1= (String[])session.getAttribute("v1");
     String[] answer= (String[])session.getAttribute("v2");
     String[] daan=new String[s1.length];
     int count=0;//正确答案的个数
     for(int i=0;i<s1.length;i++)
     {
        out.print("运算式为:");
         out.print(s1[i]+"  ");
        out.print("您的输入结果为:");
         daan[i]=request.getParameter("name"+i);
         out.print(daan[i]+"   ");
         out.print("正确结果为:");
         out.print(answer[i]);
        if(Integer.parseInt(daan[i])==Integer.parseInt(answer[i]))
         {
            out.print("恭喜你答对了!");
            count++;
         }
        else
         {
             out.print("很遗憾,你答错了!");
         }
         out.print("<br>");
     }
     out.print("你一共答对的题目数:");
     out.print(count);
 %>
</body>
</html>

  分数菜单:

  

<%@ page language="java" 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>
<body >
	<form name="form3" method=post action="fes.jsp">
	<center> 整数四则运算</center>
	<table align="center">
	<tr>
	<td>请输入需要生成的题目数量</td>
	<td><input name="shuliang" id="shuliang" type="text" > </td>
	</tr>
	 <tr>
	 <td>请输入分数的最大值</td>
	 <td> <input name="zuida" id="zuida" type="text"> </td>
	 </tr>
	 <tr>
	 <td> 请选择是否需要括号1有2没有</td>
	 <td> <input name="kuohao" id="kuohao" type="text"> </td>
	 </tr>
	 <tr>
	  <td>请选择生成算式的位数1两位数2多位数</td>
	  <td><input name="weishu" id="weishu" type="text"> </td>
	 </tr>
	 <tr>
	  <td>加减有无负数</td>
	  <td><input name="fs" id="fs" type="text"> </td>
	  </tr>
	  <tr>
	  <td> 除法有无余数</td>
	  <td><input name="ys" id="ys"type="text"></td>
	  </tr>
	</table>
		<center><input type="submit" value="开始出题"> </center>
	</form>
</body>
</html>

  分数出题:

  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.Connection,java.sql.DriverManager,java.sql.ResultSet"%>
<!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>
<%!
 	class gg
 	{
       int gongbei(int x,int y)
	 {
		 int z;
		 for(z=x;;z++)
		 {
			if(z%x==0&&z%y==0)
				break;
		 }
		 return z;
	 }
	   int gongyue(int x,int y)
	  {
		  int z;
		  for(z=x;z>0;z--)
		  {
			 if(x%z==0&&y%z==0)
			 	break;
		  }
		return z;
	  }
 	}
%>
<%
	String driverStr = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	Class.forName(driverStr).newInstance();
	String connStr = "jdbc:sqlserver://localhost:1433; DatabaseName=Webys";
	String dbusername = "sa";
	String dbpassword = "123456";
	Connection conn=null;
	java.sql.Statement stmt=null;

	conn=DriverManager.getConnection(connStr, dbusername, dbpassword);
	stmt=conn.createStatement();
	String weishu=request.getParameter("weishu");
	String kuohao=request.getParameter("kuohao");
	String zuid=request.getParameter("zuida");
	String fss=request.getParameter("fs");
	String yss=request.getParameter("ys");
	gg g=new gg();
	if(Integer.parseInt(weishu)==1)
	{
		int fenzi=0;
		int fenmu=0;
		int huajian=0;
		String j=request.getParameter("shuliang");
		int sl=Integer.valueOf(j);
		int bi=Integer.valueOf(zuid);
		String []ss=new String[sl];
		String daan[] =new String [sl];
		String jj[]=new String[sl];
		String s="";
		int ans=0;
		String ans1[]=new String[sl];
		int a[]=new int [sl];
		int a1[]=new int[sl];
		int b[]=new int [sl];
		int b1[]=new int[sl];
		int flag=0;
		int flag1=0;
		int flag2=0;
		int flag3=0;
		int c[]=new int [sl];
		int d[]=new int[sl];
		int d1[]=new int[sl];
		int e[]=new int[sl];
		int fs=Integer.valueOf(fss);
		int ys=Integer.valueOf(yss);
			for(int i=0;i<sl;i++)
			{
				daan[i]="name"+i;
				flag1=0;
				flag2=0;
				a[i]=(int)(Math.random()*(bi-1-1)+1);
				a1[i]=(int)(Math.random()*(bi-1)+1);
				b[i]=(int)(Math.random()*(bi-1-1)+1);
				b1[i]=(int)(Math.random()*(bi-1)+1);
				c[i]=(int)(Math.random()*4);
				if((a[i]>=a1[i])||(b[i]>=b1[i])) //判断是否为真分数
				{
					flag2=1;
				}
				else   //是真分数继续进行
				{
					flag2=0;
				}

				if(fs==1)  //有负数
				{
					flag=0;
				}
				if(fs==2)  //没有负数
				{
				   if(c[i]==1)
				   {
						if((a[i]*b1[i]-a1[i]*b[i])>=0)
						{
							flag=0;
						}
						else
						{
							flag=1;
						}
				   }
				}

				if(c[i]==0)
				{
					s=" + ";
					fenzi=(a[i]*b1[i])+(a1[i]*b[i]);
					fenmu=a1[i]*b1[i];
						huajian=g.gongyue(fenzi, fenmu);
						int o=fenzi/huajian;
						int p=fenmu/huajian;
						if(o<p)
						{
							jj[i]=o+"/"+p;
						}
						if((o>p)&&(o%p!=0))
						{
							int you=o/p;
							o=o-p*you;
							jj[i]=you+"|"+o+"/"+p;
						}
						if((o>p)&&(o%p==0))
						{
							int you=o/p;
							jj[i]=""+you;
						}

				}
				if(c[i]==1)
				{
					s=" - ";
					fenzi=(a[i]*b1[i])-(a1[i]*b[i]);
					fenmu=a1[i]*b1[i];
					if(fenzi>0)
					{
						huajian=g.gongyue(fenzi, fenmu);
						int o=fenzi/huajian;
						int p=fenmu/huajian;
						if(o<p)
						{
							jj[i]=o+"/"+p;
						}
						if((o>p)&&(o%p!=0))
						{
							int you=o%p;
							o=o-p*you;
							jj[i]=you+"|"+o+"/"+p;
						}
						if((o>p)&&(o%p==0))
						{
							int you=o%p;
							jj[i]=""+you;
						}
					}
					if(fenzi<0)
					{
						int t=0-fenzi;
						huajian=g.gongyue(t, fenmu);
						int o=fenzi/huajian;
						int p=fenmu/huajian;
						if(o<p)
						{
							jj[i]=o+"/"+p;
						}
						if((o>p)&&(o%p!=0))
						{
							int you=o/p;
							o=o-p*you;
							jj[i]=you+"|"+o+"/"+p;
						}
						if((o>p)&&(o%p==0))
						{
							int you=o/p;
							jj[i]=""+you;
						}
					}
					if(fenzi==0)
					{
						jj[i]=""+0;
					}
				}
				if(c[i]==2)
				{
					s=" * ";
					fenzi=a[i]*b[i];
					fenmu=a1[i]*b1[i];
					huajian=g.gongyue(fenzi, fenmu);
					int o=fenzi/huajian;
					int p=fenmu/huajian;
					if(o<p)
					{
						jj[i]=o+"/"+p;
					}
					if((o>p)&&(o%p!=0))
					{
						int you=o/p;
						o=o-p*you;
						jj[i]=you+"|"+o+"/"+p;
					}
					if((o>p)&&(o%p==0))
					{
						int you=o/p;
						jj[i]=""+you;
					}
				}
				if(c[i]==3)
				{

						if(ys==1)
						{
							s=" ÷ ";
							fenzi=a[i]*b1[i];
							fenmu=a1[i]*b[i];
							huajian=g.gongyue(fenzi,fenmu);
							int o=fenzi/huajian;
							int p=fenmu/huajian;

							if(o<p)
							{
								jj[i]=o+"/"+p;
							}
							if((o>p)&&(o%p!=0))
							{
								int you=o/p;
								o=o-p*you;
								jj[i]=you+"|"+o+"/"+p;
							}
							if((o>p)&&(o%p==0))
							{
								int you=o/p;
								jj[i]=""+you;
							}
						}
						if(ys==2)
						{
							if(((a[i]*b1[i])%(a1[i]*b[i]))==0)
							{
								s=" ÷ ";
								fenzi=a[i]*b1[i];
								fenmu=a1[i]*b[i];
								huajian=g.gongyue(fenzi,fenmu);
								int o=fenzi/huajian;
								int p=fenmu/huajian;
								if(o<p)
								{
									jj[i]=o+"/"+p;
								}
								if((o>p)&&(o%p!=0))
								{
									int you=o%p;
									o=o-p*you;
									jj[i]=you+"|"+o+"/"+p;
								}
								if((o>p)&&(o%p==0))
								{
									int you=o%p;
									jj[i]=you+"";
								}
							}
							else
							{
								flag=1;
							}
						}

				}
				int y=g.gongyue(a[i],a1[i]);
				int y1=g.gongyue(b[i],b1[i]);
				a[i]=a[i]/y;
				a1[i]=a1[i]/y;
				b[i]=b[i]/y1;
				b1[i]=b1[i]/y1;
				ss[i]=a[i]+"/"+a1[i]+s+b[i]+"/"+b1[i];
				for(int i1=0;i1<i;i1++)   //查重
				{
					if((a[i1]==a[i])&&(a1[i1]==a1[i])&&(b[i1]==b[i])&&(b1[i]==b1[i1])&&(c[i1]==c[i]))
						flag1=1;
					if((a[i1]==b[i])&&(b[i1]==a[i])&&(c[i1]==0)&&(c[i]==0)&&(a1[i1]==b1[i])&&(b1[i1]==a1[i]))
						flag1=1;

					if((a[i1]==b[i])&&(b[i1]==a[i])&&(c[i1]==2)&&(c[i]==2)&&(a1[i1]==b1[i])&&(b1[i1]==a1[i]))
						flag1=1;
				}
				if((flag==0)&&(flag1==0)&&(flag2==0))  //输出
				{

					String sql="INSERT INTO size VALUES (‘"+ss[i]+"‘,‘"+jj[i]+"‘)";
					stmt.executeUpdate(sql);
					ans1[i]=jj[i];
					out.print(ss[i]);

					%>
					<br>
					<form  name="form4" method="post" action="fscheck.jsp">
					 请输入答案<input name=<%=daan[i] %> type="text" id="daan">
					 <br/>
					<%
				}
				else
				{
					i--;
				}
			}
			session.setAttribute("v1", ss);
			session.setAttribute("v2", ans1);
			%>
		<input type="submit" value="统计结果"> </form>
		<%
	}
	if(Integer.parseInt(weishu)==2)
	{
		String j=request.getParameter("shuliang");
		int sl=Integer.valueOf(j);
		int bi=Integer.valueOf(zuid);
		String []ss=new String[sl];
		String daan[] =new String [sl];
		String s="";
		int ans=0;
		String ans1[]=new String[sl];
		int a[]=new int [sl];
		int a1[]=new int[sl];
		int b[]=new int [sl];
		int b1[]=new int[sl];
		int flag=0;
		int flag1=0;
		int flag2=0;
		int flag3=0;
		int c[]=new int [sl];
		int d[]=new int[sl];
		int d1[]=new int[sl];
		int e[]=new int[sl];
		int fs=Integer.valueOf(fss);
		int ys=Integer.valueOf(yss);
		int y=0;
		int y1=0;
		int y2=0;

		for(int i=0;i<sl;i++)
		{
			String j1=request.getParameter("kuohao");
			int y3=Integer.valueOf(j1);
			int c1 []=new int [20000];
			flag1=0;
			flag2=0;
			y=(int)(Math.random()*4+3);//生成数的个数
			y1=(int)(Math.random()*2);//有无括号
			y2=(int)(Math.random()*2);//前后
			a[i]=(int)(Math.random()*(bi-1-1)+1);
			a1[i]=(int)(Math.random()*(bi-1)+1);
			b[i]=(int)(Math.random()*(bi-1-1)+1);
			b1[i]=(int)(Math.random()*(bi-1)+1);
			c[i]=(int)(Math.random()*4);
			if((a[i]>=a1[i])||(b[i]>=b1[i])) //判断是否为真分数
			{
				flag2=1;
			}
			else   //是真分数继续进行
			{
				flag2=0;
			}
			if(fs==1)
			{
				flag=0;
			}
			if(fs==2)// 没有负数
			{
			   if(c[i]==1)
			   {
					if((a[i]*b1[i]-a1[i]*b[i])>=0)
					{
						flag=0;
					}
					else
					{
						flag=1;
					}
			   }
			}

			if(c[i]==0)
			{
				s=" + ";
			}
			if(c[i]==1)
			{
				s=" - ";
			}
			if(c[i]==2)
			{
				s=" * ";
			}
			if(c[i]==3)
			{

					if(ys==1)
					{
						s=" ÷ ";
					}
					if(ys==2)
					{
						if(((a[i]*b1[i])%(a1[i]*b[i]))==0)
						{
							s=" ÷ ";
						}
						else
						{
							flag=1;
						}
					}

			}
			int z=g.gongyue(a[i],a1[i]);
			int z1=g.gongyue(b[i],b1[i]);
			a[i]=a[i]/z;
			a1[i]=a1[i]/z;
			b[i]=b[i]/z1;
			b1[i]=b1[i]/z1;
			c1[i]=(int)(Math.random()*4);
			ss[i]=a[i]+"/"+a1[i]+s+b[i]+"/"+b1[i];
			if(y3==1)//有括号生成
			{
				for(int  r=0;r<(y-2);r++)
				{

					y1=(int)(Math.random()*2);//有无括号
					y2=(int)(Math.random()*2);//前后
					d[r]=(int)(Math.random()*(bi-1-1)+1);
					d1[r]=(int)(Math.random()*(bi-1)+1);
					int z3=g.gongyue(d[r],d1[r]);
					d[r]=d[r]/z3;
					d1[r]=d1[r]/z3;
					if(d[r]>=d1[r])
					{
						flag3=1;
					}
					else
					{
						flag3=0;
					}
					if(c1[i]==0)
					{
						s=" + ";
					}
					if(c1[i]==1)
					{
						s=" - ";
					}
					if(c1[i]==2)
					{
						s=" * ";
					}
					if(c1[i]==3)
					{

							if(ys==1)
							{
								s=" ÷ ";
							}
							if(ys==2)
							{
							  if(y2==0)
							  {
								if((a[i]*b1[i])%(a1[i]*b[i])==0)
								{
									s=" ÷ ";
								}
								else
									flag=1;
							  }
							}
					}
					if(y1==0) //随机数生成没有括号情况
					{
						if((y2==0)&&(flag3==0)) //加在后面
						{
							ss[i]=ss[i]+s+d[r]+"/"+d1[r];
						}
						if((y2==1)&&(flag3==0))  //加在前面
						{
							ss[i]=d[r]+"/"+d1[r]+s+ss[i];

						}
					}
					if(y1==1) //随机数生成了括号
					{
						if((y2==0)&&(flag3==0))  //加在后面
						{
							ss[i]="("+ss[i]+")"+s+d[r]+"/"+d1[r];

						}
						if((y2==1)&&(flag3==0))  //括号加在前边
						{
							ss[i]=d[r]+"/"+d1[r]+s+"("+ss[i]+")";

						}
					}
					for(int i2=0;i2<i;i2++)
					{
						if(ss[i2]==ss[i])
							flag1=1;
						else
							flag1=0;
					}
					if(flag3!=0)
						r--;
				}
			}
			if(y3==2)  //没有括号
			{
				for(int  r=0;r<(y-2);r++)
				{
					c1[i]=(int)(Math.random()*4);
					y1=(int)(Math.random()*2);//有无括号
					y2=(int)(Math.random()*2);//前后
					d[r]=(int)(Math.random()*(bi-1-1)+1);
					d1[r]=(int)(Math.random()*(bi-1)+1);
					int z4=g.gongyue(d[r],d1[r]);
					d[r]=d[r]/z4;
					d1[r]=d1[r]/z4;
					if(d[r]>=d1[r])
					{
						flag3=1;
					}
					else
					{
						flag3=0;
					}

					if(c1[i]==0)
					{
						s=" + ";
					}
					if(c1[i]==1)
					{
						s=" - ";
					}
					if(c1[i]==2)
					{
						s=" * ";
					}
					if(c1[i]==3)
					{
						if(ys==1)
							{
								s=" ÷ ";
							}
							if(ys==2)
							{
								if((a[i]*b1[i])%(a1[i]*b[i])==0)
								{
									s=" ÷ ";
								}
								else
									flag=1;
							}
					}

					if(y1==1) //没有括号
					{
						if((y2==0)&&(flag3==0)) //加在后面
						{
							ss[i]=ss[i]+s+d[r]+"/"+d1[r];

						}
						if((y2==1)&&(flag3==0))
						{
							ss[i]=d[r]+"/"+d1[r]+s+ss[i];

						}
					}
					for(int i2=0;i2<i;i2++)
					{
						if(ss[i2]==ss[i])
							flag1=1;
						else
							flag1=0;
					}

					if(flag3!=0)
						r--;
			} //小for 循环

		}

			if((flag==0)&&(flag1==0)&&(flag2==0)&&(flag3==0))
			{
				out.print(ss[i]);
				%>
				<br>
				<form  name="form5" method="post" action="fscheck.jsp">
				 请输入答案<input name=<%=daan[i] %> type="text" id="daan">
				 <br/>
				<%
			}
			else
				i--;
	  }
		session.setAttribute("v1", ss);
		session.setAttribute("v2", ans1);
		%>
	<input type="submit" value="统计结果"> </form>
	<%
	}
%>
</body>
</html>

  分数核查:

  

<%@ page language="java" 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>
<%
     String[] s1= (String[])session.getAttribute("v1");
     String[] answer= (String[])session.getAttribute("v2");
     String[] daan=new String[s1.length];
     int count=0;//正确答案的个数
     for(int i=0;i<s1.length;i++)
     {
        out.print("运算式为:");
         out.print(s1[i]+"  ");
        out.print("您的输入结果为:");
         daan[i]=request.getParameter("name"+i);
         out.print(daan[i]+"   ");
         out.print("正确结果为:");
         out.print(answer[i]);
        if(daan[i].equals(answer[i]))
         {
            out.print("恭喜你答对了!");
            count++;
         }
        else
         {
             out.print("很遗憾,你答错了!");
         }
         out.print("<br>");
     }
     out.print("你一共答对的题目数:");
     out.print(count);
 %>
</body>
</html>

 三.运行结果截图:

  

  

  

四.编程总结:

  在编程当中,遇到了很多麻烦,下面来阐述一下。首先,遇到的是怎么将菜单填入的值让自己和java里面用上,后来通过request方法来解决这个问题。还有就是随机数的生成,之前一直用的是Random类来实现随机数的生成,但是在JSP中好像不能直接那么用了,最后用的(int)(Math.random*n)方法。通过定义一个字符串数字,解决了文本框中输入值,和正确结果比对的问题。在有数据库连接方面,如果想在JSP中进行数据库的连接,在java中的驱语句后面还要加上.Instance()才能加载上。而且的Jdbc还要放在lib文件夹下。另外还有一个问题就是,在分数的情况下,执行SQL语句时,例如用1‘1/5表示一又五分之时,会有二义性,最后将‘改为|.

时间: 04-04

软件工程结对作业01--四则运算Web版的相关文章

软件工程结对作业02(借鉴版)

软件工程结对作业02(借鉴版) 在编写程序的时候因为不会将Java程序嵌入进jsp中所以借鉴了一个学姐的程序,下面是学姐的程序.但在对学姐程序就行修改时发现了一些问题: 在Newjsp中能调用html中的题目个数的参数 在Myjsp中不能调用html中的题目个数的参数 其中这个参数timugeshu,是我自己后来添加的,用来改变题目个数的,与Java程序无关,只在jsp文件中作用 源程序: NewFeil.html <!DOCTYPE html> <html> <head&g

软件工程结对作业02(原创版)

一.设计思路 1.在HTML文件中写题目选择项 2.输入一个数控制题目个数 3.输入一个数控制取值范围(小于100) 4.输入一个数控制参数个数 5.选择是否有乘除法数 6.在有乘除法时,选择是否有余法 7.选择是否有括号 8.点击提交按钮,通过一个链接进入jsp文件,并且用户在HTML输入的参数传到jsp 页面 9.调用java函数,输出题目 10.点击开始答题之后,进入下一个jsp页面,用户答题并显示用户答题情况 二.源代码: HTML文件 <!DOCTYPE html PUBLIC "

软件工程结对作业01

一.题目: 结对项目开发-四则运算四 把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目,并可实现在线答题并评判. 注:这是一个两人结对开发的项目,开发人员:曾凯    刘雨鑫 二.程序设计思想: (1)功能分析: 1.这是一个可以在线答题的web版四则运算程序,用户可以通过设点一些参数来生成题目,然后回答这些题目,提交后程序检查回答的正确性,然后将题目的回答情况通过页面显示的方式反馈给用户. 2.由于参数设置导致交互不太方便,用户需要考虑参数如何搭配,由此实现按照年级答题,用户只需要

四则运算WEB版(改进版)

结对伙伴:陶雨洁,李慧(me) 由于在4月14号,即上周五进行了web版四则运算的评判,所以未及时更新旧版本. (旧版本网址链接:http://www.cnblogs.com/xiaxiaoshu/p/6672332.html) 此版本即为更新过后的,界面也有些许改进的. 一.设计思想 二.源程序代码 三.运行结果截图 四.总结

四则运算web版

1>设计思路 1.首先编写一个input.jsp页面,用于输入各种参数,如出题的个数和数值上限,简单运算还是混合运算 2.编写index.jsp页面,用request接受input.jsp的参数,如果是简单运算,就是执行第一种算法,只出两个数的题,每出一题,输入一次答案,最后将输入答案,运算式和正确答案存到字符串中,而复杂运算则执行第二种算法,产生复杂运算式,也是每出一道题,输入一次答案,然后将运算式,输入答案和正确答案存到字符串中(其中产生算式和计算答案的方法和原来的普通四则运算一样) 3.编

软件工程个人作业01

一.题目: 像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量.(有能力者改编成网页版) 1.设计思想:了解题目要求,进行相关的定义与程序编写,再进行验证. 2.源代码: //韩迪的出题算法//2017/3/6 package dijia;import java.util.Random;import java.util.Scanner; public class

软件工程概论作业01

软件工程作业01 写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 思路:随机生成两个数进行计算,设立一个随机的参量用来判断是生成整数还是分数:生成分数时先生成分母,然后将分子的上限设置为分母,这样就会生成真分数: package demo; import java.util.Random; import java.util.Scanner; public class work {

软件工程结对作业实验报告

题目简介: 设计一个名为MyPoint的类,表示一个带x坐标和y坐标的点.该类包括:? 两个带get方法的数据域x和y,分别表示它们的坐标.? 一个创建点(0,0)的无参构造方法.? 一个创建特定坐标点的构造方法.? 两个数据域x和y各自的get方法.? 一个名为distance的方法,返回MyPoint类型的两个点之间的距离.? 一个名为distance的方法,返回指定x和y坐标的两个点之间的距离. 二.结对分工及过程 : 结对:张萍萍,程志张萍萍:程序的分析和程序的测试及测试代码的编写程志:

2015-05-17 软件工程结对作业

1.题目简介 2.结对分工及设计过程 3.代码地址 4.测试情况 5.问题及心得