1.设计思想:
①在第一个HTML文件中询问出题要求:
1>打印的运算式数量;
2>运算数值的上界、下界;
3>是否有乘除;
4>是否有负数。
②如若出现input框中未输入的情况,则弹出消息框来提示,否则,跳转第二个界面,来进行运算式的输出;
③跳转到第二个页面后,利用JSP先得到第一个页面中输入的值,并保存在几个变量中。之后再使用javascript,保存各个值;
④通过已经输入的值来判断运算符号和数值范围;
⑤使用循环语句,循环次数为打印的运算式数量,第i次循环中,首先随机产生运算式子中的数字和运算符,和前面已经生成的式子加以比较,若重复,则重新产生,还需判断
1>除号后是否具有0
2>计算过程中不能出现负数
3>若有除法则结果必须为真分数
并进行运算产生结果,保存到result中;
⑥弹出对话框,输出已经产生的运算式,并让用户输入正确结果,进行判断,输出正误,再返回第⑤步,直至循环结束;
⑦最后输出答对的题数。
2.源程序代码
①First.html
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>自动出题器</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 function check() { 10 var number = document.getElementById("number").value; 11 var max = document.getElementById("max").value; 12 var min = document.getElementById("min").value; 13 14 if (number == "") 15 { 16 alert("运算式数量不能为空"); 17 } 18 else if (max == "") 19 { 20 alert("上界不能为空"); 21 } 22 else if (min == "") 23 { 24 alert("下界不能为空"); 25 } 26 else if(number<=0) 27 { 28 alert("运算式数量应该大于0"); 29 } 30 else if(max<min) 31 { 32 alert("上界应该大于下界"); 33 } 34 else 35 { 36 document.baseForm.submit1(); 37 } 38 } 39 </script> 40 41 <form action="Second.jsp" name="baseForm" id="baseForm" method="post"> 42 <fieldset name="Group1" style="100%"> 43 <legend><strong>请选择出题要求:</strong></legend> 44 <p> 打印的运算式数量 <input name="number" type="text" size="20"></p> 45 <p> 运算数值的上界 <input name="max" type="text" size="20"></p> 46 <p> 运算数值的下界 <input name="min" type="text" size="20"></p> 47 <p> 请选择运算式条件:</p> 48 <p> 是否有乘除 <input name="symbol" type="radio" value="true">是 49 <input name="symbol" type="radio" value="false">否</p> 50 <p>加减有无负数 <input name="negative" type="radio" value="true">是 51 <input name="negative" type="radio" value="false">否</p> 52 </fieldset> 53 <p> <input name="submit" type="submit" value="提交" onclick="check()"> 54 <input name="reset" type="reset" value="重置"></p> 55 </form> 56 </body> 57 </html>
②Second.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=usf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <% 11 String number1 =request.getParameter("number"); 12 String max1 = request.getParameter("max"); 13 String min1 = request.getParameter("min"); 14 String symbol = request.getParameter("symbol"); 15 String negative = request.getParameter("negative"); 16 int number=Integer.parseInt(number1); 17 int max=Integer.parseInt(max1); 18 int min=Integer.parseInt(min1); 19 20 out.println(number1); 21 %> 22 <script type="text/javascript"> 23 var number = document.getElementById("number1").value; 24 var max = document.getElementById("max1").value; 25 var min = document.getElementById("min1").value; 26 var symbol = document.getElementById("symbol").value; 27 var negative = document.getElementById("negative").value; 28 document.writeIn(number); 29 30 var number =number1; 31 32 var symbollist[4]; 33 if(symbol==true) 34 { 35 symbollist[0]='+'; 36 symbollist[1]='-'; 37 symbollist[2]='*'; 38 symbollist[3]='/'; 39 } 40 else 41 { 42 symbollist[0]='+'; 43 symbollist[1]='-'; 44 symbollist[2]='+'; 45 symbollist[3]='-'; 46 } 47 48 if(negative==false) 49 { 50 if(min<0) 51 { 52 min=0; 53 } 54 } 55 56 var space[number][4]; 57 var correctNumber=0; 58 59 for(time=0;time<number;) 60 { 61 var space1[]; 62 for(var i=0;i<4;i++) 63 { 64 space[time][i]=(Math.random()*(max-min+1)+min); 65 space1[i]=space[time][i]; 66 } 67 68 //判断所生成的数组中是否和之前产生的数组完全一致 69 var flag=1; 70 for(var i=0;i<time;i++) 71 { 72 for(var j=0;j<4;j++) 73 { 74 if(space[time][j]==space[i][j]) 75 { 76 flag=0; 77 } 78 else 79 { 80 flag=1; 81 } 82 } 83 } 84 85 //随机决定下面要产生的式子是由几个数字构成的 86 var s = (Math.random()*(4-2+1)+2); 87 88 //随机运算符 89 var p[s-1]; 90 for(var i=0;i<s-1;i++) 91 { 92 var symtime = (Math.random()*(3-0+1)+0); 93 p[i]=symbollist[symtime]; 94 } 95 96 //除号后不能有0的存在 97 for(var i=0;i<s-1;i++) 98 { 99 if(p[i]=='/'&&space[time][i+1]==0) 100 { 101 flag=0; 102 break; 103 } 104 } 105 106 //计算过程中不能出现负数,若有除法则结果必须为真分数 107 var realResult; 108 109 for(var i=0;i<s-1;i++) 110 { 111 if(p[i]=='*') 112 { 113 if(p[i+1]=='+'||p[i+1]=='-') 114 { 115 space1[i]=space1[i]*space[i+1]; 116 space1[i+1]=0; 117 p[i]='+'; 118 } 119 else if(p[i+1]=='*'||p[i+1]=='/') 120 { 121 space1[i+1]=space1[i]*space1[i+1]; 122 space1[i]=0; 123 p[i]='+'; 124 } 125 } 126 else if(p[i]=='/') 127 { 128 if(space1[i]>space1[i+1]) 129 { 130 flag=0; 131 break; 132 } 133 else if(p[i+1]=='+'||p[i+1]=='-') 134 { 135 space1[i]=space1[i]/space[i+1]; 136 space1[i+1]=0; 137 p[i]='+'; 138 } 139 else if(p[i+1]=='*'||p[i+1]=='/') 140 { 141 space1[i+1]=space1[i]/space1[i+1]; 142 space1[i]=0; 143 p[i]='+'; 144 } 145 } 146 } 147 148 if(flag==1) 149 { 150 var result; 151 152 //计算结果 153 realResult=space1[0]; 154 for(var i=0;i<s-1;i++) 155 { 156 if(p[i]=='+') 157 { 158 realResult=realResult+space1[i+1]; 159 } 160 else if(p[i]=='-') 161 { 162 realResult=realResult-space1[i+1]; 163 } 164 } 165 166 if(s==2) 167 { 168 result=prompt(space[time][0]+p[0]+space[time][1]+" 请输入您认为正确的结果:",""); 169 document.write(space[time][0]+p[0]+space[time][1]+" = "+result); 170 } 171 else if(s==3) 172 { 173 result=prompt(space[time][0]+p[0]+space[time][1]+p[1]+space[time][2]+" 请输入您认为正确的结果:",""); 174 document.write(space[time][0]+p[0]+space[time][1]+p[1]+space[time][2]+" = "+result); 175 } 176 else if(s==4) 177 { 178 result=prompt(space[time][0]+p[0]+space[time][1]+p[1]+space[time][2]+p[2]+space[time][3]+" 请输入您认为正确的结果:",""); 179 document.write(space[time][0]+p[0]+space[time][1]+p[1]+space[time][2]+p[2]+space[time][3]+" = "+result); 180 } 181 182 if(result==realResult) 183 { 184 document.write(" 计算结果正确。"+" ") 185 correctNumber++; 186 } 187 else 188 { 189 document.write(" 计算结果错误,正确答案是:"+realReasult+" "); 190 } 191 192 time++; 193 } 194 } 195 196 document.write("您答对的题数为"+correctNumber+" "); 197 </script> 198 199 </body> 200 </html>
3.运行结果截图
4.编程总结分析
经过这次将java程序转移成为网页版,我感觉到了做中学的深刻含义,我们不可能什么都会,手头的书本也都是一大本一大本,不可能在有限的几天的时间内把需要用的所有工具,比如这次的java,html,jsp,javascript全都精通,我们能做的就是一边做,一边使用工具书和网络来查找我们需要的技术,这样既能让我们大概了解一门技术,又可以让我们在短时间内掌握其中的精益,学到我们最需要的东西,做中学有它存在的意义。
5.项目计划预计
First | Second | |
预计时间 | 100 | 240 |
6.项目计划总结
听课 | 编写程序 | 阅读课本 | 准备考试 | 日总结 | |
周日 | |||||
周一 | 60 | 60 | |||
周二 | 120 | 120 | |||
周三 | 60 | 60 | |||
周四 | |||||
周五 | 30 | 30 | |||
周六 | 270 | 270 | |||
周总结 | 120 | 330 | 90 | 540 |
7.时间记录日志:
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
4/4 | 10:00 | 11:30 | 30 | 60 | 看书 | 构建之法 |
4/5 | 14:00 | 16:10 | 10 | 120 | 上课 | |
4/6 | 4:00 | 5:00 | 60 | 写程序 | ||
4/8 | 17:00 | 17:30 | 30 | 读书 | ||
4/9 | 10:00 | 11:30 | 90 | 写程序 | ||
14:00 | 17:30 | 180 | 写程序 | |||
8.缺陷记录日志:
日期 | 编号 | 引入阶段 | 排除阶段 | 描述 |
4/9 | 01 | 编码 | 编码 | html语句中的input框的type值有多种,要使用对应需要的形式 |
02 | 编码 | 编码 | 在javascript中变量只具有一种类型,那就是var,它可以表示int、string、char等多种类型 | |
03 | 设计 | 设计 | 应该同时将jsp和javascript结合使用,才可以将功能完善 | |
04 | 设计 | 设计 | 需要判断在提交时,是否有输入框未进行输入值,若有,则需要提示并重新输入 |