간단한 웹 사칙연산 계산기 만들기

gdhi·2023년 11월 9일

JavaScript + JQuery

목록 보기
4/6
post-thumbnail

👉 숫자 입력 하나라도 안할 시 결과 값 출력 X
👉 아무 버튼 누르고 연산 시 숫자 초기화
👉 결과 창은 값에 따라 늘어나야 함

<!-- 문서 타입 html -->
<!DOCTYPE html>
<!-- 주언어 kr(lang="kr")로 명시하여 해당 언어에 알맞게 번역(점자,소리)되어
      올바른 해석으로 정보 전달하기 위함
    html태그 시작 -->
<html lang="ko">
<!-- 헤드 태그 시작 -->
<head>
    <!-- 다국어를 표현하기 위한 유니코드 UTF-8 설정 -->
    <meta charset="UTF-8">
    <!-- 웹페이지의 뷰포트의 너비를 스마트폰 화면 너비에 맞추고
    초기 화면 배율을 1로 지정 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 문서 제목 -->
    <title>평가2_송태승</title>
    <!-- 스타일 태그 시작 -->
    <style>
        /* id명이 container인 요소의 스타일 지정, 
        전체 컨텐츠 영역을 지정하기 위함 */
        #container {
            /* 너비가 1500px */
            width: 1500px;
            /* 높이가 300px */
            height: 300px;
            /* 화면 중앙에 정렬 */
            margin: 0 auto;
        }
        /* 리스트 요소 ul의 스타일 지정 */
        ul {
            /* ul리스트의 기본 값인 ● 을 없앰 */
            list-style: none;
            /* 안쪽 공간을 0으로 지정 */
            padding: 0;
            /* container 안쪽의 중앙에 정렬 */
            margin: 0 auto;
        }
        /* 리스트 요소 ul의 자식 li 요소의 스타일 지정 */
        ul li {
            /* li요소들은 블록 형태로 세로 정렬이 되므로 float left로 왼쪽부터 가로로 정렬 */
            float: left;
            /* 안쪽 공간을 0으로 지정 */
            padding: 0;
            /* li요소들의 마진 값을 0으로 두어 붙인 형태가 되도록 함 */
            margin: 0;           
        }
        /* button 요소의 스타일 지정 */
        button {
            /* 너비를 100px */
            width: 100px;
            /* 높이를 35px */
            height: 35px;
            /* button에 해당하는 100px x 35px 공간의 배경 색을 white로 지정 */
            background-color: white;
        }
        /* id 명이 plus인 요소의 스타일을 지정 */
        #plus {
            /* button에서 id명을 사용하므로 button을
            1px 크기인 초록색 실선 테두리로 설정 */
            border: 1px solid green;
            /* 글자색을 초록색으로 설정 */
            color: green;
            /* 실행사진에서 오른쪽 테두리는 없이 
            붙어있으므로 오른쪽 테두리 삭제 */
            border-right: none;
        }
        /* #plus가 설정한 영역위에 마우스 포인터가 올라가 있으면
        아래 스타일로 실행 */
        #plus:hover{
            /* button과 같은 너비 100px */
            width: 100px;
            /* button과 같은 높이 100px */
            height: 35px;
            /* 지정한 영역의 배경색을 초록색으로 */
            background-color: green;
            /* 지정한 영역의 테두리를 1px 초록색 실선으로 */
            border: 1px solid green;
            /* 글자는 흰색으로 설정 */
            color: white;
        }
        /* id 명이 minus인 요소의 스타일을 지정 */
        #minus {
            /* button에서 id명을 사용하므로 button을
            1px 크기인 빨간색 실선 테두리로 설정 */
            border: 1px solid red;
            /* 글자색을 빨간색으로 설정 */
            color: red;
            /* 실행사진에서 오른쪽 테두리는 없이 
            붙어있으므로 오른쪽 테두리 삭제 */
            border-right: none;
        }
        /* #minus가 설정한 영역위에 마우스 포인터가 올라가 있으면
        아래 스타일로 실행 */
        #minus:hover{
            /* button과 같은 너비 100px */
            width: 100px;
            /* button과 같은 높이 100px */
            height: 35px;
            /* 지정한 영역의 배경색을 빨간색으로 */
            background-color: red;
            /* 지정한 영역의 테두리를 1px 빨간색 실선으로 */
            border: 1px solid red;
            /* 글자는 흰색으로 설정 */
            color: white;
        }
        /* id 명이 mul인 요소의 스타일을 지정 */
        #mul {
            /* button에서 id명을 사용하므로 button을
            1px 크기인 파란색 실선 테두리로 설정 */
            border: 1px solid blue;
            /* 글자색을 파란색으로 설정 */
            color: blue;
            /* 실행사진에서 오른쪽 테두리는 없이 
            붙어있으므로 오른쪽 테두리 삭제 */
            border-right: none;
        }
        /* #mul가 설정한 영역위에 마우스 포인터가 올라가 있으면
        아래 스타일로 실행 */
        #mul:hover{
            /* button과 같은 너비 100px */
            width: 100px;
            /* button과 같은 높이 100px */
            height: 35px;
            /* 지정한 영역의 배경색을 파란색으로 */
            background-color: blue;
            /* 지정한 영역의 테두리를 1px 파란색 실선으로 */
            border: 1px solid blue;
            /* 글자는 흰색으로 설정 */
            color: white;
        }
        /* id 명이 div인 요소의 스타일을 지정 */
        #div {
            /* button에서 id명을 사용하므로 button을
            1px 크기인 노란색 실선 테두리로 설정 */
            border: 1px solid gold;
            /* 글자색을 노란색으로 설정 */
            color: gold;
            /* 사진상으로 결과 박스 옆에 테두리가 
            남아있는 것으로 보여 테두리 삭제 x */
        }
        /* #div가 설정한 영역위에 마우스 포인터가 올라가 있으면
        아래 스타일로 실행 */
        #div:hover{
            /* button과 같은 너비 100px */
            width: 100px;
            /* button과 같은 높이 100px */
            height: 35px;
            /* 지정한 영역의 배경색을 금색으로 */
            background-color: gold;
            /* 지정한 영역의 테두리를 1px 금색 실선으로 */
            border: 1px solid gold;
            /* 흰색으로 설정 */
            color: white;
        }
        /* id 명이 result인 요소의 스타일을 지정*/
        #result {
            /* 너비는 20px */
            width: 20px;
            /* 높이는 31px */
            height: 31px;
            /* 지정한 영역의 배경색을 rgb(235, 235, 235) 로 설정 */
            background-color: rgb(235, 235, 235);
            /* 지정한 영역의 테두리를 1px크기의 rgb(218, 217, 217)색 실선으로 설정 */
            border: 1px solid rgb(218, 217, 217);
            /* 사진상으로 나누기 버튼 옆에 붙어 테두리가 없는 것 처럼 보여 왼쪽 테두리 삭제 */
            border-left: none;
            /* 사진과 같이 오른쪽위, 오른쪽아래 테두리를 5px 정도 만큼 깎는다 */
            border-radius: 0px 5px 5px 0px;
        }
        /* ul 요소 자식 li의 형제 input 태그 안에 
        placehloder 속성을 갖고 있으면 아래 스타일 실행
        첫번째 숫자, 두번째 숫자 입력 칸의 스타일이다. */
        ul li input[placeholder] {
            /* 너비는 200px */
            width: 200px;
            /* 높이는 31px */
            height: 31px;
            /* 위에서 지정한 영역의 테두리를 1px크기의 
            rgb(218, 217, 217)색의 실선으로 설정 */
            border: 1px solid rgb(218, 217, 217);
            /* 실행사진에서 오른쪽 테두리는 없이 
            붙어있으므로 오른쪽 테두리 삭제 */
            border-right: none;
        }
    /* 스타일 태그 종료 */
    </style>
