·主要思路:在完成控制出题界面后,根据选择控制输出,将答案计算出来,连接到数据库,其中还涉及到最大公约数计算分数运算。
源代码:
<%@ 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=ISO-8859-1"> <title>出题系统</title> </head> <body> <h2>出题系统</h2> <form action="check.jsp" method="post"> 请输入出题数量:<input type="text" name = "username"><br> 请输入运算元数: <input type="text" name="choose1"><br> 输入数值范围:<input type="text" name="choose2"><br><hr> 1.整数四则运算 2.真分数四则运算<br> 选择: 有<input type="radio" name="choose"value=1> 无<input type="radio" name="choose"value=2><br> 有无乘除: 有<input type="radio" name="choose3"value=1> 无<input type="radio" name="choose3"value=2><br> 有无负数: 有<input type="radio" name="choose4"value=1> 无<input type="radio" name="choose4"value=2><br> 有无余数: 有<input type="radio" name="choose6"value=1> 无<input type="radio" name="choose6"value=2><br> 有无括号: 有<input type="radio" name="choose7"value=1> 无<input type="radio" name="choose7"value=2><br> 是否显示答案: 有<input type="radio" name="choose5"value=1> 无<input type="radio" name="choose5"value=2><br> <input type="submit" value="出题"> </form> </body> </html>
Yunsuan.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import= "size.com.* "%> <!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> <% JspWriter mout=pageContext.getOut(); String zh = request.getParameter("shuliang"); String zhh = request.getParameter("choose"); String Min=request.getParameter("xiao"); String Max=request.getParameter("da"); String shu = request.getParameter("geshu"); String chu = request.getParameter("chengchu"); String hao=request.getParameter("kuohao"); int x=Integer.parseInt(zh); int y=Integer.parseInt(zhh); int min=Integer.parseInt(Min); int max=Integer.parseInt(Max); int z=Integer.parseInt(shu); int xx=Integer.parseInt(chu); int t=Integer.parseInt(hao); int m,n,j,jj; char []ch=new char[4]; int a1,b1; ch[0]='+'; ch[1]='-'; ch[2]='*'; ch[3]='/'; if(y==1) { int []M=new int[10]; String []N=new String[10]; for(int ii=1;ii<=x;ii++) { mout.print("30道题目"); mout.print("<br>"); String []A=new String[30]; a1=(int)(Math.random()*(z-1)+1); b1=a1+1; for(int i=0;i<30;i++) { A[i]=""; for(int o=0;o<z;o++) { M[o]=(int)(Math.random()*max+min); if(xx==1) j=(int)(Math.random()*4+1); else j=(int)(Math.random()*2+1); if(o==z-1) A[i]=A[i]+M[o]; else A[i]=A[i]+M[o]+ch[j-1]; } for(int k=0;k<i;k++) { if(A[i].equals(A[k])) { i--; break; } } } String[] B=new String[30]; for(int i=0;i<30;i++) { B[i]=A[i]; } if(t==1) { for(int iii=0;iii<30;iii++) { String ss=A[iii]; int num =z-1; int length = ss.length(); int[] in = new int[num]; int i=0; for(int j1=0;j1<ss.length();j1++) { if(ss.charAt(j1)=='+'||ss.charAt(j1)=='/'||ss.charAt(j1)=='-'||ss.charAt(j1)=='*') { in[i] = j1; i++; } } /*for(int m1=0;m1<num;m1++) { mout.print("<br>"); }*/ StringBuffer temp = new StringBuffer(ss); int former = (int)(Math.random()*length+1); int end = (int)(Math.random()*length+1); while(num<=2&&former !=1&&end != length) { former = (int)(Math.random()*length+1); end = (int)(Math.random()*length+1); } if(former == 1) { temp.insert(former-1, '('); int next = (int)(Math.random()*num); while(next == 0) next = (int)(Math.random()*num); temp.insert(in[next]+1, ')'); end--; } if(former >1&&end <length&&num>2) { int first = (int)(Math.random()*num);//括起来的第一个数 int next = (int)(Math.random()*num);//括起来的最后一个数 while(next-first<=1) { first = (int)(Math.random()*num);//括起来的第一个数 next = (int)(Math.random()*num);//括起来的最后一个数 } temp.insert(in[first]+1, '('); temp.insert(in[next]+1, ')'); } if(end == length) { temp.insert(end, ')'); int first = (int)(Math.random()*num); while(first == num-1) first = (int)(Math.random()*num); temp.insert(in[first]+1, '('); } ss = temp.toString(); A[iii]=ss; } } double[] K=new double[30]; double[] C=new double[30]; for(int i=0;i<30;i++) { if(t==1) { while(A[i].indexOf('(')!=-1) { int left=0; int right=A[i].length(); char op; for(int i4=0;i4<A[i].length();i4++) { if(A[i].charAt(i4)=='(') { left=i4; } if(A[i].charAt(i4)==')') { right=i4; break; } } String strq=A[i].substring(left+1,right); mout.print("<br>"); mout.print(strq); mout.print("<br>"); /* C[i]=YL.fun1(strq); B[i]=A[i].substring(0,left-1)+String.valueOf(C[i])+A[i].substring(right+1,A[i].length()-1);*/ } /*K[i]=YL.fun1(B[i]); mout.print("<br>"); mout.print(C[i]); mout.print("<br>");*/ } else K[i]=YL.fun1(B[i]); } for(int i=0;i<30;i++) { mout.print((i+1)+". "+A[i]); mout.print("<br>"); } mout.print("答案:"); mout.print("<br>"); for(int i=0;i<30;i++) { mout.print((i+1)+"、"+K[i]); mout.print("<br>"); } mout.print("-"+ii+"-"); mout.print("<br><br><br>"); } } if(y==2) { for(int ii=1;ii<=x;ii++) { int a,b,c,d; String aa,bb; mout.print("30道题目"); mout.print("<br>"); String []B=new String[30]; for(int i=0;i<30;i++) { a=(int)(Math.random()*100+1); b=(int)(Math.random()*100+1); if(a>b) aa=b+"/"+a; else if(a<b) aa=a+"/"+b; else aa="1"; c=(int)(Math.random()*100+1); d=(int)(Math.random()*100+1); if(c>d) bb=d+"/"+c; else if(c<d) bb=c+"/"+d; else bb="1"; j=(int)(Math.random()*4+1); B[i]=aa+" "+ch[j-1]+" "+bb+"="; for(int k=0;k<i;k++) { if(B[i].equals(B[k])) { i--; break; } } } for(int i=0;i<30;i++) { mout.print((i+1)+". "+B[i]); mout.print("<br>"); } mout.print("-"+ii+"-"); mout.print("<br><br><br>"); mout.print("-"+ii+"-"); mout.print("<br><br><br>"); } } %> </body> </html>
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import= "size.com.* "%> <!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> <% JspWriter mout=pageContext.getOut(); String zh = request.getParameter("shuliang"); String zhh = request.getParameter("choose"); String Min=request.getParameter("xiao"); String Max=request.getParameter("da"); String shu = request.getParameter("geshu"); String chu = request.getParameter("chengchu"); String hao=request.getParameter("kuohao"); int x=Integer.parseInt(zh); int y=Integer.parseInt(zhh); int min=Integer.parseInt(Min); int max=Integer.parseInt(Max); int z=Integer.parseInt(shu); int xx=Integer.parseInt(chu); int t=Integer.parseInt(hao); int m,n,j,jj; char []ch=new char[4]; int a1,b1; ch[0]='+'; ch[1]='-'; ch[2]='*'; ch[3]='/'; if(y==1) { int []M=new int[10]; String []N=new String[10]; for(int ii=1;ii<=x;ii++) { mout.print("30道题目"); mout.print("<br>"); String []A=new String[30]; a1=(int)(Math.random()*(z-1)+1); b1=a1+1; for(int i=0;i<30;i++) { A[i]=""; for(int o=0;o<z;o++) { M[o]=(int)(Math.random()*max+min); if(xx==1) j=(int)(Math.random()*4+1); else j=(int)(Math.random()*2+1); if(o==z-1) A[i]=A[i]+M[o]; else A[i]=A[i]+M[o]+ch[j-1]; } for(int k=0;k<i;k++) { if(A[i].equals(A[k])) { i--; break; } } } String[] B=new String[30]; for(int i=0;i<30;i++) { B[i]=A[i]; } if(t==1) { for(int iii=0;iii<30;iii++) { String ss=A[iii]; int num =z-1; int length = ss.length(); int[] in = new int[num]; int i=0; for(int j1=0;j1<ss.length();j1++) { if(ss.charAt(j1)=='+'||ss.charAt(j1)=='/'||ss.charAt(j1)=='-'||ss.charAt(j1)=='*') { in[i] = j1; i++; } } /*for(int m1=0;m1<num;m1++) { mout.print("<br>"); }*/ StringBuffer temp = new StringBuffer(ss); int former = (int)(Math.random()*length+1); int end = (int)(Math.random()*length+1); while(num<=2&&former !=1&&end != length) { former = (int)(Math.random()*length+1); end = (int)(Math.random()*length+1); } if(former == 1) { temp.insert(former-1, '('); int next = (int)(Math.random()*num); while(next == 0) next = (int)(Math.random()*num); temp.insert(in[next]+1, ')'); end--; } if(former >1&&end <length&&num>2) { int first = (int)(Math.random()*num);//括起来的第一个数 int next = (int)(Math.random()*num);//括起来的最后一个数 while(next-first<=1) { first = (int)(Math.random()*num);//括起来的第一个数 next = (int)(Math.random()*num);//括起来的最后一个数 } temp.insert(in[first]+1, '('); temp.insert(in[next]+1, ')'); } if(end == length) { temp.insert(end, ')'); int first = (int)(Math.random()*num); while(first == num-1) first = (int)(Math.random()*num); temp.insert(in[first]+1, '('); } ss = temp.toString(); A[iii]=ss; } } double[] K=new double[30]; double[] C=new double[30]; for(int i=0;i<30;i++) { if(t==1) { while(A[i].indexOf('(')!=-1) { int left=0; int right=A[i].length(); char op; for(int i4=0;i4<A[i].length();i4++) { if(A[i].charAt(i4)=='(') { left=i4; } if(A[i].charAt(i4)==')') { right=i4; break; } } String strq=A[i].substring(left+1,right); mout.print("<br>"); mout.print(strq); mout.print("<br>"); /* C[i]=YL.fun1(strq); B[i]=A[i].substring(0,left-1)+String.valueOf(C[i])+A[i].substring(right+1,A[i].length()-1);*/ } /*K[i]=YL.fun1(B[i]); mout.print("<br>"); mout.print(C[i]); mout.print("<br>");*/ } else K[i]=YL.fun1(B[i]); } for(int i=0;i<30;i++) { mout.print((i+1)+". "+A[i]); mout.print("<br>"); } mout.print("答案:"); mout.print("<br>"); for(int i=0;i<30;i++) { mout.print((i+1)+"、"+K[i]); mout.print("<br>"); } mout.print("-"+ii+"-"); mout.print("<br><br><br>"); } } if(y==2) { for(int ii=1;ii<=x;ii++) { int a,b,c,d; String aa,bb; mout.print("30道题目"); mout.print("<br>"); String []B=new String[30]; for(int i=0;i<30;i++) { a=(int)(Math.random()*100+1); b=(int)(Math.random()*100+1); if(a>b) aa=b+"/"+a; else if(a<b) aa=a+"/"+b; else aa="1"; c=(int)(Math.random()*100+1); d=(int)(Math.random()*100+1); if(c>d) bb=d+"/"+c; else if(c<d) bb=c+"/"+d; else bb="1"; j=(int)(Math.random()*4+1); B[i]=aa+" "+ch[j-1]+" "+bb+"="; for(int k=0;k<i;k++) { if(B[i].equals(B[k])) { i--; break; } } } for(int i=0;i<30;i++) { mout.print((i+1)+". "+B[i]); mout.print("<br>"); } mout.print("-"+ii+"-"); mout.print("<br><br><br>"); mout.print("-"+ii+"-"); mout.print("<br><br><br>"); } } %> </body> </html>
Caculate.class
package demo; import java.util.HashMap; import java.util.Map; import java.util.Stack; public class Caculate { /*public static void main(String[] args) { // TODO Auto-generated method stub String str1="22+4*(2+3)"; double result=fun2(str1); System.out.println(result); }*/ public static Map pro=new HashMap(); public static void init() { pro.put('+', 1); pro.put('-', 1); pro.put('*', 2); pro.put('÷', 2); } public static int getIndex(String str) { int index1=(str.indexOf('+')==-1?str.length():str.indexOf('+')); int index2=(str.indexOf('-')==-1?str.length():str.indexOf('-')); int index3=(str.indexOf('*')==-1?str.length():str.indexOf('*')); int index4=(str.indexOf('÷')==-1?str.length():str.indexOf('÷')); int index=index1<index2?index1:index2; index=index<index3?index:index3; index=index<index4?index:index4; return index; } public static double cal(char op,double num1,double num2) { switch(op) { case '+': return num1+num2; case '-': return num1-num2; case '*': return num1*num2; default: return num1%num2; } } public static double fun1(String str) { init(); Stack st1=new Stack(); Stack st2=new Stack(); int fop=0; while(str.length()>0) { int index=getIndex(str); st1.push(Double.parseDouble(str.substring(0,index))); if(index!=str.length()) { char op=str.charAt(index); str=str.substring(index+1); while(true) { if((int)pro.get(op)>fop) { st2.push(op); fop=(int)pro.get(op); break; } else { double num2= (double) st1.pop(); double num1=(double) st1.pop(); double result=cal((char)st2.pop(),num1,num2); st1.push(result); if(st2.size()==0) { st2.push(op); fop=(int)pro.get(op); break; } char cop=(char) st2.pop(); fop=(int)pro.get(cop); st2.push(cop); } } } else { break; } } while(st2.size()!=0) { double num2=(double) st1.pop(); double num1=(double) st1.pop(); char op=(char) st2.pop(); st1.push(cal(op,num1,num2)); } double result=(double) st1.pop(); return result; } public static double fun2(String str) { while(str.indexOf('(')!=-1) { int left=0; int right=str.length(); char op; for(int i=0;i<str.length();i++) { if(str.charAt(i)=='(') { left=i; } if(str.charAt(i)==')') { right=i; break; } } str=str.substring(0,left)+fun1(str.substring(left+1,right))+str.substring(right+1); } return fun1(str); } }
fencal.class
package demo; public class fencal { public static String fenmu(String ss,int n,int m) {//n 几元,m 有无括号 ss = '='+ss+'='; String result=""; String cal = ""; int num = n*2+1; if(m == 1) { num = num + 2; } int length = ss.length(); int[] in = new int[num];//操作符下标数组 String[] str = new String[n];//分母数组 String[] str1 = new String[n];//分子数组 int i=0;//操作符计数器 int j=0;//字符串计数器 int z=0;//分母数组计数器 double fm=1; for(j=0;j<length;j++) { if(ss.charAt(j)=='+'||ss.charAt(j)=='÷'||ss.charAt(j)=='-'||ss.charAt(j)=='*'||ss.charAt(j)=='('||ss.charAt(j)==')'||ss.charAt(j)=='/'||ss.charAt(j)=='=') { in[i] = j; i++; } } /*for(i=0;i<num;i++) System.out.println(in[i]);*/ for(i=0;i<num;i++) { if(ss.charAt(in[i]) == '/') { str[z] = ss.substring(in[i]+1, in[i+1]); z++; } } /*for(z=0;z<n;z++) System.out.println(str[z]);*/ for(z=0;z<n;z++) { double fmm = Double.parseDouble(str[z]); fm = fm*fmm; } System.out.println("分母为"+fm); return ""+fm; } public static String shizi(String ss,int n,int m) { String shizi = ""; ss = '='+ss+'='; String result=""; String cal = ""; int num = n*2+1; if(m == 1) { num = num + 2; } int length = ss.length(); int[] in = new int[num];//操作符下标数组 String[] str = new String[n];//分母数组 String[] str1 = new String[n];//分子数组 int i=0;//操作符计数器 int j=0;//字符串计数器 int z=0;//分母数组计数器 double fm=1; for(j=0;j<length;j++) { if(ss.charAt(j)=='+'||ss.charAt(j)=='÷'||ss.charAt(j)=='-'||ss.charAt(j)=='*'||ss.charAt(j)=='('||ss.charAt(j)==')'||ss.charAt(j)=='/'||ss.charAt(j)=='=') { in[i] = j; i++; } } for(i=0;i<num;i++) System.out.println(in[i]); for(i=0;i<num;i++) { if(ss.charAt(in[i]) == '/') { str[z] = ss.substring(in[i]+1, in[i+1]); z++; } } /*for(z=0;z<n;z++) System.out.println(str[z]);*/ for(z=0;z<n;z++) { double fmm = Double.parseDouble(str[z]); fm = fm*fmm; } System.out.println("分母为"+fm); z=0; for(i=0;i<num;i++) { if(ss.charAt(in[i]) == '/') { str1[z] = ss.substring(in[i-1]+1, in[i]); z++; } } for(z=0;z<n;z++) { double fmm = Double.parseDouble(str[z]); double fzz = Double.parseDouble(str1[z]); double fz = fm/fmm*fzz; str1[z] = ""+fz; } for(z=0;z<n;z++) System.out.println("分子"+str1[z]); z=0; int numm = n-1; if(m == 1) numm = numm +2; String[] str2 =new String[numm]; for(i=0;i<num;i++) { if(ss.charAt(in[i])!='='&&ss.charAt(in[i])!='/') { str2[z] = ""+ss.charAt(in[i]); z++; } } /*for(z=0;z<numm;z++) System.out.println(str2[z]);*/ if(m == 1) { for(i=0;i<numm;i++) { if(str2[i].equals("(")&&i>0) { j=i-1; str2[j] = str2[j] + str2[i]; break; } } for(j=j+1;j<numm-1;j++) str2[j]=str2[j+1]; } if(m == 1) { for(i=0;i<numm;i++) { if(str2[i].equals(")")&&i<numm-1) {System.out.println("zou"); j=i+1; str2[i] = str2[i]+str2[j]; break; } } for(;j<numm-1;j++) str2[j]=str2[j+1]; } for(z=0;z<numm;z++) System.out.println(str2[z]); if(str2[0].equals("(")) { for(i=0;i<n-1;i++) { shizi = shizi + str2[i]+""+ str1[i]; } shizi = shizi + str2[i]+str1[n-1]; } else if(str2[numm-1].equals(")")) { for(i=0;i<n-1;i++) { shizi = shizi + str1[i]+ ""+ str2[i]; } shizi = shizi +str1[n-1]+str2[i]; } else { for(i=0;i<n-1;i++) { shizi = shizi + str1[i]+""+ str2[i]; } shizi = shizi + str1[n-1]; } return shizi; } public static int getGongYueShu(int a, int b){ int t = 0; if(a<b){ t =a; a=b; b=t; } int c=a%b; if(c==0) { return b; } else return getGongYueShu(a,c); } }
Action.class
package demo; import java.sql.*; public class Action { public void add(int num,String str1,String str2) throws SQLException{ Connection conn = Main.getConn(); //获取数据库连接 Statement st = conn.createStatement(); String sql = "insert into calTable([number],[question],[answer]) values('"+ num +"','" + str1 + "','" + str2 + "')"; st.executeUpdate(sql); st.close(); conn.close(); } }
Main.class
package demo; import java.sql.*; public class Main { public static Connection getConn(){ String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; Connection dbConn = null; String dbURL="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Size"; String userName="sa"; String userPwd="123456"; try { Class.forName(driverName); System.out.println("加载驱动成功!"); }catch(Exception e){ e.printStackTrace(); System.out.println("加载驱动失败!"); } try{ dbConn=DriverManager.getConnection(dbURL,userName,userPwd); System.out.println("连接数据库成功!"); }catch(Exception e) { e.printStackTrace(); System.out.print("SQL Server连接失败!"); } return dbConn; } }
截图:
总结:四则运算的完成是我和张家星同学一起完成的 ,虽然有些不足和不满意的地方,但是在以后会注意并改正。