寫個簡單到不行的WEB計算器

//因爲很簡單,所以不採用MVC模式
//先寫個JavaBean包

package cn.itcast.bean;


import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class CaculatorBean {
    //定義第一個數字
    private String firstNum;
    //定義第二個數字
    private String secNum;
    //定義運算符
    private char operator;
    //定義報錯處理方法
    private Map<String,String> errors = new HashMap<String,String>();
    //實現所有的GETTER和SETTER
    public Map<String, String> getErrors() {
        return errors;
    }
    public void setErrors(Map<String, String> errors) {
        this.errors = errors;
    }

    public String getFirstNum() {
        return firstNum;
    }
    public void setFirstNum(String firstNum) {
        this.firstNum = firstNum;
    }
    public String getSecNum() {
        return secNum;
    }
    public void setSecNum(String secNum) {
        this.secNum = secNum;
    }
    public char getOperator() {
        return operator;
    }
    public void setOperator(char operator) {
        this.operator = operator;
    }
    //實現運算的方法
    public String caculate(){
        /**
         * Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。
         * 雙精度浮點型變量double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。
         * float和double只能用來做科學計算或者是工程計算,在商業計算中要用java.math.BigDecimal。BigDecimal所創建的是對象,
         * 我們不能使用傳統的+、-、*、/等算術運算符直接對其對象進行數學運算,而必須調用其相對應的方法。
         * 方法中的參數也必須是BigDecimal的對象。構造器是類的特殊方法,專門用來創建對象,特別是帶有參數的對象。
         * 
         */
        BigDecimal result = null;
        BigDecimal first = new BigDecimal(firstNum);
        BigDecimal second= new BigDecimal(secNum);
        //判斷用戶點擊的運算符
        switch(operator)
        {
        case '+':
            result = first.add(second);break;
        case '-':
            result = first.subtract(second);break;
        case '*':
            result = first.multiply(second);break;
        case '/':
            if(secNum.equals("0")){
                System.out.println("被除數不能爲0.。。");
            }
                result = first.divide(second);

            break;
        case '%':
            result = first.remainder(second);break;
        default:
            break;
        }
        return result.toString();

    }
    //定義報錯的處理方法
    public boolean vaildate(){
        boolean flag = true;
        //這是正則表達式,用於判斷用戶輸入的格式有沒有錯誤
        Pattern p =Pattern.compile("\\d+");
        if(firstNum==null||"".equals(firstNum)){
            errors.put("firstNum","第一個運行數字不能爲空");
            flag = false;
        }else if(!p.matcher(firstNum).matches()){
            errors.put("firstNum", "只能輸入數字");
            flag = false;
        }
        if(secNum==null||"".equals(secNum)){
            errors.put("secNum","第二個運行數字不能爲空");
            flag = false;
        }else if(!p.matcher(secNum).matches()){
            errors.put("secNum", "只能輸入數字");
            flag = false;
        }

        return flag;


    }

}

//接下來是JSP頁面
用來顯示界面和傳入業務邏輯
當然,這是很LOW的方法,只適合簡單的實現

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>My JSP 'caculator.jsp' starting page</title>


  </head>

  <body>
  <jsp:useBean id="caculator" class="cn.itcast.bean.CaculatorBean" />

  <jsp:setProperty property="*" name="caculator"/>
 <%
    if(caculator.vaildate()){
  %>
    <font color="green">運算結果

    <jsp:getProperty property="firstNum" name="caculator"/>
    <jsp:getProperty property="operator" name="caculator"/>
    <jsp:getProperty property="secNum" name="caculator"/>
    =<%=caculator.caculate() %>    
  </font>
  <%
    }else{
        Map<String,String>errors = caculator.getErrors();
        pageContext.setAttribute("errors",errors);
    }

   %>
    <form action="" method="post">
    請輸入第一個運算數:<input type="text" name="firstNum"><font color="red">${errors.firstNum}</font><br/>
    <select name="operator">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">x</option>
        <option value="/">÷</option>
    </select><br/>
    請輸入第二個運算數:<input type="text" name="secNum"><font color="red">${errors.secNum}</font><br/>
    <input type="submit" value="提交"><br/>
    </form>

  </body>
</html>

寫的過程中遇到的問題:
1. JSP報找不到類方法的錯誤
2. JSP usebean報找不到類的錯誤
解決方法:
觀察了老半天以爲是JAR包衝突或者
方法邏輯不嚴
其實是沒先用IF判斷用戶輸入的數字是否合法
就先調用了JSP


第一次撰寫,多多指教,多多包含

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章