小组成员: 信1505-1班 20153274 罗振宇javascript
信1505-1班 20153293 康学涛css
任务要求:实现自动生成算术题,而且可以检查结果和将结果存放到数据库中的四则运算,并制做成网页版html
程序设计思想:写好java程序后,须要将程序嵌入网页中,编写jsp脚本文件,使用数组来实现java和jsp的交互;session标签,能够实现网页之间参数的传递。java
程序源代码:mysql
1.界面设计: 算法
Choose.jspsql
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.jspsession
<%@ 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++; flag=0; } } else