coding.net:https://git.oschina.net/ysh0904/WEB.git

一、需求分析

  1. 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
  2. 有计时功能,能显示用户开始答题后的消耗时间。
  3. 界面支持中文简体/中文繁体/英语,用户可以选择一种;

二、查询设计

三、代码

l="";
int b=0;
String s = null;
int x=1+(int)(Math.random()*9);
int x2=(int)(Math.random()*4);
switch(x2){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
l1=s;
int x3=1+(int)(Math.random()*9);
l=l+x+s+x3;
int x4=(int)(Math.random()*4);
switch(x4){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
l2=s;
int x5=1+(int)(Math.random()*9);
l=l+s+x5;
int x6=(int)(Math.random()*4);
switch(x6){
case 0:s="-";break;
case 1:s="+";break;
case 2:s="*";break;
case 3:s="/";break;
}
l3=s;
int x7=1+(int)(Math.random()*9);
l=l+s+x7;//产生随机题目
a1=x;
a2=x3;
a3=x5;
a4=x7;
p=p+1;
request.setAttribute("diji", p);//显示第几题
System.out.println(l);
request.setAttribute("timu", l);//将题目保留在request让下个页面可以回去timu
request.getRequestDispatcher("/jisuan.jsp").forward(request, response);//转发到jisuan.jsp页面

//难度一,二,三基本一样就不写了

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByExtension("js");
request.setAttribute("diji", p);
Object p=request.getParameter("daan");
String m1=(String) p;
System.out.println(p);
System.out.println(m1);
Object result1 = null;
try {
result1 = engine.eval(m1);
} catch (ScriptException e) {
request.setAttribute("timu", l);
request.setAttribute("message", "你输入的答案不符合要求,请重新输入");
request.getRequestDispatcher("/cuode.jsp").forward(request, response);
}//用户输入的如果不合要求的处理方法

if(l1.equals("/")&&l3.equals("/")){
if(l2.equals("+")||l2.equals("-")){
l="("+a1+"*"+a4+"+"+a2+"*"+a3+")"+"/"+"("+a3+"*"+a4+")"+"";
}else if(l2.equals("*")){
l="("+a1+"*"+a3+")"+"/"+"("+a2+"*"+a4+")"+"";
}else{
l=a1+"/"+"("+a2+"*"+a3+"*"+a4+")"+"";
}
}
if(l1.equals("/")&&!l3.equals("/")){
if(l2.equals("*")&&l3.equals("+")){
l=a1+"*"+a3+"/"+a2+l3+a4;
}if(l2.equals("*")&&l3.equals("-")){
l="("+a1+l2+a3+l3+a4+l2+a2+")"+l1+a2;
}
if(l2.equals("/")&&l3.equals("*")){
l=a1+l3+a4+l2+"("+a2+"*"+a3+")";
}if(l2.equals("/")&&l3.equals("+")){
l=a1+l1+"("+a2+"*"+a3+")"+l3+a4;
}if(l2.equals("/")&&l3.equals("-")){
l="("+a1+l3+a4+"*"+a2+"*"+a3+")"+l1+"("+a2+"*"+a3+")";
}if(l2.equals("-")&&l3.equals("*")){
l="("+a1+l2+"("+a3+l3+a4+")"+"*"+a2+")"+l1+a2;
}
}
if(l2.equals("/")){
if(l1.equals("-")&&l3.equals("*")){
l="("+a1+l3+a3+l1+a2+l3+a4+")"+l2+a3;
}if(l1.equals("-")&&l3.equals("/")){
l="("+a1+"*"+a3+"*"+a4+l1+a2+")"+l2+a3+"*"+a4;
}if(l1.equals("-")&&l3.equals("+")){
l="("+a1+"*"+a3+l1+a2+")"+l2+a3+l3+a4;
}if(l1.equals("-")&&l3.equals("-")){
l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3;
}if(l1.equals("*")&&l3.equals("-")){
l="("+a1+l1+a2+l3+a3+l1+a4+")"+l2+a3;
}if(l1.equals("/")&&l3.equals("-")){
l="("+a1+l3+a2+"*"+a3+"*"+a4+")"+l2+"("+a2+"*"+a3+")";
}if(l1.equals("+")&&l3.equals("-")){
l="("+"("+a1+l3+a4+")"+"*"+a3+l1+a2+")"+l2+a3;
}
}
if(l3.equals("/")){
if(l1.equals("-")&&l2.equals("*")){
l="("+a1+l2+a4+l1+a2+l2+a4+")"+l3+a4;
}if(l1.equals("-")&&l2.equals("-")){
l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4;
}if(l1.equals("-")&&l2.equals("+")){
l="("+a1+"*"+a4+l1+a2+"*"+a4+")"+l3+a4;
}if(l1.equals("*")&&l2.equals("-")){
l="("+a1+l1+a2+l1+a4+l2+a3+")"+l3+a4;
}
}//遇到除法的处理方式

Object result = null;
try {
result = engine.eval(l);
} catch (ScriptException e1) {
e1.printStackTrace();
}
if(result1.equals(result)){
String m="输入正确"+result;
request.setAttribute("jieguo", m);
k=k+1;
}else{
String m="输入不正确"+result;
request.setAttribute("jieguo", m);
y=y+1;
}//答案的核对

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String servletPath=request.getServletPath();
String methodName=servletPath.substring(1);
methodName=methodName.substring(0, methodName.length()-3);

try {
Method method=getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this, request,response);
} catch (Exception e) {
e.printStackTrace();
}
}

