四则运算04
设计思想:
使用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 |
编程序写报告 |
停电休息,玩手机,休息 |
|
|
浙公网安备 33010602011771号