程序设计思路:我们需要把数据库与我们的程序链接起来,所以我们运用了javaweb的技术来实现这个功能
先将表达式求得的值放入数组,然后将用户输入的值与数组中的值进行比较,确定结果是否正确。在有多个
运算符和括号的时候,可用用栈确定运算的优先级。用递归的思想计算表达式的值1.在进行不加括号的运算
时,可以通过产生的表达式直接求得正确值,然后跟用户输入的值进行比较;2.有括号的运算时,我们可以
通过循环求得每次循环所得值,并放入数组中;再通过判断循环后的运算符,来决定数组值之间的加减乘除,
以求得最后正确值,然后跟用户输入的值进行比较。
程序代码:
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 </head> 9 <body background="picture/132.jpg"> 10 <% 11 String[] s= (String[])session.getAttribute("v1"); 12 String[] answer= (String[])session.getAttribute("v2"); 13 String[] daan=new String[s.length]; 14 int count=0;//正确答案的个数 15 for(int i=0;i<s.length;i++) 16 { 17 out.print("运算式为:"); 18 out.print(s[i]+" "); 19 out.print("您的输入结果为:"); 20 daan[i]=request.getParameter("name"+i); 21 out.print(daan[i]+" "); 22 out.print("正确结果为:"); 23 out.print(answer[i]); 24 if(Integer.parseInt(daan[i])==Integer.parseInt(answer[i])) 25 { 26 out.print("答对了,真棒!"); 27 count++; 28 } 29 else 30 { 31 out.print("答错了,真遗憾!"); 32 } 33 out.print("<br>"); 34 } 35 out.print("你一共答对的题目数:"); 36 out.print(count); 37 %> 38 </body> 39 </html> 40 41 <%@ page language="java" contentType="text/html; charset=utf-8" 42 pageEncoding="utf-8"%> 43 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 44 <html> 45 <head> 46 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 47 <title>首页</title> 48 </head> 49 <body background="picture/132.jpg"> 50 <form name="form1" method="post"action="ti.jsp"> 51 <center>四则运算</center> 52 <table align="center"> 53 <tr> 54 <td> 请输入要出题的题目数量: </td> 55 <td> <input name="shuliang" type="text" id="shuliang"maxlength="5"></td> 56 </tr> 57 <tr> 58 <td>请选择计算的难易程度: 59 </td> 60 <td> 61 <select name="leixing"> 62 <option value=1>基础运算</option> 63 <option value=2>高级运算</option> 64 </select> 65 </td> 66 </tr> 67 </table> 68 <center><input type="submit"value="开始答题"></center> 69 </form> 70 </body> 71 </html> 72 73 <%@ page language="java" contentType="text/html; charset=utf-8" 74 pageEncoding="utf-8"%> 75 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 76 <html> 77 <head> 78 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 79 <title>Insert title here</title> 80 </head> 81 <body background="picture/132.jpg"> 82 <% 83 String leixing=request.getParameter("leixing"); 84 if(Integer.parseInt(leixing)==1) 85 { 86 %> 87 88 <% 89 90 int answer; //所出题目的答案 91 String j=request.getParameter("shuliang");//出的题的数量 92 int shuliang= Integer.valueOf(j); 93 String[] str=new String[shuliang]; 94 String[] daan=new String[shuliang];//用户输入的答案 95 String[] answer1=new String[shuliang]; //计算之后的正确答案 96 for(int i=0;i<shuliang;i++) 97 { 98 daan[i]="name"+i; 99 //生成0-100之间的随机数 100 int num1=(int)(Math.random()*100); 101 int num2=(int)(Math.random()*100); 102 int fuhao= (int)(Math.random()*4); 103 if(fuhao==0) 104 { 105 str[i]=num1+"+"+num2+"="; 106 answer=num1+num2; 107 } 108 else if(fuhao==1) 109 { 110 str[i]=num1+"-"+num2+"="; 111 answer=num1-num2; 112 } 113 else if(fuhao==2) 114 { 115 str[i]=num1+"*"+num2+"="; 116 answer=num1*num2; 117 } 118 else 119 { 120 str[i]=num1+"/"+num2+"="; 121 answer=num1/num2; 122 } 123 124 answer1[i]=""+answer; 125 out.print(str[i]); 126 127 128 %> 129 <br> 130 <form name="form2"method="post"action="jieguo.jsp"> 131 请输入你的答案:<input name="<%=daan[i] %>" type="text" id="daan"maxlength="5"> 132 <br> 133 134 <% 135 } 136 %> 137 <% 138 session.setAttribute("v1",str); 139 session.setAttribute("v2",answer1); 140 %> 141 <input type="submit"value="确定"> 142 </form> 143 <% 144 } 145 %> 146 147 <% 148 if(Integer.parseInt(leixing)==2) 149 { 150 int answer; //所出题目的答案 151 String j=request.getParameter("shuliang");//出的题的数量 152 int shuliang= Integer.valueOf(j); 153 String[] str=new String[shuliang]; 154 String[] daan=new String[shuliang];//用户输入的答案 155 String[] answer1=new String[shuliang]; //计算之后的正确答案 156 157 for(int i=0;i<shuliang;i++) 158 { 159 daan[i]="name"+i; 160 str[i]=""+(int)((Math.random()*100)); //在1-100之间随机产生一个数 161 int num=(int)(Math.random()*4+2); 162 int jisuan[]=new int[num+1];//用于保存中间结果 163 jisuan[0]=Integer.parseInt(str[i]); 164 char yunsuanfu[]=new char[num+1]; 165 for(int l=1;l<num;l++) 166 { 167 int fuhao= (int)(Math.random()*4);//用1-4代表符号,随机产生数字 168 int num2=(int)(Math.random()*100); 169 jisuan[l]=num2; 170 if(fuhao==0) 171 { 172 str[i]+="+"+num2; 173 yunsuanfu[l]='+'; 174 } 175 if(fuhao==1) 176 { 177 str[i]+="-"+num2; 178 yunsuanfu[l]='-'; 179 } 180 if(fuhao==2) 181 { 182 str[i]+="*"+num2; 183 yunsuanfu[l]='*'; 184 } 185 if(fuhao==3) 186 { 187 str[i]+="/"+num2; 188 yunsuanfu[l]='/'; 189 } 190 } 191 out.print(str[i]+"<br>"); 192 for(int l=1;l<num;l++) 193 { 194 if(yunsuanfu[l]=='*') 195 { 196 jisuan[l]=jisuan[l-1]*jisuan[l]; 197 jisuan[l-1]=0; 198 yunsuanfu[l]=yunsuanfu[l-1]; 199 } 200 else if(yunsuanfu[l]=='/') 201 { 202 jisuan[l]=jisuan[l-1]/jisuan[l]; 203 jisuan[l]=0; 204 yunsuanfu[l]=yunsuanfu[l-1]; 205 } 206 } 207 for(int l=1;l<num;l++) 208 { 209 if(yunsuanfu[l]=='+') 210 { 211 jisuan[l]=jisuan[l-1]+jisuan[l]; 212 jisuan[l-1]=0; 213 } 214 else if(yunsuanfu[l]=='-') 215 { 216 jisuan[l]=jisuan[l-1]-jisuan[l]; 217 jisuan[l-1]=0; 218 } 219 } 220 answer1[i]=""+jisuan[num-1]; 221 %> 222 <br> 223 <form name="form2"method="post"action="jieguo.jsp"> 224 请输入你的答案:<input name="<%=daan[i] %>" type="text" id="daan"maxlength="5"> 225 <br> 226 <% 227 } 228 %> 229 <% 230 session.setAttribute("v1",str); 231 session.setAttribute("v2",answer1); 232 %> 233 <input type="submit"value="确定"> 234 </form> 235 <% 236 } 237 %> 238 239 <table> 240 <tr> 241 </tr> 242 </table> 243 </body> 244 </html>
编程分析总结:
这个程序连接上数据库,要求我们要完成对数据的记录,只要把结果写入到数据库中就好,这就要求我们一方面对编程要过关,还有一定的SQL语句能力,总的来说,对于我们二人感觉还是不太好做,
但是通过这个实验也掌握到了很多的东西。
两人合作的照片: