diff --git a/ex6.py b/ex6.py new file mode 100644 index 0000000..1da217f --- /dev/null +++ b/ex6.py @@ -0,0 +1,83 @@ +class Person: + def __init__(self, name: str, age: int, email: str) -> None: + self._name: str = name + self._age: int = age + self._email: str = email + + def get_details(self) -> str: + return f"Name: {self._name}, Age: {self._age}, Email: {self._email}" + + +class Student(Person): + def __init__(self, name: str, age: int, email: str, student_id: int) -> None: + super().__init__(name, age, email) + self._student_id: int = student_id + self._courses: list = [] + self._grades: dict[str, str] = {} + + def enroll_in_course(self, course: 'Course') -> None: + self._courses.append(course) + + def assign_grade(self, course_name: str, grade: str) -> None: + self._grades[course_name] = grade + + def get_grades(self) -> dict[str, str]: + return self._grades + + +class Teacher(Person): + def __init__(self, name: str, age: int, email: str, subject: str) -> None: + super().__init__(name, age, email) + self._subject: str = subject + + def assign_grade(self, student: Student, course: 'Course', grade: str) -> None: + student.assign_grade(course._course_name, grade) + +class Course: + def __init__(self, course_name: str, course_code: str) -> None: + self._course_name: str = course_name + self._course_code: str = course_code + self._enrolled_students: list[Student] = [] + + def add_student(self, student: Student) -> None: + self._enrolled_students.append(student) + student.enroll_in_course(self) + + def list_students(self) -> list[str]: + return [x.get_details() for x in self._enrolled_students] + +def main() -> None: + thorvald = Student("Thorvald", 28, "thorvald@example.com", 456) + johannes = Student("Johannes", 19, "Johannes@example.com", 35198) + tora = Student("Tora", 21, "Tora@example.com", 984555) + + ola = Teacher("Ola Normann", 56, "ola_normann@example.com", "FYS101") + kari = Teacher("Kari Normann", 104, "kari.normann@example.com", "MATH999") + + FYS101 = Course("Mekanikk", "FYS101") + MATH999 = Course("Matte", "MATH999") + + students = [thorvald, johannes, tora] + + for student in students: + FYS101.add_student(student) + MATH999.add_student(student) + + ola.assign_grade(thorvald, FYS101, "F") + ola.assign_grade(johannes, FYS101, "E") + ola.assign_grade(tora, FYS101, "A") + + kari.assign_grade(thorvald, MATH999, "B") + kari.assign_grade(johannes, MATH999, "D") + kari.assign_grade(tora, MATH999, "A+") + + print(f"{thorvald._name}'s grades: {thorvald.get_grades()}") + print(f"{thorvald._name}'s grades: {johannes.get_grades()}") + print(f"{tora._name}'s grades: {tora.get_grades()}") + + print("Students in FYS101:") + for student in FYS101.list_students(): + print(student) + +if __name__ == "__main__": + main()