Solution: Implementation and integration of student import
Completion requirements
Csv.py
Facade class Csv:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import os from csv import reader class Csv: def __init__(self, rel_path): # constructor script_dir = os.path.dirname(__file__) # 'os' for compatibility reason abs_file_path = os.path.join(script_dir, rel_path) with open(abs_file_path, newline='') as csvFile: self.__listStudents = list(reader(csvFile, delimiter=';'))[1:] # omit 1st line def importClassNames(self): classNames = [] # empty list with names of school classes for listStudent in self.__listStudents: if listStudent[3] not in classNames: # if not already added to list classNames.append(listStudent[3]) return classNames def importStudentsOfClass(self, className): studentsOfClass = [] for listStudent in self.__listStudents: if listStudent[3] == className: # if sudent is in school class studentsOfClass.append(listStudent) return studentsOfClass |
School.py
Method importStudentsFromCSV() was added to class School:
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 |
from Csv import Csv from User import Student class School: def __init__(self,schoolClasses): self.__schoolClasses = schoolClasses def getSchoolClasses(self): return self.__schoolClasses def addSchoolClass(self, schoolClass): self.__schoolClasses.append(schoolClass) def importStudentsFromCSV(self, filename): # import students of a certain csv file csv = Csv(filename) classNames = csv.importClassNames() # import names of school classes for className in classNames: schoolClass = SchoolClass(className,[]) listStudents = csv.importStudentsOfClass(className) # import student data of a certain name of school class for listStudent in listStudents: student = Student(listStudent[0],listStudent[1],listStudent[2],schoolClass) self.addSchoolClass(schoolClass) class SchoolClass: def __init__(self,name, students): self.__name = name self.__students = students def getName(self): return self.__name def getStudents(self): return self.__students def addStudent(self, student): self.__students.append(student) |
testImport.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from School import * # import classes from User import * from Csv import Csv school = School([]) school.importStudentsFromCSV("students.csv") # import students schoolClasses = school.getSchoolClasses() # output for sc in schoolClasses: print(f"School class: {sc.getName()}") Students = sc.getStudents() for student in Students: print(f"\t{student.getSurname()}, {student.getFirstname()} in school class {student.getSchoolClass().getName()}") |
Output
School class: c1
Colligan, Manda in school class c1
Thieme, Madelaine in school class c1
School class: c2
Hickle, Sara in school class c2
Murchison, Jeffrey in school class c2
Tarleton, Vito in school class c2
The UML sequence diagram can also be used for a better understanding:

Last modified: Monday, 24 April 2023, 10:48 AM