//Servlet内构建方法必须的

time1=request.getSession().getAttribute("kssj");
Object time2=request.getSession().getAttribute("jssj");
String m3="你做对了"+k;
String m4="你做错了"+y;
request.getSession().setAttribute("hh", m3);
request.getSession().setAttribute("hh1", m4);
System.out.println(k);
System.out.println(y);
System.out.println(time1);
System.out.println(time2);

Object y=session.getAttribute("hh");
Object k=session.getAttribute("hh1");

application.setAttribute("zuodui", y);
application.setAttribute("zuocuo", k);

//获取做对和做错的题目和时间,并且用application保留

<%
Date date=new Date();
out.println(date);
session.setAttribute("kssj", date);
%>

//日期的显示
<br><br>
<a href="save.do">难度一</a>
<br><br>
<a href="save1.do">难度二</a>
<br><br>
<a href="save2.do">难度三</a>

//调用Servlet的save,save1,save2的方法

<%
Date date=new Date();
out.println(date);//当前的时间显示
out.println("<br><br>");
Object p=request.getAttribute("diji");//读取第几的信息
out.println("第"+p+"题目");

%>

<br><br>
<form action="jisuan.do">//调用sevelet的jisuan方法
timu:<input type="text" name="timu" value="${requestScope.timu }" />
<br><br>
daan:<input type="text" name="daan" />
<br><br>
jiegou:<input type="text" name="jiegou" value="${requestScope.jieguo }" />
<br><br>
<input type="submit" name="queding" />//一个按钮键的设置
</form>

//定义了3个属性,并且获取了timu和jieguo属性的值

Date date=new Date();
out.println(date);
out.println("<br><br>");

Object p1=request.getAttribute("message");
if(!p1.equals(null)){
out.println(p1);
out.println("<br><br>");
}
Object p=request.getAttribute("diji");
out.println("第"+p+"题目");

//如果输入的答案不合适会显示这个页面并让用户重修输入

Object time=session.getAttribute("jssj");
Object time1=session.getAttribute("kssj");
Date l=(Date)time;
Date l2=(Date)time1;
long l1=(l.getTime()-l2.getTime())/1000;

//时间的计算方法以秒为单位

//中英文切换

四、程序运行

题目有累加,时间只有显示此次的时间

PSP

五.配合方式

1.代码部分2个一起讨论,主要框架我写,世豪主要查找一些遇到问题要解决的难题,如怎么把做对的题目和做错的题目保留到下一次,和时间的计算等。

2.代码我主要运行,世豪主要看运行结果有什么需要改进的,如刚开始用session获取做对的题目和做错的题目,在其他浏览器又打开该页面时,会继续保留数据,但是都关掉就不行了,在提醒是用了application。还有我忘记中英文替换,在提醒下完成了替换等。

3.界面的审美主要有世豪来改善。

六.专业结论

1.每个人想的都会用不完整和想不到,有人合作比较容易解决;

2.2个人都不能太强硬或太退让,这样容易导致问题,所以合作时,该强硬就强硬,该退让还是得退让;

3.每个人都不会不同的想法应该整合2个人的想法,或者2种方法都要尝试一下;

4.每个都会认为自己弄得很好了,所以需要有人来评价;应该虚心接受;

5.虽然中间会产生矛盾,但是最后还是有个不错的结果的(属性定义时,有时候随意时就会出现异常或者错误时,2个人矛盾就起来了,特别是2个人都坚持自己是对的时候)。

七.图片