<!-- 헤드 태그 종료 -->
</head>
<!-- 바디 태그 시작 -->
<body>
    <!-- container를 불러와 컨텐츠 영역을 지정, div 태그 시작 -->
    <div id="container">
        <!-- h1태그로 제목 입력 -->
        <h1>사칙연산 계산기</h1>
        <!-- ul태그 시작, li로 리스트 작성 -->
        <ul>
            <!-- li안에 여러 여러 속성들을 추가, input태그로 id명을 num1로 하여 스크립트에서 값을 받아오고
            type을 text로 하여 값을 입력하고
            placeholder로 text 칸에 "첫번째 숫자"가 보이도록 함  -->
            <li><input id="num1" type="text" placeholder="첫번째 숫자"></li>
            <!-- input태그로 id명을 num1로 하여 스크립트에서 값을 받아오고
            type을 text로 하여 값을 입력하고
            placeholder로 text 칸에 "첫번째 숫자"가 보이도록 함 -->
            <li><input id="num2" type="text" placeholder="두번째 숫자"></li>
            <!-- button태그로 버튼을 생성하고 id명이 plus로 스타일에서
            #plus를 불러와 스타일을 설정하고
            plus 영역을 클릭 했을 때 아래 스크립트에서 plus 함수 실행
            버튼 이름은 더하기 -->
            <li><button id="plus" onclick="plus();">더하기</button></li>
            <!-- button태그로 버튼을 생성하고 id명이 minus로 스타일에서
            #minus를 불러와 스타일을 설정하고
            minus 영역을 클릭 했을 때 아래 스크립트에서 minus 함수 실행
            버튼 이름은 빼기 -->
            <li><button id="minus" onclick="minus();">빼기</button></li>
            <!-- button태그로 버튼을 생성하고 id명이 mul로 스타일에서
            #mul를 불러와 스타일을 설정하고
            mul 영역을 클릭 했을 때 아래 스크립트에서 mul 함수 실행
            버튼 이름은 더하기 -->
            <li><button id="mul" onclick="mul();">곱하기</button></li>
            <!-- button태그로 버튼을 생성하고 id명이 div로 스타일에서
            #div를 불러와 스타일을 설정하고
            div 영역을 클릭 했을 때 아래 스크립트에서 div 함수 실행
            버튼 이름은 더하기 -->
            <li><button id="div" onclick="div();">나누기</button></li>
            <!-- input 태그로 id명이 result로 스타일에서 #result를
            불러온다. 아래 스크립트에서 위에서 실행된 함수들의 값을
            반환받는 역할을 한다. type은 text로 텍스트 값이 입력된다.
            readonly를 사용하여 입력이 안되도록 한다. -->
            <li><input id="result" type="text" readonly></li>
        <!-- ul 태그 종료 -->
        </ul>
    <!-- container영역의 div 종료 -->
    </div>
    <!-- 자바스크립트 태그 시작 -->
    <script>        
        // 위 HTML의 버튼에서 버튼이 클릭 됐을 때이 실행되어 계산하는 plus 함수
        function plus() {
            // id가 num1, num2인 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 
            // 둘 중에 하나라도 들어가지 않았을 때 결과(result)값을 초기화하는 조건문.
            if (document.getElementById("num1").value == ""
                || document.getElementById("num2").value == "") {
                document.getElementById("result").value = "";
            }
            // 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 둘 다 들어갔을 때의 조건문
            else{
                // 변수 num1과 num2 값을 각각의 id인 num1, num2을 사용자가 입력한 값을 정수로 대입
                var num1 = parseInt(document.getElementById("num1").value);
                var num2 = parseInt(document.getElementById("num2").value);
                
                // 위에서 받은 num1 과 num2 값을 더하여 plus 변수에 대입
                var plus = num1 + num2;
                // plus를 id가 result를 갖는 값으로 반환
                document.getElementById("result").value = plus;

                // result값의 텍스트길이를 변수 length에 대입
                var length = document.getElementById("result").value.length;
                // id가 result를 갖는 요소의 style의 width값을 텍스트 길이 x 10 px로 변경. 
                // 이렇게 하지 않으면 결과 텍스트영역이 고정되는 문제가 발생한다.
                document.getElementById("result").style.width = (length*10) + "px";
            }
            // 리셋 함수로 num1, num2 값을 초기화해주는 함수로 아래에 설명
            reset();
        }
        // 위 HTML의 버튼에서 버튼이 클릭 됐을 때이 실행되어 계산하는 minus 함수
        function minus() {
            // id가 num1, num2인 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 
            // 둘 중에 하나라도 들어가지 않았을 때 결과(result)값을 초기화하는 조건문.
            if (document.getElementById("num1").value == ""
                || document.getElementById("num2").value == "") {
                document.getElementById("result").value = "";
            }
            // 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 둘 다 들어갔을 때의 조건문
            else{
                // 변수 num1과 num2 값을 각각의 id인 num1, num2을 사용자가 입력한 값을 정수로 대입
                var num1 = parseInt(document.getElementById("num1").value);
                var num2 = parseInt(document.getElementById("num2").value);

                // 위에서 받은 num1 과 num2 값을 빼어 minus 변수에 대입
                var minus = num1 - num2;
                // minus을 id가 result를 갖는 값으로 반환
                document.getElementById("result").value = minus;

                // result값의 텍스트길이를 변수 length에 대입
                var length = document.getElementById("result").value.length;
                // id가 result를 갖는 요소의 style의 width값을 텍스트 길이 x 10 px로 변경. 
                // 이렇게 하지 않으면 결과 텍스트영역이 고정되는 문제가 발생한다.
                document.getElementById("result").style.width = (length*10) + "px";
            }
            // 리셋 함수로 num1, num2 값을 초기화해주는 함수로 아래에 설명
            reset();
        }

        // 위 HTML의 버튼에서 버튼이 클릭 됐을 때이 실행되어 계산하는 mul 함수
        function mul() {
            // id가 num1, num2인 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 
            // 둘 중에 하나라도 들어가지 않았을 때 결과(result)값을 초기화하는 조건문.
            if (document.getElementById("num1").value == ""
                || document.getElementById("num2").value == "") {
                document.getElementById("result").value = "";
            }
            // 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 둘 다 들어갔을 때의 조건문
            else{
                // 변수 num1과 num2 값을 각각의 id인 num1, num2을 사용자가 입력한 값을 정수로 대입
                var num1 = parseInt(document.getElementById("num1").value);
                var num2 = parseInt(document.getElementById("num2").value);

                // 위에서 받은 num1 과 num2 값을 곱하여 mul 변수에 대입
                var mul = num1 * num2;
                // mul을 id가 result를 갖는 값으로 반환
                document.getElementById("result").value = mul;

                // result값의 텍스트길이를 변수 length에 대입
                var length = document.getElementById("result").value.length;
                // id가 result를 갖는 요소의 style의 width값을 텍스트 길이 x 10 px로 변경. 
                // 이렇게 하지 않으면 결과 텍스트영역이 고정되는 문제가 발생한다.
                document.getElementById("result").style.width = (length*10) + "px";
            }
            // 리셋 함수로 num1, num2 값을 초기화해주는 함수로 아래에 설명
            reset();
        }

        // 위 HTML의 버튼에서 버튼이 클릭 됐을 때이 실행되어 계산하는 div 함수
        function div() {
            // id가 num1, num2인 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 
            // 둘 중에 하나라도 들어가지 않았을 때 결과(result)값을 초기화하는 조건문.            
            if (document.getElementById("num1").value == ""
                || document.getElementById("num2").value == "") {
                document.getElementById("result").value = "";
            }
            // 첫번째 숫자(num1)과 두번째 숫자(num2)의 값이 둘 다 들어갔을 때의 조건문
            else{
                // 변수 num1과 num2 값을 각각의 id인 num1, num2을 사용자가 입력한 값을 정수로 대입
                var num1 = parseInt(document.getElementById("num1").value);
                var num2 = parseInt(document.getElementById("num2").value);

                // 위에서 받은 num1 과 num2 값을 나누어 div 변수에 대입
                var div = num1 / num2;
                // div를 id가 result를 갖는 값으로 반환
                document.getElementById("result").value = div;

                // result값의 텍스트길이를 변수 length에 대입
                var length = document.getElementById("result").value.length;
                // id가 result를 갖는 요소의 style의 width값을 텍스트 길이 x 10 px로 변경. 
                // 이렇게 하지 않으면 결과 텍스트영역이 고정되는 문제가 발생한다.
                document.getElementById("result").style.width = (length*10) + "px";
            }
            // 리셋 함수로 num1, num2 값을 초기화해주는 함수로 아래에 설명
            reset();
        }

        // 초기화를 실행하는 reset 함수
        function reset() {
            // 더하기, 빼기, 곱하기, 나누기 함수에 넣었으므로
            // 아무 버튼 눌렀을 때 첫번째 숫자(num1)와 두번째 숫자(num2) 초기화
            document.getElementById("num1").value = "";
            document.getElementById("num2").value = "";
        }
    //스크립트 태그 종료 
    </script>
<!-- 바디 태그 종료 -->
</body>
<!-- html 태그 종료 -->
</html>

0개의 댓글