본문 바로가기
JSP

JSP(숫자계산 프로그램)_2024-08-29

by 앵보몬 2024. 8. 30.
728x90
반응형

숫자계산 프로그램

 

요구사항

1) 사용자 인터페이스

2) 설명 : 메뉴 기반의 텍스트 사용자 인터페이스 제공

3) 사례 : "1. 더하기 2. 빼기 3. 곱하기  4. 나누기"

4) 핵심 : 사용자가 쉽게 각 기능을 선택

 

예외 처리

1) 설명 : 파일 입출력 및 잘못된 입력에 대한 예외 처리

2) 사례 : 파일이 없을 경우, 잘못된 수량 입력

3) 핵심 : 안정적인 프로그램 동작 보장

 

Calculate.jsp
0.00MB
Calculation.java
0.00MB

 

Calculate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<style>
    #container{
        text-align: center;
        border: 3px solid skyblue;
        width: 500px;
        height: 200px;
        margin: 0 auto;
        font-weight: bolder;
        color: skyblue;    
    }
</style>
<body>
    <div id="container">
    <h2>계산기 서블릿</h2>
    <br>
    <form method="post" action="/JSP/calc">
        <input type="text" name="n1" size="10"><select name="op">
            <option>+</option>
            <option>-</option>
            <option>*</option>
            <option>/</option>
            </select> <input type="text" name="n2" size="10">
            <input type="submit" value="실행">
            </form>
        </div>
</body>
</html>

 

Calculation.jsp

package common;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet implementation class Calculation
 */
@WebServlet("/calc")
public class Calculation extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Calculation() {
        super();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        String number1 = request.getParameter("n1");
        String number2 = request.getParameter("n2");
        String operator = request.getParameter("op");


        double result = 0;
        boolean valid = true;

   
        double num1 = 0;
        double num2 = 0;
        try {
            num1 = Double.parseDouble(number1);
            num2 = Double.parseDouble(number2);
        } catch (NumberFormatException e) {
            valid = false;
            result = Double.NaN;
        }

 
        if (valid) {
            switch (operator) {
                case "+":
                    result = num1 + num2;
                    break;
                case "-":
                    result = num1 - num2;
                    break;
                case "*":
                    result = num1 * num2;
                    break;
                case "/":
                    if (num2 != 0) {
                        result = num1 / num2;
                    } else {
                        valid = false;
                        result = Double.NaN;
                    }
                    break;
                default:
                    valid = false;
                    result = Double.NaN;
            }
        }

 
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<style>");
        out.println("body { text-align: center; border: 3px solid skyblue; width: 300px; height: 150px; margin: 0 auto; }");
        out.println("h2 { color: skyblue; }");
        out.println("p { font-size: 20px; }");
        out.println("a { color: blue; text-decoration: none; }");
        out.println("</style>");

        out.println("<html><body>");
        out.println("<h2>Calculation Result</h2>");
        if (valid) {
            out.println("<p>" + number1 + " " + operator + " " + number2 + " = " + result + "</p>");
        } else {
            out.println("<p>Invalid input or operation.</p>");
        }

        out.println("<a href=\"javascript:history.back()\">Go back</a>");
        out.println("</body></html>");
    }
}

 

728x90
반응형