四则运算 WEB的更多相关文章

  1. 四则运算web版需求规格说明书

    目录 1引言... 4 1.1  目的... 4 1.2  背景... 4 1.3  术语... 4 1.4  预期读者与阅读建议... 5 1.5  参考资料... 6 1.6  需求描述约定... ...

  2. 四则运算web最终版

    经过若干时间的奋战,终于完成了web版四则运算程序.团队成员:井小普.张贺. 设计思想: 在之前的程序基础上两人结合开发web系统. 首先,进行登录注册界面的编写,不同用户,对应不同的错题库,答题记录 ...

  3. 结对项目作业报告——四则运算web项目

    成员:顾思宇2016011993 程羚2016012050   1.仓库地址:https://git.coding.net/DandelionClaw/WEB_Calculator.git 注: 本项 ...

  4. 结对项目:四则运算web

    1)Coding.Net项目地址 https://git.coding.net/DandelionClaw/WEB_Calculator.git 注:本项目为web端,并且需要连接SQL Server ...

  5. 四则运算web版

    1)在文章开头给出Coding.Net项目地址.(1') https://git.coding.net/meiyoupiqidefan/jieduizuoye.git url测试地址:http://3 ...

  6. 展示博客(Beta版本)

    团队:xjbz 1. 团队成员博客,源码仓库地址. coding:https://git.coding.net/z404395979/xjbz.git 钟平辉(071):http://www.cnbl ...

  7. 第三周结对项目--小学生四则运算CAI软件汇报及总结(UI/web)

    前言: 这周是和我队友苏卫喜一起结对开发,我主要是写项目文档需求分析,她是通过我的需求文档来进行做思维导图,之后我们通过思维导图一起讨论用户界面设计. 以下就是我的需求分析1.0版本 1.   软件名 ...

  8. 四则运算4 WEB(结对开发)

    在第三次实验的基础上,teacher又对此提出了新的要求,实现网页版或安卓的四则运算. 结对开发的伙伴: 博客名:Mr.缪 姓名:缪金敏 链接:http://www.cnblogs.com/miaoj ...

  9. web四则运算

    目录 1.coding.net地址 2.PSP 3.Information Hiding, Interface Design, Loose Coupling 4.计算模块接口的设计与实现过程 5.计算 ...

随机推荐

  1. 普通程序员如何入门AI

    毫无疑问,人工智能是目前整个互联网领域最火的行业,随着AlphaGo战胜世界围棋冠军,以及各种无人驾驶.智能家居项目的布道,人们已经意识到了AI就是下一个风口.当然,程序员是我见过对于新技术最敏感的一 ...

  2. python学习===将py文件从打包成exe程序

    1.进入要打包的py程序所在文件夹,例如hello.py程序要打包. 2.在同一目录下新建文件setup.py,内容如下: from distutils.core import setup impor ...

  3. 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

    前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...

  4. linux 编译安装详解

    相信大家大多都听过linux 的编译安装,但它到底是怎么把源代码变为自己电脑里可以应用的软件哪?今天,小编就以httpd 为例详细讲解一下. 什么是编译安装--编译:将源代码变为机器可执行的代码文件. ...

  5. MAC下的Intellij IDEA常用快捷键

    MAC下的Intellij IDEA常用快捷键 alt+f7 : 查找在哪里使用 相当于eclipse的ctrl+shift+G command+alt+f7 : 这个是查找选中的字符在工程中出现的地 ...

  6. KMS注册

    --KMS注册 -------------2014/03/25 --Read this First http://social.technet.microsoft.com/wiki/contents/ ...

  7. leetcode 总结part1

    从十月份开始到现在,差不多近3个月时间吧. 中间有的时候有事没有办法刷题,也有的题目比较难,比较麻烦,会浪费很多时间,71道题,也都是简单的. 下图是最后20道刷题的记录吧. 完成自己的目标是轻松的. ...

  8. java多线程基础(synchronize关键字)

    [toc] 基础知识 ---- 线程:进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元. 线程:进程中所包含的一个或多个执行单元称为线程(threa ...

  9. 【Oracle】控制文件管理

    /* 控制文件是oracle数据库最重要的物理文件之一,每个oracle数据库都必须有一个控制文件,在启动数据库实例时, oracle会根据初始化参数查找到控制文件的名称及位置信息,并读取控制文件的内 ...

  10. BotVS配置托管者-基于阿里云

    1. 上传Linux 64位 托管者并解压在 https://www.botvs.com/m/add-node 上下载Linux 64位 托管者, 当前下载地址 https://dn-botvs.qb ...