과제 2)
계산식 조건 :
- 계산식은 20개 이상 입력 불가 처리했음
- 계산식의 길이가 19이고, 계산식 마지막에 연산자(+,-,*,/,%)를 붙여 계산식이 20개로 꽉 찼을 때만 일단 화면 출력한 후, 21번째에만 연산자 입력받으러 할 때 동시에 계산식의 마지막에 붙은 20번째 연산자도 삭제해서, 입력안됨을 확인시킴.
- 상기 이외의 모든 경우, 연산자만 계속적으로 입력하는 것은 불가 처리했음
- 모든 계산식의 숫자의 첫번재는 숫자 0 입력 불가 처리했음
- 계산완료 후 결과값을 앞자리 숫자로 유지하며, 계속하여 연산자와 숫자를 추가로 입력받아 계산처리했음
- 백스페이스 연산자와 숫자 모두 정확히 한자리씩 삭제되도록 처리했음
- clear로 모든 계산식과 결과값이 삭제되도록 처리했음
미완성 :
계산기의 숫자판은 이미지버튼으로 하지 않았음. 나중에 추가하겠음. 일단은 마우스 올리면 숫자입력됨.
계산식과 결과가 같이 안보이고 결과만 화면 출력했음. 나중에 추가하겠음.
계산결과 콤마처리 안했음
음의 실수를 계속 계산하다보면 큰 수에서 Nan, Undefined가 발생하는데 시간상 에러 안찾았음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>인터넷 계산기 만들기</title> <script> 'use strict'; var number = new Array(); var operation = new Array();//operation.length = number.length-1 let result = 0; function setNumber(num) { let viewNumber = document.getElementById("viewNumber").innerText; let numbers = document.getElementById("number").innerText; if (20 <= viewNumber.length) return false; if (0 == numbers.length && 0 == num) return false; document.getElementById("viewNumber").innerText = viewNumber + num; document.getElementById("number").innerText += num; } function operate(op) { let viewNumber = document.getElementById("viewNumber").innerText; //연산자를 2번 이상 연속해서 눌렀을 대 if ('' == document.getElementById("number").innerText) { if (20 == viewNumber.length) { let lastNumbers = viewNumber.charAt(viewNumber.length -1); let patternNumber = "[0-9]"; if (! lastNumbers.match(patternNumber)) { //마지막 문자(연산자) 삭제 document.getElementById("viewNumber").innerText = viewNumber.slice(0, viewNumber.length -1); if (0 < number.length) { lastNumbers = number[number.length -1]; document.getElementById("number").innerText = lastNumbers; console.log("숫자배열의 마지막방 삭제 전 number.length = "+number.length); number.pop(number.length -1);//숫자배열의 마지막방 삭제 console.log("숫자배열의 마지막방 삭제 후 number.length = "+number.length); } return false; } } else { return false; } } else { if (20 <= viewNumber.length) return false; } document.getElementById("viewNumber").innerText += op; number.push(eval(document.getElementById("number").innerText)); document.getElementById("number").innerText = ''; operation.push(op); } /*음의 실수는 에러발생: NaN, undefine *머리아파~ ㅜㅗㅜ 시간없어서 여기까지.. */ function calc() { //연산자를 누른 후 '='을 눌러 계산을 하려고 할 때 if ('' == document.getElementById("number").innerText) return false; //document.getElementById("viewNumber").innerText += '='; number.push(eval(document.getElementById("number").innerText)); document.getElementById("number").innerText = ''; //연산할 숫자, 연산자 최소 존재유무 체크 if (1 < number.length && 0 < operation.length) result = number[0]; else return false; operation.forEach((operation, i) => { switch(operation) { case '+' : result += number[i+1]; break; case '-' : result -= number[i+1]; break; case '*' : result *= number[i+1]; break; case '/' : result /= number[i+1]; break; case '%' : result %= number[i+1]; break; default : alert('연산자가 부적합합니다'); return false; } }); /* for (let i=0; i<operation.length; i++) { switch(operation[i]) { case '+' : result += number[i+1]; break; case '-' : result -= number[i+1]; break; case '*' : result *= number[i+1]; break; case '/' : result /= number[i+1]; break; case '%' : result %= number[i+1]; break; default : alert('연산자가 부적합합니다'); return false; } } */ document.getElementById("viewNumber").innerText = result; document.getElementById("number").innerText = result; number.splice(0); operation.splice(0); console.log("*** calc() 연산 실행 후 처리 *** \n 숫자 배열 모두 삭제 후 number.length = " + number.length); console.log("*** calc() 연산 실행 후 처리 *** \n 연산자 배열 모두 삭제 후 operation.length = " + operation.length); } function backspace() { let viewNumber = document.getElementById("viewNumber").innerText; let lastNumbers = document.getElementById("number").innerText; if ('' == lastNumbers) { if ('' == viewNumber) { return false; } else { //마지막 문자(연산자) 삭제 document.getElementById("viewNumber").innerText = viewNumber.slice(0, viewNumber.length -1); if (0 < number.length) { lastNumbers = number[number.length -1]; document.getElementById("number").innerText = lastNumbers; console.log("숫자배열의 마지막방 삭제 전 number.length = "+number.length); number.pop(number.length -1);//숫자배열의 마지막방 삭제 console.log("숫자배열의 마지막방 삭제 후 number.length = "+number.length); } } } else { //마지막 숫자 삭제 document.getElementById("viewNumber").innerText = viewNumber.slice(0, viewNumber.length -1); document.getElementById("number").innerText = lastNumbers.slice(0, lastNumbers.length -1); } } function clean() { document.getElementById("viewNumber").innerText = ''; document.getElementById("number").innerText = ''; number.splice(0); operation.splice(0); console.log("*** clean() 실행 후 처리 *** \n 숫자 배열 모두 삭제 후 number.length = " + number.length); console.log("*** clean() 실행 후 처리 *** \n 연산자 배열 모두 삭제 후 operation.length = " + operation.length); } </script> </head> <body> <form name="myForm"> <table border="1" align="center"> <tr> <td rowspan="2" colspan="3"><p> <div id="viewNumber"></div> </p></td> <td width="58" height="31" align="center"> <div width="25" onmouseenter="backspace()">←</div> </td> </tr> <tr> <td width="58" height="31" align="center"> <div width="25" onmouseenter="clean()">clear</div> </td> </tr> <tr> <td width="58" height="58" align="center"><div onmouseenter="setNumber('1')">1</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('2')">2</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('3')">3</div></td> <td width="58" height="58" align="center"><div onmouseenter="operate('+')">+</div></td> </tr> <tr> <td width="58" height="58" align="center"><div onmouseenter="setNumber('4')">4</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('5')">5</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('6')">6</div></td> <td width="58" height="58" align="center"><div onmouseenter="operate('-')">-</div></td> </tr> <tr> <td width="58" height="58" align="center"><div onmouseenter="setNumber('7')">7</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('8')">8</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('9')">9</div></td> <td width="58" height="58" align="center"><div onmouseenter="operate('*')">*</div></td> </tr> <tr> <td width="58" height="58" align="center"><div onmouseenter="operate('%')">%</div></td> <td width="58" height="58" align="center"><div onmouseenter="setNumber('0')">0</div></td> <td width="58" height="58" align="center"><div onmouseenter="calc()">=</div></td> <td width="58" height="58" align="center"><div onmouseenter="operate('/')">/</div></td> </tr> </table> <div id="number"></div> </form> </body> </html> | cs |
과제 3)
w3c css icon적용
회원가입 - 정규식 체크 (미완성 - 새벽이라 졸려요 다음에 할게요 @ㅗ@)
로그인 - 미작성
첫댓글 테이블 처리된 계산기도 깔끔하네요.
작성된부분에 대한 실행영상이 있었으면, 소스와 함께보기 더 편했을듯합니다.
div태그에 클릭처리도 좋구요..
기회되면 만드신내용들을 직접 발표하시면서 분석해 주시면 더 좋을듯 합니다. 수고하셨습니다.