Today I Learned/TIL 07

2023 - 07 - 21 타입스크립트 프로젝트 : 성적표 프로그램

sangwoo_rhie 2023. 7. 27. 01:52

오늘 배운 것: 성적표 프로그램

  • 학생 정보 및 시험 점수 입력 기능
  • 평균 점수 및 학점 계산 기능
npm init -y

tsc --init --rootDir ./src --outDir ./dist --esModuleInterop --module commonjs --strict true --allowJS true --checkJS true

package.json의 “scripts” 항목을 다음과 같이 변경
"scripts": {
    "start": "tsc && node ./dist/index.js",
    "build": "tsc --build",
    "clean": "tsc --build --clean"
},


src 디렉토리(폴더) 생성
src 폴더 내부에 index.ts 파일 생성. 그 안에서 코드 작업

 

1. 평균점수에 따른 학점부여.

90점 이상 -> A

80점 이상 -> B

70점 이상 -> C

60점 이상 -> D

그 외 -> F

// AssignGrade Code
function assignGrade(average: number): string {
    if (average >= 90) {
        return "A";
    } else if (average >= 80) {
        return "B";
    } else if (average >= 70) {
        return "C";
    } else if (average >= 60) {
        return "D";
    } else {
        return "F";
    }
}

 

 

2. 학생이 가져야 할 속성을 정의해서 객체로 만들기. (Interface는 객체의 구조를 정의하는 방법)

객체가 특정 인터페이스를 구현하려면 인터페이스에 정의된 모든 속성을 가져야 한다.

학생의 이름과 나이, 그리고 성적 5가지를 묶어서 scores객체에 넣음.

// Student Interface Code
interface Student {
    name: string;
    age: number;
    scores: {
        korean: number;
        math: number;
        society: number;
        science: number;
        english: number;
    }
};

 

 

 

3. 위에서 정의된 Student라는 타입의 객체를 받아서 평균을 계산하는 calculateAverage 함수.

// Calculate Average
function calculateAverage(student: Student): number {
    const sum =
    student.scores.korean +
    student.scores.math +
    student.scores.society +
    student.scores.science +
    student.scores.english;
    // const average = sum / 5;  // 이렇게 과목수인 5로 나눌수도 있지만,
    // 오브젝트 키의 길이로 나누면 숫자가 바뀔때마다 새로 입력안해도 된다.
    
    const average = sum / Object.keys(student.scores).length; 
    return average;
}

 

 

4. Student 생성 함수.

// create Student

function createStudent(
    name: string,
    age: number,
    korean: number,
    math: number,
    society: number,
    science: number,
    english: number,
): Student {
    return {
        name, //name = name 의 축약. value값이 다를경우 따로 써줘야함.
        age,
        scores: {
        korean, 
        math, 
        society, 
        science, 
        english
    }}
}

 

 

 

5. 성적 출력함수

// Print Result
function printResult(student: Student): void {
    const average = calculateAverage(student); // 평균계산
    const grade = assignGrade(average); // 계산된 평균으로 학점 추출
    console.log(
        `${student.name} (${student.age}세) - 평균: ${average.toFixed(
            2
        )}, 학점: ${grade}`
    );
}

 

 

 

6. 메인 함수 (가장 아래, 호출)

// main

function main(): void {
    const spartan = createStudent("Jake", 30, 95, 89, 76, 98, 97); // 이름, 나이, 5과목 성적들
    printResult(spartan);
}


main()

 

 

명령어 

npm run build
npm run start