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