土壤质地标准转换程序Java MVC模式
本程序主要简单实现土壤质地标准的转换,即美国制,国际制,中国制,苏联制之间的相互转换,为了简便起见,本程序只分为黏粒,粉粒,砂粒三大类。
本程序的效果如下:
程序的eclipse界面
本程序采用了mvc模式。程序组织结构为:
A.soil.html为网页界面;
B.receivedata.js为嵌入soil.html的JavaScript,采用ajax来接收用户输入的参数,将参数传至servlet,并接收servlet传来的结果,再将结果显示在HTML的文本框中;
C.包servlet下的controlServlet.java即为控制层,用来接收ajax传来的用户参数,并将这些参数传至模型层Convert.java进行处理,并获取Convert.java处理结果,再将结果传至ajax;
D.Convert.java为本程序的核心,即为一个Java类。实现土壤质地标准的转换;
程序实现如下:
soil.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>土壤类型转换</title>
<link rel="stylesheet" type="text/css" href="reg.css">
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript">
</script>
</head>
<body>
<p align="left" style="width:530px;line-height:22px"><strong>土壤质地标准转换</strong>:可以实现国际制,美国制,苏联制,中国制这四种不同土壤质地划分标准的相互转换。本程序将土壤质地划分为黏粒,粉粒,砂粒三大类,输入某类标准下的黏粒,粉粒,砂粒的百分比含量即可得出目标标准制度下的百分比含量。</p>
<div id="reg">
<table width="98%" border="0" align="center" cellpadding="3" cellspacing="1">
<caption>土壤质地标准转换</caption>
<tr>
<td align="right"><span class="style">请选择所使用的类型:</span></td>
<td>
<span class="style">
<select id="selectid1">
<option value="1" selected>国际制</option>
<option value="2">美国制</option>
<option value="3">苏联制</option>
<option value="4">中国制</option>
</select>
</span>
</td>
</tr>
<form name="form1" id="form1">
<tr>
<td align="right" class="style">请输入百分比含量:</td>
<td class="style">黏粒:<input id="clayInput" type="text" size="10"></td>
<td class="style">粉粒:<input id="particalInput" type="text" size="10"></td>
<td class="style">砂粒:<input id="sandInput" type="text" size="10"></td>
</tr>
</form>
<tr>
<td align="right" class="style">请选择结果类型:</td>
<td>
<span class="style">
<select id ="selectid2">
<option value="5" selected>国际制</option>
<option value="6">美国制</option>
<option value="7">苏联制</option>
<option value="8">中国制</option>
</select>
</span>
</td>
</tr>
<tr>
<td align="right" class="style">输出结果:</td>
<td class="style">黏粒:<input id="clayOut" type="text" size="10"></td>
<td class="style">粉粒:<input id="particalOut" type="text" size="10"></td>
<td class="style">砂粒:<input id="sandOut" type="text" size="10"></td>
</tr>
<tbody align="right">
<tr>
<td> </td>
<td> </td>
<td> </td>
<td>
<input type="button" id="submit" name="submit" value="提交" />
<input type = "reset" id = "reset" name = "reset" onclick="javascript:document.form1.reset();" value = "重置">
</td>
</tr>
<tfoot align="right">
<tr>
<td colspan="4"><font size="-1">注:文本框中输入数值即可,无需输入百分号,转换结果保留两位小数</font></td>
</tr>
</tfoot>
</tbody>
</table>
</div>
<table width="98%" border="0" align="center" cellpadding="3" cellspacing="1">
<tr>
<td > </td>
<td align="center"><span id="msg"></span></td>
</tr>
</table>
</body>
<script src="jquery-2.1.1.min.js"></script>
<script src="receivedata.js"></script>
</html>
receivedata.js
$('#submit').on('click', function()//点击提交按钮
{
var clayInput = document.getElementById("clayInput").value;//获取用户输入的黏粒数值
var particalInput = document.getElementById("particalInput").value;//用户输入的粉粒数值
var sandInput = document.getElementById("sandInput").value;//砂粒
var selectoption=$("#selectid1").val();//用户选择的制度标准
var selectoption2=$("#selectid2").val();
//data为ajax传送给servlet的参数
var data="clay=" + clayInput + "&partical=" + particalInput + "&sand=" + sandInput+"&select1=" +selectoption+"&selectTarget="+selectoption2;
//用户输入参数不合法的处理
if(clayInput<0 || clayInput>100||particalInput<0||particalInput>100||sandInput<0||sandInput>100){ $("#msg").html("<font color=red>请输入0~100之间的数值!");return;}
if((parseFloat(clayInput) + parseFloat(particalInput) + parseFloat(sandInput))>100){$("#msg").html("<font color=red>输入数值总和应小于100!");return;}
if(clayInput==""|| particalInput==""||sandInput==""){$("#msg").html("<font color=red>数值不能为空!");return;}
if(isNaN(clayInput)||isNaN(particalInput)||isNaN(sandInput)){$("#msg").html("<font color=red>输入数据必须为数字!");return;}
//用户输入合法时程序的处理
if(clayInput && particalInput && sandInput)
{
$("#msg").html("");
var xmlHttpRequest=null;
if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();
}
if(null!=xmlHttp)
{
var url="./controlServlet?timeStamp=" + new Date().getTime();
xmlHttp.open("POST",url,true); //采用post方式提交
xmlHttp.onreadystatechange=handleStateChange;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(data); //传送参数data
}
}
});
//当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。
//当 readyState 等于 4 且状态为 200 时,表示响应已就绪
function handleStateChange()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200) //请求成功
{
parseResults();
}
}
}
function parseResults() //解析后台传回的数据
{
var responseText=document.createTextNode(xmlHttp.responseText);
//alert("后台返回的返回值: "+xmlHttp.responseText);
var field=xmlHttp.responseText.split(" ");
$("#clayOut").attr("value",field[0]);
$("#particalOut").attr("value",field[1]);
$("#sandOut").attr("value",field[2]);
}
controlServlet.java
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.Convert;//引入Convert.java
/**
* Servlet implementation class controlServlet
*/
@WebServlet("/controlServlet")
public class controlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public controlServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
java.io.PrintWriter out = response.getWriter();
String clayInput = request.getParameter("clay");//获取ajax传来的参数
String particalInput = request.getParameter("partical");
String sandInput = request.getParameter("sand");
String standard = request.getParameter("select1");
String standard2 = request.getParameter("selectTarget");
Convert convert = new Convert(clayInput, particalInput, sandInput, standard, standard2);//实例化对象
String result = convert.selectStandard();
out.println(result);
//request.setAttribute("result", result);
//RequestDispatcher requestDispatcher = request.getRequestDispatcher("soil.html");
//requestDispatcher.forward(request, response);
}
}
Convert.java
package servlet;
import java.text.NumberFormat ;
public class Convert
{
private String clayInput=null;
private String particalInput=null;
private String sandInput=null;
private String standard=null;
private String standard2=null;
// variable used to print in html
public String clayOut = null;
public String particalOut = null;
public String sandOut = null;
public Convert(String clayInput,String particalInput,String sandInput,String standard,String standard2)
{
this.setclayInput(clayInput);
this.setparticalInput(particalInput);
this.setsandInput(sandInput);
this.setstandard(standard);
this.setstandard2(standard2);
}
public void setclayInput(String clayInput)
{
this.clayInput=clayInput;
}
public String getclayInput() {
return clayInput;
}
public void setparticalInput(String particalInput)
{
this.particalInput=particalInput;
}
public String getparticalInput() {
return particalInput;
}
public void setsandInput(String sandInput)
{
this.sandInput=sandInput;
}
public String getsandInput() {
return sandInput;
}
public void setstandard(String standard)
{
this.standard=standard;
}
public String getstandard() {
return standard;
}
public void setstandard2(String standard2)
{
this.standard2=standard2;
}
public String getstandard2() {
return standard2;
}
public String selectStandard()
{
clayInput = clayInput.trim();
particalInput = particalInput.trim();
sandInput = sandInput.trim();
double clayInput1 = Double.parseDouble(clayInput);
double particalInput1 = Double.parseDouble(particalInput);
double sandInput1 = Double.parseDouble(sandInput);
NumberFormat f=NumberFormat.getInstance();
f.setMaximumFractionDigits(2);
String result = null;
if((standard.equals("1") && standard2.equals("5"))||(standard.equals("2") && standard2.equals("6"))||(standard.equals("3") && standard2.equals("7"))||(standard.equals("4") && standard2.equals("8")))//same to same
{
clayOut = clayInput;
particalOut = particalInput;
sandOut = sandInput;
result= clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("1") && standard2.equals("6"))//inter to usa
{
clayOut = clayInput;
particalOut = f.format(particalInput1+sandInput1*0.015);
sandOut = f.format(sandInput1*0.985);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("1") && standard2.equals("7"))//inter to ussr
{
clayOut=f.format(clayInput1*0.5);
particalOut = f.format(particalInput1+clayInput1*0.5+sandInput1*0.015);
sandOut=f.format(sandInput1*0.48);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("1") && standard2.equals("8"))//inter to China
{
clayOut = f.format(clayInput1+particalInput1*0.167);
particalOut = f.format(particalInput1*0.833+sandInput1*0.015);
sandOut = f.format(sandInput1*0.48);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("2") && standard2.equals("5"))//usa to inter
{
clayOut = clayInput;
particalOut = f.format(particalInput1*0.375);
sandOut = f.format(sandInput1+particalInput1*0.625);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("2") && standard2.equals("7"))//usa to ussr
{
clayOut = f.format(clayInput1*0.5);
particalOut = f.format(clayInput1*0.5+particalInput1);
sandOut = f.format(sandInput1*0.487);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("2") && standard2.equals("8"))//usa to china
{
clayOut = f.format(clayInput1+particalInput1*0.0625);
particalOut = f.format(particalInput1*0.9375);
sandOut = f.format(sandInput1*0.487);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("3") && standard2.equals("5"))//ussr to inter
{
clayOut = f.format(clayInput1+particalInput1*0.0204);
particalOut = f.format(particalInput1*0.367);
sandOut = f.format(particalInput1*0.612+sandInput1);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("3") && standard2.equals("6"))//ussr to usa
{
clayOut = f.format(clayInput1+particalInput1*0.0204);
particalOut = f.format(particalInput1*0.9796);
sandOut = sandInput;
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("3") && standard2.equals("8"))//ussr to China
{
clayOut = f.format(clayInput1+particalInput1*0.0816);
particalOut = f.format(particalInput1*0.918);
sandOut = sandInput;
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("4") && standard2.equals("5"))//China to inter
{
clayOut = f.format(clayInput1*0.4);
particalOut = f.format(clayInput1*0.6+particalInput1*0.3333);
sandOut = f.format(sandInput1+particalInput1*0.666);
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("4") && standard2.equals("6"))//China to usa
{
clayOut = f.format(clayInput1*0.4);
particalOut = f.format(clayInput1*0.6+particalInput1);
sandOut = sandInput;
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
if(standard.equals("4") && standard2.equals("7"))//China to ussr
{
clayOut = f.format(clayInput1*0.2);
particalOut = f.format(clayInput1*0.8+particalInput1);
sandOut = sandInput;
result=clayOut+" "+particalOut+" "+sandOut;
//return result;
}
return result;
}
}
程序中使用了jquery,需要引入相应文件,如jquery-2.1.1.min.js