结对开发之四则运算(网页版)
2017-04-07 19:50 ovols 阅读(300) 评论(0) 编辑 收藏 举报小组成员: 信1505-1班 20153274 罗振宇
信1505-1班 20153293 康学涛
任务要求:实现自动生成算术题,并且能够检查结果和将结果存放到数据库中的四则运算,并制作成网页版
程序设计思想:写好java程序后,需要将程序嵌入网页中,编写jsp脚本文件,使用数组来实现java和jsp的交互;session标签,可以实现网页之间参数的传递。
程序源代码:
1.界面设计:
Choose.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>选择界面</title>
8 <style type="text/css">
9 .aa {
10 font-weight: bold;
11 }
12 body {
13 background-color: #0CF;
14 background-image: url(b6.jpg);
15 }
16 </style>
17 </head>
18 <body>
19 <div style="text-align: center; font-family: 微软雅黑; font-size: 50px; color: #D2691E; "><strong><em>四则运算生成器</em></strong></div>
20 <div style="text-align: center; font-family: 微软雅黑; font-size: 15px; color: #FF0000; "><strong><em>Welcome To User The System</em></strong></div>
21 <br/>
22 <div style="text-align: center; font-family: 微软雅黑; font-size: 20px;"><em>请选择出题的范围</em></div><br />
23 <form name="form1" method="post" action="Judge.jsp">
24 A:整数的四则计算<br />
25 B:真分数的四则计算<br />
26 C:有余数的运算<br />
27 <div style="text-align: center">
28 <font size=4>请选择:</font><input name="Choose" type="text"/>
29 <input name="" type="submit" value="提交" />
30 <input name="" type="reset" value="重置" />
31 </div>
32 </form>
33 </body>
34 </html>
2.
chuandi.jsp 通过session标签实现参数在网页之间的传递
<%@ 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>
<style type="text/css">
.aa {
font-weight: bold;
}
body {
background-color: #0CF;
background-image: url(b6.jpg);
}
</style>
</head>
<body>
<div style="text-align: center; font-family: 微软雅黑; font-size: 50px; color: #D2691E; "><strong><em>四则运算生成器</em></strong></div>
<div style="text-align: center; font-family: 微软雅黑; font-size: 15px; color: #FF0000; "><strong><em>Welcome To User The System</em></strong></div>
<br/>
<div style="text-align: center; font-family: 微软雅黑; font-size: 20px;"><em>请选择出题的范围</em></div><br />
<form name="form1" method="post" action="Judge.jsp">
A:整数的四则计算<br />
B:真分数的四则计算<br />
C:有余数的运算<br />
<div style="text-align: center">
<font size=4>请选择:</font><input name="Choose" type="text"/>
<input name="" type="submit" value="提交" />
<input name="" type="reset" value="重置" />
</div>
</form>
</body>
</html>
3.fenshu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import = "java.util.Random"%>
<!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 calculate2
{
public int m,n,x,y,c;//定义4个变量,还有一个符号变量
public Random random=new Random();
String s;//生成的计算式储存咋m里面
int fanwei;
public void shengcheng(int fanwei1)
{
fanwei=fanwei1;
c=random.nextInt(4);
x=random.nextInt(fanwei);
y=random.nextInt(fanwei);
m=random.nextInt(fanwei);
n=random.nextInt(fanwei);//生成4个随机数在50以内,赋给x,y,m,n
String fuhao;
for(int i=0;;i++)
{
if(x==0)//不能生成0
{
x=random.nextInt(fanwei);
}
else
{
break;
}
}
for(int i=0;;i++)
{
if(y==0||y==x)//不能生成0
{
y=random.nextInt(fanwei);
}
else
{
break;
}
}
for(int i=0;;i++)
{
if(m==0)//不能生成0
{
m=random.nextInt(fanwei);
}
else
{
break;
}
}
for(int i=0;;i++)
{
if(n==0||m==n)//不能生成0
{
n=random.nextInt(fanwei);
}
else
{
break;
}
}
if(c==0)//通整数一样,0是加法,1减法,2乘法,3除法
{
fuhao="+";
}
else if(c==1)
{
fuhao="-";
}
else if(c==2)
{
fuhao="*";
}
else
{
fuhao="/";
}
int gongyue=Gongyue(x,y);
x=x/gongyue;
y=y/gongyue;
gongyue=Gongyue(m,n);
m=m/gongyue;
n=n/gongyue;
}
public String shuchu()//定义输出函数
{
if(c==0)
{
if(x>y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
s=y+"/"+x+" + "+n+"/"+m+"=";
return jisuan(x,y,m,n,c);//返回计算结果
}
else if(x>y&&m<n)//生成的分母必须大于分子,输出不同的结果
{
s=y+"/"+x+" + "+m+"/"+n+"=";
return jisuan(x,y,n,m,c);//返回计算结果
}
else if(x<y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
s=x+"/"+y+" + "+n+"/"+m+"=";
return jisuan(y,x,m,n,c);//返回计算结果
}
else//生成的分母必须大于分子,输出不同的结果
{
s=x+"/"+y+" + "+m+"/"+n+"=";
return jisuan(y,x,n,m,c);//返回计算结果
}
}
else if(c==1)
{
double x1=Double.parseDouble(String.valueOf(x));
double y1=Double.parseDouble(String.valueOf(y));
double m1=Double.parseDouble(String.valueOf(m));
double n1=Double.parseDouble(String.valueOf(n));
if(x>y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
if((y1/x1)>(n1/m1))
{
s=y+"/"+x+" - "+n+"/"+m+"=";
return jisuan(x,y,m,n,c);//返回计算结果
}
else
{
s=n+"/"+m+" - "+y+"/"+x+"=";
return jisuan(m,n,x,y,c);//返回计算结果
}
}
else if(x>y&&m<n)//生成的分母必须大于分子,输出不同的结果
{
if((y1/x1)>(m1/n1))//减数必须大于被减数
{
s=y+"/"+x+" - "+m+"/"+n+"=";
return jisuan(x,y,n,m,c);//返回计算结果
}
else//减数必须大于被减数
{
s=m+"/"+n+" - "+y+"/"+x+"=";
return jisuan(n,m,x,y,c);//返回计算结果
}
}
else if(x<y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
if((x1/y1)>(n1/m1))//减数必须大于被减数
{
s=x+"/"+y+" - "+n+"/"+m+"=";
return jisuan(y,x,m,n,c);
}
else//减数必须大于被减数
{
s=n+"/"+m+" - "+x+"/"+y+"=";
return jisuan(m,n,y,x,c);//返回计算结果
}
}
else
{
if((x1/y1)>(m1/n1))//生成的分母必须大于分子,输出不同的结果//减数必须大于被减数
{
s=x+"/"+y+" - "+m+"/"+n+"=";
return jisuan(y,x,n,m,c);//返回计算结果
}
else//减数必须大于被减数
{
s=m+"/"+n+" - "+x+"/"+y+"=";
return jisuan(n,m,y,x,c);//返回计算结果
}
}
}
else if(c==2)
{
if(x>y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
s=y+"/"+x+" * "+n+"/"+m+"=";
return jisuan(x,y,m,n,c);//返回计算结果
}
else if(x>y&&m<n)//生成的分母必须大于分子,输出不同的结果
{
s=y+"/"+x+" * "+m+"/"+n+"=";
return jisuan(x,y,n,m,c);//返回计算结果
}
else if(x<y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
s=x+"/"+y+" * "+n+"/"+m+"=";
return jisuan(y,x,m,n,c);
}
else//生成的分母必须大于分子,输出不同的结果
{
s=x+"/"+y+" * "+m+"/"+n+"=";
return jisuan(y,x,n,m,c);//返回计算结果
}
}
else
{
if(x>y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
s=y+"/"+x+" / "+n+"/"+m+"=";
return jisuan(x,y,m,n,c);//返回计算结果
}
else if(x>y&&m<n)//生成的分母必须大于分子,输出不同的结果
{
s=y+"/"+x+" / "+m+"/"+n+"=";
return jisuan(x,y,n,m,c);//返回计算结果
}
else if(x<y&&m>n)//生成的分母必须大于分子,输出不同的结果
{
s=x+"/"+y+" / "+n+"/"+m+"=";
return jisuan(y,x,m,n,c);//返回计算结果
}
else//生成的分母必须大于分子,输出不同的结果
{
s=x+"/"+y+" / "+m+"/"+n+"=";
return jisuan(y,x,n,m,c);//返回计算结果
}
}
}
public String jisuan(int a,int b,int c,int d,int m)//计算结果的函数
{
String daan;
int gongyue,gongbei;
if(m==0)//加法计算的结果算法
{
gongbei=Gongbei(a,c);//求两个分母的最小公倍数
int s1,s2,s3;
s1=gongbei/a;
s2=gongbei/c;
s3=b*s1+d*s2;
if(s3==gongbei)
{
return("1");
}
else
{
gongyue=Gongyue(s3,gongbei);
int fenzi=s3/gongyue,fenmu=gongbei/gongyue;
if(fenzi<fenmu)
{
daan=String.valueOf(fenzi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
else
{
int zhi=fenzi/fenmu;
daan=String.valueOf(zhi)+"‘"+String.valueOf(fenzi-fenmu*zhi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
}
}
else if(m==1)//减法计算的结果算法
{
gongbei=Gongbei(a,c);
int s1,s2,s3;
s1=gongbei/a;
s2=gongbei/c;
s3=b*s1-d*s2;
if(s3==gongbei)
{
return("1");
}
else
{
if(s3==0)
{
daan=String.valueOf("0");
return daan;
}
else
{
gongyue=Gongyue(s3,gongbei);
int fenzi=s3/gongyue,fenmu=gongbei/gongyue;
if(fenzi<fenmu)
{
daan=String.valueOf(fenzi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
else
{
int zhi=fenzi/fenmu;
daan=String.valueOf(zhi)+"‘"+String.valueOf(fenzi-fenmu*zhi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
}
}
}
else if(m==2)//乘法计算的结果算法
{
int s1,s2;
s1=a*c;
s2=b*d;
if(s1==s2)
{
return("1");
}
else
{
gongyue=Gongyue(s1,s2);
int fenzi=s2/gongyue,fenmu=s1/gongyue;
if(fenzi<fenmu)
{
daan=String.valueOf(fenzi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
else
{
int zhi=fenzi/fenmu;
daan=String.valueOf(zhi)+"‘"+String.valueOf(fenzi-fenmu*zhi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
}
}
else//除法计算的结果算法
{
int s1,s2;
s1=a*d;
s2=b*c;
if(s1==s2)
{
return("1");
}
else
{
gongyue=Gongyue(s1,s2);
int fenzi=s2/gongyue,fenmu=s1/gongyue;
if(fenzi<fenmu)
{
daan=String.valueOf(fenzi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
else
{
int zhi=fenzi/fenmu;
daan=String.valueOf(zhi)+"‘"+String.valueOf(fenzi-fenmu*zhi)+"/"+String.valueOf(fenmu);//通分
return daan;
}
}
}
}
public int Gongbei(int a,int c)//求最小公倍数的函数
{
int gongbei;
if(a>c)
{
gongbei=a;//公倍数从大的开始
while(gongbei<=a*c)
{
if(gongbei%a==0&&gongbei%c==0)
{
break;
}
gongbei++;
}
}
else
{
gongbei=c;//公倍数从大的开始
while(gongbei<=a*c)
{
if(gongbei%a==0&&gongbei%c==0)
{
break;
}
gongbei++;
}
}
return gongbei;
}
public int Gongyue(int gongbei,int s3)//求最大公约数的函数
{
int i=1,gongyue=0;
if(gongbei>s3)//公约数从1到最小的数
{
while(i<=s3)
{
if(gongbei%i==0&&s3%i==0)
{
gongyue=i;
}
i++;
}
return gongyue;
}
else
{
while(i<=gongbei)
{
if(gongbei%i==0&&s3%i==0)
{
gongyue=i;
}
i++;
}
return gongyue;
}
}
public int jianyan(String a[],int l)//检验是否生成重复计算式的函数
{
int flag=1;
for(int i=0;i<l;i++)
{
if(s.equals(a[i]))
{
flag=0;
break;
}
}
return flag;
}
}
int tishu;
int fanwei;
int m=0;
String shuju[]=new String[10000];
int flag=0;
calculate2 a=new calculate2();
String daan,daan1;
%>
<%
tishu=Integer.parseInt((String.valueOf(session.getAttribute("tishu"))));
fanwei=Integer.parseInt((String.valueOf(session.getAttribute("fanwei"))));
session.setAttribute("tishu", tishu);
if(m<tishu)
{
a.shengcheng(fanwei);
String f=a.shuchu();
shuju[m]=a.s;
flag=a.jianyan(shuju, m);//返回是否有重复
if(flag==1)//如果没有就是1
{
if(m+1==tishu)
{daan=a.shuchu();
session.setAttribute("shuju", shuju[m]);
session.setAttribute("daan", daan);
session.setAttribute("m", m);
%>
<form id="form2" name="form2" method="post" action="fenshuhuoqu.jsp">
<div style="text-align:center">
<%out.print(m+1+"."+shuju[m]+"=");
m=0;%>
<br>
<br>
<br>
<br>
<br>
请输入答案:<input name="daan1" type="text" value=""/><br /><br/>
<input name="" type="submit" value="提交" />
</div>
</form>
<%
}
else
{
daan=a.shuchu();
session.setAttribute("shuju", shuju[m]);
session.setAttribute("daan", daan);
session.setAttribute("m", m);
%>
<form id="form2" name="form2" method="post" action="fenchuandi.jsp">
<div style="text-align:center">
<%out.print(m+1+"."+shuju[m]+"=");%>
<br>
<br>
<br>
<br>
<br>
请输入答案:<input name="daan1" type="text" value=""/><br /><br/>
<input name="" type="submit" value="下一个" />
</div>
</form>
<%
m++