-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstudent.js
More file actions
84 lines (79 loc) · 2.47 KB
/
student.js
File metadata and controls
84 lines (79 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/* eslint-disable max-len */
/* eslint-disable max-lines-per-function */
function createStudent(name, year) {
return {
name,
year,
courses: [],
info() { console.log(`${this.name} is a ${year} year student`)},
addCourse(course) { this.courses.push(course) },
listCourses() { console.log(this.courses)},
addNote(code, note) {
this.courses.forEach(course => {
if (course.code === code) {
course.note = course.note === undefined ? note : course.note + '; ' + note;
}
});
},
updateNote(code, note) {
this.courses.forEach(course => {
if (course.code === code) {
course.note = note;
}
});
},
viewNotes() {
this.courses.forEach(course => {
if (course.note !== undefined) {
console.log(`${course.name}: ${course.note}`);
}
});
},
};
}
const school = (() => {
let students = [];
let allowedYears = ['1st', '2nd', '3rd', '4th', '5th'];
function getCourse(student, courseName) {
return student.listCourses().filter(course => course.name === courseName)[0];
}
return {
addStudent(name, year) {
if (!allowedYears.includes(year)) {
console.log("Invalid Year");
} else {
let student = createStudent(name, year)
students.push(student);
return student;
}
},
enrollStudent(student, courseName, courseCode) {
let course = {name: courseName, code: courseCode};
student.addCourse(course);
},
addGrade(student, courseName, grade) {
let course = getCourse(student, courseName);
if (course) course.grade = grade;
},
getReportCard(student) {
student.listCourses().forEach(course => {
console.log(`${course.name}: ` + (course.grade === undefined ? "In Progress" : `${course.grade}`));
});
},
courseReport(courseName) {
let courseStudents = students.map(student => {
let course = getCourse(student, courseName) || {grade: undefined};
return {name: student.name, grade: course.grade };
}).filter(({grade}) => grade);
if (courseStudents.length > 0) {
course.log(`=${courseName} Grades=`);
const average = courseStudents.reduce((total, {name, grade}) => {
console.log(`${name}: ${String(grade)}`);
return total + grade;
}, 0) / courseStudents.length;
console.log('---');
console.log(`Course Average: ${String(average)}`);
}
},
};
})();