학은제 과제로 성적 계산기 만들기가 나왔다.. 겸사겸사 공유한다.

과제 조건

우선 3명의 이름과 성적을 입력받고 제출 버튼을 클릭하면 순위대로 이름, 총점, 평균을 출력하는 코드를 작성했다.

<body>
  <h2>성적 계산기</h2>
  <form action="post" name="grade">
    <p>이름 : <input type="text" size="4" name="name1"> 국어 : <input type="text" size="4" name="kor1"> 영어 : <input type="text" size="4" name="eng1"> 수학 : <input type="text" size="4" name="math1"></p>
    <p>이름 : <input type="text" size="4" name="name2"> 국어 : <input type="text" size="4" name="kor2"> 영어 : <input type="text" size="4" name="eng2"> 수학 : <input type="text" size="4" name="math2"></p>
    <p>이름 : <input type="text" size="4" name="name3"> 국어 : <input type="text" size="4" name="kor3"> 영어 : <input type="text" size="4" name="eng3"> 수학 : <input type="text" size="4" name="math3"></p>
    <input type="button" value="제출" onclick="result()">
    <p>이름 : <input type="text" size="4" name="1th"> 총점 : <input type="text" size="4" name="sum1"> 평균 : <input type="text" size="4" name="avg1"> 순위 : <input type="text" size="4" name="rank1"></p>
    <p>이름 : <input type="text" size="4" name="2th"> 총점 : <input type="text" size="4" name="sum2"> 평균 : <input type="text" size="4" name="avg2"> 순위 : <input type="text" size="4" name="rank2"></p>
    <p>이름 : <input type="text" size="4" name="3rd"> 총점 : <input type="text" size="4" name="sum3"> 평균 : <input type="text" size="4" name="avg3"> 순위 : <input type="text" size="4" name="rank3"></p>
  </form>
</body>

simple is best

제출 버튼을 눌렀을 때 main.js에서 만든 result() 함수가 실행되고 최소한 이름이나 성적에 빈칸이 있을 경우 제출하지 못하게 경고 창을 띄워주고 (정확하겐 이름엔 텍스트만 입력되고 성적엔 숫자만 입력되게 해주는 좋다)

 

function result() {
  if(grade.kor1.value === "" || grade.kor2.value === "" || grade.kor3.value === "") {
    alert('국어 점수를 입력해주세요');
  } else if (grade.name1.value === "" || grade.name2.value === "" || grade.name3.value === ""){
    alert('학생의 이름을 입력해주세요');
  } else if (grade.eng1.value === "" || grade.eng2.value === "" || grade.eng3.value === ""){
    alert('영어 점수를 입력해주세요');
  } else if (grade.name1.value === "" || grade.name2.value === "" || grade.name3.value === ""){
    alert('수학 점수를 입력해주세요');
  }
}

빈칸이 없이 잘 입력되었을 경우 계산이 시작된다.

 

여기서 값을 입력 받고 평균과 등수를 정해서 출력해줘야 하는데.. 하나씩 비교해가면서 쓰는건 좀 아닌거 같아서 찾아보니 아주 좋은 코드가 있었다.

 

    var sum1 = parseInt(grade.kor1.value) + parseInt(grade.eng1.value) + parseInt(grade.math1.value);
    var sum2 = parseInt(grade.kor2.value) + parseInt(grade.eng2.value) + parseInt(grade.math2.value);
    var sum3 = parseInt(grade.kor3.value) + parseInt(grade.eng3.value) + parseInt(grade.math3.value);

    const sumArray = [sum1, sum2, sum3];
    const answer = [];
    const ranking = [...sumArray].sort((a,b)=>b-a);
    for(let n of sumArray) {
      answer.push(ranking.indexOf(n)+1)
    }

우선 입력받은 값들을 저장하고 배열에 넣은 다음 등수를 저장할 빈 배열을 만들고 랭킹에서 오름차순 정렬으로 점수 배열의 값들을 돌려서 빈 배열에 인덱스 +1로 넣어준다. 그러면 동점 처리까지 완벽..

 

main.js 전체 코드

function result() {
  if(grade.kor1.value === "" || grade.kor2.value === "" || grade.kor3.value === "") {
    alert('국어 점수를 입력해주세요');
  } else if (grade.name1.value === "" || grade.name2.value === "" || grade.name3.value === ""){
    alert('학생의 이름을 입력해주세요');
  } else if (grade.eng1.value === "" || grade.eng2.value === "" || grade.eng3.value === ""){
    alert('영어 점수를 입력해주세요');
  } else if (grade.math1.value === "" || grade.math2.value === "" || grade.math3.value === ""){
    alert('수학 점수를 입력해주세요');
  } else {
    var sum1 = parseInt(grade.kor1.value) + parseInt(grade.eng1.value) + parseInt(grade.math1.value);
    var sum2 = parseInt(grade.kor2.value) + parseInt(grade.eng2.value) + parseInt(grade.math2.value);
    var sum3 = parseInt(grade.kor3.value) + parseInt(grade.eng3.value) + parseInt(grade.math3.value);

    const sumArray = [sum1, sum2, sum3];
    const answer = [];
    const ranking = [...sumArray].sort((a,b)=>b-a);
    for(let n of sumArray) {
      answer.push(ranking.indexOf(n)+1)
    }
   
    grade.rank1.value = answer[0];
    grade.rank2.value = answer[1];
    grade.rank3.value = answer[2];

    var avg1 = sum1 / 3;
    var avg2 = sum2 / 3;
    var avg3 = sum3 / 3;

    grade.first.value = grade.name1.value;
    grade.sec.value = grade.name2.value;
    grade.thr.value = grade.name3.value;

    grade.sum1.value = sum1;
    grade.sum2.value = sum2;
    grade.sum3.value = sum3;

    grade.avg1.value = avg1;
    grade.avg2.value = avg2;
    grade.avg3.value = avg3;
   
  }
}

짜잔 참 쉽죠?

+ Recent posts