合作项目02
设计思想:
使用jsp实现java代码与网页的连接,利用数组实现数据的传输。Session对象页面的跳转功能。
源代码:
java源代码:
import java.text.DecimalFormat;//输出两位小数 import java.util.Scanner; public class test1 { static int simplify(int x,int y){ /*求两数最大公约数,用于分数化简*/ int t,xx,yy,k=1; if(x>y) { t=x;x=y;y=t; } for(int i=x;i>=2;i--) { xx=x%i;yy=y%i; if(xx==0&&yy==0) { k=i; break; } } return k; } public static void main(String[] args) { // TODO 自动生成的方法存根 int a1,a2,b1,b2,k; int count=0;//统计作对题目个数 /*控制题目个数*/ Scanner in=new Scanner(System.in); System.out.print("请输入题目个数(>0):"); int number=in.nextInt(); /*数值范围*/ System.out.print("请输入数值所取得最大值(>0):"); int max=in.nextInt(); /*判断括号*/ int backets; System.out.print("是否有括号:(0:无 1:有):"); backets=in.nextInt(); if(backets==0)//没有括号 { /*控制是否有乘除*/ System.out.print("是否有乘除法(0:无 1:有):"); int panduan; for(;;) { panduan=in.nextInt(); if(panduan==0||panduan==1) break; else panduan=in.nextInt(); } /*有无余数*/ int remainder=0; if(panduan==1) { System.out.print("是否有余数:(0:无 1:有):"); remainder=in.nextInt(); } /*算法的实现*/ for(int i=0;i<number;i++) { int index; if(panduan==0)//没有乘除法 { index=(int)(Math.random()*2); } else//有乘除法 { index=(int)(Math.random()*4); //随机产生,控制运算符 } a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); b1=(int)(Math.random()*max); b2=(int)(Math.random()*(max-1)+1); k=(int)(Math.random()*2); //控制是否是整数或分数,随机产生 if(k==0)//k=1输出整数运算 { if(index==0) //加法运算 { System.out.print(a1+"+"+b1+"="); int rs=a1+b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } if(index==1)//减法运算 { //没有负数运算 for(;;) { if(a1<b1) { a1=(int)(Math.random()*max); b1=(int)(Math.random()*max); } else break; } System.out.print(a1+"-"+b1+"="); int rs=a1-b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } if(index==2)//乘法运算 { System.out.print(a1+"*"+b1+"="); int rs=a1*b1; int result=in.nextInt(); if(result==rs) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } if(index==3)//除法运算 { for(;;) //保证是真分数 { if(a1>b1||a1==0) { a1=(int)(Math.random()*max); b1=(int)(Math.random()*max); } else break; } if(remainder==0) {//没有余数 for(;;) { //余数不为0.继续生成随机数 if(a1!=0) { //判断分母是否为0 if(b1%a1!=0&&b1<1) { a1=(int)(Math.random()*max); b1=(int)(Math.random()*max); } else break; } else a1=(int)(Math.random()*max); } } System.out.print(b1+"/"+a1+"="); String rs; if(b1==0) { rs=0+"";//结果为0,不需要化简 } int cd=simplify(b1,a1); b1=b1/cd;a1=a1/cd; if(a1==1) { rs=b1+""; } else { rs=b1+"/"+a1; } String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } else//分数计算 { /*保证是真分数*/ for(;;) { if(a1<a2) { a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); } else if(b1<b2) { b1=(int)(Math.random()*max); b2=(int)(Math.random()*(max-1)+1); } else break; } for(;;)//保证至少有一个是分数 { if(a2==1&&b2==1) { a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); b1=(int)(Math.random()*max); b2=(int)(Math.random()*(max-1)+1); } else break; } int s2=simplify(a1,a2); a1=a1/s2; a2=a2/s2; int s3=simplify(b1,b2); b1=b1/s3; b2=b2/s3; if(index==0) { /*分母不为1,分情况输出*/ if(a2!=1&&b2!=1) { System.out.print(a1+"/"+a2+"+"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=a1*b2+b1*a2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print(a1+"+"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=a1*b2+b1;//分子 int cd=simplify(molecule,denom);//最大公约数 String rs; denom=denom/cd; molecule=molecule/cd; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(a1+"/"+a2+"+"+b1+"="); int denom=a2; //分母 int molecule=a1+b1*a2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } if(index==1)//减法运算 { for(;;)//保证结果是真分数 { if(a1/a2-b1/b2<1) { a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); b1=(int)(Math.random()*max); b2=(int)(Math.random()*(max-1)+1); } else break; } if(a1/a2-b1/b2<0)//控制结果为正数 { int t1,t2; t1=a1;a1=b1;b1=t1; t2=a2;a2=b2;b2=t2; } if(a2!=1&&b2!=1) { System.out.print(a1+"/"+a2+"-"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=a1*b2-a2*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1&&b1!=1) { System.out.print(a1+"-"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=a1*b2-b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(a1+"/"+a2+"-"+b1+"="); int denom=a2; //分母 int molecule=a1-a2*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } if(index==2)//分数乘法 { if(a2!=1&&b2!=1) { System.out.println(a1+"/"+a2+"*"+b1+"/"+b2+"="); int denom=a2*b2; //分母 int molecule=a1*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1) { System.out.print(a1+"*"+b1+"/"+b2+"="); int denom=b2; //分母 int molecule=a1*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1) { System.out.print(a1+"/"+a2+"*"+b1+"="); int denom=a2; //分母 int molecule=a1*b1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } if(index==3)//分数除法 { for(;;)//保证结果是真分数 { if((a1/a2)/(b1/b2)<1) { a1=(int)(Math.random()*max); a2=(int)(Math.random()*(max-1)+1); b1=(int)(Math.random()*max+1); b2=(int)(Math.random()*(max-1)+1); } else break; } if(a2!=1&&b2!=1) { for(int kk=0;;) { //余数不为0.继续生成随机数 if(b1==0) { //判断分母是否为0 b1=(int)(Math.random()*max); } else break; } System.out.print("("+a1+"/"+a2+")"+"/"+"("+b1+"/"+b2+")"+"="); int denom=a2*b1; //分母 int molecule=a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(molecule==0) { rs=0+""; } if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(a2==1&&a1!=0) { System.out.print(a1+"/"+"("+b1+"/"+b2+")"+"="); int denom=b1; //分母 int molecule=a1*b2;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } else if(b2==1&&b1!=0) { System.out.print("("+a1+"/"+a2+")"+"/"+b1+"="); int denom=a2*b1; //分母 int molecule=a1;//分子 int cd=simplify(molecule,denom);//最大公约数 denom=denom/cd; molecule=molecule/cd; String rs; if(denom==1) { rs=molecule+""; } else rs=molecule+"/"+denom;//化简结果 String result=in.next(); if(result.equals(rs)) { count+=1; System.out.println("回答正确!"); } else { System.out.println("回答错误!"); } System.out.println("正确结果是"+rs); } } } } } else//有括号 { int szgs,fhgs,x,z,y;//szgs数字个数 fhgs符号个数 double result;//结果 int sz[]=new int[20];//数字数组 char fh[]=new char[10];//字符数组 char operate[]={'+','-','*','/'}; for(int p=0;p<number;p++) { szgs=(int)(Math.random()*2+3);//生成3-4个数字 fhgs=szgs-1;//字符个数比数字少1 float rs[]=new float[20]; float c;String s; char op[]=new char[10];//储存字符 for(y=0;y<szgs;y++) { sz[y]=(int)(Math.random()*max+1);//随机生成数 } for(y=0;y<fhgs;y++) { x=(int)(Math.random()*4);//产生0~3的随机数 控制字符 fh[y]=operate[x]; } fh[fhgs]='='; if(fhgs%2==0)//偶数个运算符 { System.out.print(sz[0]);System.out.print(fh[0]); rs[0]=sz[0];op[0]=fh[0]; int d=1; for(y=1;y<fhgs;y++) { System.out.print("("); if(fh[y]=='/'||fh[y]=='-') //判断是否是真分数和负数 { if(sz[y]<sz[y+1]) {//交换 int temp; temp=sz[y]; sz[y]=sz[y+1]; sz[y+1]=temp; System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); } else { System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); } } else { System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); } System.out.print(")"); if(fh[y]=='+') { rs[d]=sz[y]+sz[y+1]; } else if(fh[y]=='-') { rs[d]=sz[y]-sz[y+1]; } else if(fh[y]=='*') { rs[d]=sz[y]*sz[y+1]; } else if(fh[y]=='/') { c=(float)sz[y]/sz[y+1]; DecimalFormat df = new DecimalFormat("0.00");//格式化小数 s = df.format(c);//返回的是String类型 rs[d] = Float.valueOf(s); } System.out.print(fh[y+1]); op[d]=fh[y+1]; y=y+1; d=d+1; } //先算乘除 for(d=0;d<fhgs/2;d++) { if(op[d]=='*') { rs[d]=rs[d]*rs[d+1]; rs[d+1]=0; op[d]='+'; } if(op[d]=='/') { c=(float)rs[d]/rs[d+1]; DecimalFormat df = new DecimalFormat("0.00");//格式化小数 s = df.format(c);//返回的是String类型 rs[d] = Float.valueOf(s); rs[d+1]=0; op[d]='+'; } } float sum=rs[0]; //后算加减 for(int ii=0;ii<fhgs/2;ii++) { if(op[ii]=='+') { sum=sum+rs[ii+1]; } if(op[ii]=='-') { sum=sum-rs[ii+1]; } } result=in.nextDouble(); if(result==sum) { System.out.println("回答正确!"); count++; } else System.out.println("回答错误!"); System.out.println("正确结果:"+sum); } else//奇数运算符 { int id=0; for(y=0;y<fhgs;y++) { System.out.print("("); if(fh[y]=='/'||fh[y]=='-') //判断是否是真分数和负数 { if(sz[y]<sz[y+1]) { int temp; temp=sz[y]; sz[y]=sz[y+1]; sz[y+1]=temp; System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); } else { System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); } } else { System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); } System.out.print(")"); //计算括号里的结果 if(fh[y]=='+') { rs[id]=sz[y]+sz[y+1]; } else if(fh[y]=='-') { rs[id]=sz[y]-sz[y+1]; } else if(fh[y]=='*') { rs[id]=sz[y]*sz[y+1]; } else if(fh[y]=='/') { c=(float)sz[y]/sz[y+1]; DecimalFormat df = new DecimalFormat("0.00");//格式化小数 s = df.format(c);//返回的是String类型 rs[id] = Float.valueOf(s); } System.out.print(fh[y+1]); op[id]=fh[y+1]; y=y+1; id=id+1; } //先算乘除 for(id=0;id<fhgs/2;id++) { if(op[id]=='*') { rs[id]=rs[id]*rs[id+1]; rs[id+1]=0; op[id]='+'; } if(op[id]=='/') { c=(float)rs[id]/rs[id+1]; DecimalFormat df = new DecimalFormat("0.00");//格式化小数 s = df.format(c);//返回的是String类型 rs[id] = Float.valueOf(s); rs[id+1]=0; op[id]='+'; } } float sum=rs[0]; //后算加减 for(int ii=0;ii<fhgs/2;ii++) { if(op[ii]=='+') { sum=sum+rs[ii+1]; } if(op[ii]=='-') { sum=sum-rs[ii+1]; } } result=in.nextDouble(); if(result==sum) { System.out.println("回答正确!"); count=count+1; } else System.out.println("回答错误!"); System.out.println("正确结果:"+sum); } } } System.out.println("计算正确的个数:"+count); } }
运行结果:
MyHtml.html
代码:
<!DOCTYPE html> <html> <head> <title>首页</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> <style type="text/css"> h1{ font-family:华文新魏; font-size:50px; } </style> </head> <body background="image/64.jpg"> <h1 align="center">四则运算</h1> <!-- 传递参数的值给index.jsp处理 --> <form action="index.jsp" method="post"> <div align="center"><br> <span class="STYLE2">题目个数: <input name="number" type="radio" value="20" checked> 20 <input type="radio" name="number" value="40"> 40 <input type="radio" name="number" value="60"> 60 <input type="radio" name="number" value="80"> 80 <input type="radio" name="number" value="100"> 100 <br> <br> 请选择范围最大值: <input name="max" type="radio" value="10" checked> 10 <input type="radio" name="max" value="30"> 30 <input type="radio" name="max" value="50"> 50 <input type="radio" name="max" value="70"> 70 <input type="radio" name="max" value="100"> 100 <br> <!-- 多项选择,值可以有多个,在jsp中用数组保存 --> <br> 是否有括号:(0:无 1:有): <input type="radio" name="backets" value=0> 0 <input type="radio" name="backets" value=1> 1 <br> <br> 是否有乘除:(0:无 1:有): <input type="radio" name="c" value=0> 0 <input type="radio" name="panduan" value=1> 1 <br> <br> 是否有余数:(0:无 1:有): <input type="radio" name=" remainder" value=0> 0 <input type="radio" name=" remainder" value=1> 1 </span> <br> <br> <input type="submit" name="submit" value="确定" > </form> </body> </html>
index.jsp
代码:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="test5.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>答题</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body background="images/A2.jpg"> <% String[] s=new String[30]; float k[]=new float[30]; Calculate a=new Calculate(); request.setCharacterEncoding("UTF-8"); String[] max = request.getParameterValues("max"); String[] backets= request.getParameterValues("backets"); String[] panduan= request.getParameterValues("panduan"); String[] remainder=request.getParameterValues("remainder"); int number; String str1=String.value(number); int max; String str2=String.value(max); str1=request.getParameter("str1"); str2=request.getParameter("str2"); a.SetValue(str1,str2()); for(int i=0;i<number;i++){ if(backets[i].equals("1")) { a.SetValue1(1); } if(panduan[i].equals("1")) { a.SetValue2(1); } if(remainder[i].equals("1")) { a.SetValue3(1); } } %> <form action="Myjsp.jsp" method="post"> <center> <% a.main(); float temp; String[] se=new String[30]; for(int i=0;i<30;i++){ s[i]=a.cs(i); se[i]="name"; se[i]=se[i]+i; k[i]=a.css(i); out.print("<tr>"+s[i]+"</tr>"); out.println("<br>"); %> <input type="text" name=<%=se[i] %>><br> <% } session.setAttribute( "v1",s); session.setAttribute( "v2",k); %> <br><input type="submit" name="submit" value="提交"> </center> </form> </body> </html>
运行结果截图:
编程总结:
总的来说只是实现了用Java实现部分功能,还没有将代码改成网页,在程序嵌入到网页过程中,我们遇到了很多困难,再加上对jsp和session语法掌握不熟悉,虽然参考了网上的已有程序但是并没能实现其功能。
周活动总结表
姓名:黄丽萍 日期 2016/4/8
|
听课 |
编写代码 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
50 |
|
|
|
|
50 |
周二 |
100 |
60 |
|
|
|
|
160 |
周三 |
|
22 |
|
|
|
|
22 |
周四 |
|
30 |
|
|
|
|
30 |
周五 |
|
100 |
|
|
|
|
160 |
周六 |
|
|
23 |
|
|
|
23 |
周总计 |
100 |
262 |
23 |
|
|
|
385 |
时间记录日志
学生:黄丽萍 日期:2016/4/8
教师:王建民 课程:软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
4/4 |
4:32 |
7:00 |
18 |
130 |
编程序 |
休息 |
|
|
4/5 |
14:00 |
16:50 |
100 |
10 |
听课 |
课间休息 |
|
|
|
19:00 |
20:50 |
15 |
100 |
讨论,编程序 |
讨论,共同写程序 聊天 |
|
|
4/6 |
16:30 |
18:00 |
10+10 |
70 |
编程序 |
作业,玩手机,休息 |
|
|
4/7 |
16:30 |
17:30 |
10 |
50 |
编程序 写报告 |
查资料 |
|
|
4/8 |
19:00 |
23:00 |
30+15+20 |
175 |
编程序写报告 |
停电休息,玩手机,休息 |
|
|