小組成員: 信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