This commit is contained in:
didier amyot committed 2023-09-20 16:55:55 -04:00
1 parent aedd00ef47
commit 603130b219
1 file changed
+47 -5
+47 -5
View File
@@ -36,21 +36,63 @@ type StudentReportCard = {
function computeFinalGrade(reportCard: StudentReportCard): number{ function computeFinalGrade(reportCard: StudentReportCard): number{
let finalGrade = 0; let finalGrade = 0;
for(let mark of reportCard.marks){ for(let mark of reportCard.marks){
finalGrade += (mark.grade / mark.maxGrade) * mark.weight / 100 finalGrade += (mark.grade / mark.maxGrade) * mark.weight
} }
return finalGrade; 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[]{ 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);