diff --git a/src/bigGrades.ts b/src/bigGrades.ts index d91a3b5..508ada1 100644 --- a/src/bigGrades.ts +++ b/src/bigGrades.ts @@ -36,21 +36,63 @@ type StudentReportCard = { function computeFinalGrade(reportCard: StudentReportCard): number{ let finalGrade = 0; for(let mark of reportCard.marks){ - finalGrade += (mark.grade / mark.maxGrade) * mark.weight / 100 + finalGrade += (mark.grade / mark.maxGrade) * mark.weight } return finalGrade; } +function getGrade(studentId: number, examId: number, grades: Grade[]): number{ + for(let grade of grades){ + if(grade.examId === examId && grade.studentId === studentId){ + return grade.grade; + } + } + return 0; +} + +function createMarkForExam(studentId: number, + exam: Exam, + rawData: RawData): Mark{ + return { + grade: getGrade(studentId, exam.examId, rawData.grades), + maxGrade: exam.maxGrade, + weight: exam.weight + }; +} + +function createMarks(studentId: number, rawData: RawData): Mark[]{ + let ret: Mark[] = []; + for(let exam of rawData.exams){ + ret.push(createMarkForExam(studentId, exam, rawData)) + } + return ret; + +} +function createStudentReportCard(student: Student, + rawData: RawData): StudentReportCard{ + return { + studentId: student.studentId, + studentName: student.name, + marks: createMarks(student.studentId, rawData) + } +} function transformData(rawData: RawData): StudentReportCard[]{ - + let ret: StudentReportCard[] = []; + for(let student of rawData.students){ + ret.push(createStudentReportCard(student, rawData)); + } + return ret; } -function main(_rawData: RawData): void{ - - +function main(rawData: RawData): void{ + let reportCards = transformData(rawData); + for(let reportCard of reportCards){ + console.log(reportCard.studentName + " = " + computeFinalGrade(reportCard) ) + } } +main(rawData);