SchoolAdmin: overzicht van alle stappen
Het SchoolAdmin-project loopt als een rode draad door heel semester 2. Je bouwt het stap voor stap op, hoofdstuk na hoofdstuk. Een aantal stappen staat in de theorie (die maak je tijdens de les), de meeste staan bij de oefeningen van het hoofdstuk.
Deze pagina verzamelt alle stappen op één plek, in de volgorde waarin je ze maakt, met een rechtstreekse link naar het kopje waar de opdracht en de code staan.
De opzet van het project vind je bij
Opdracht: SchoolAdmin
in H11. Je werkt in een apart project SchoolAdmin, los van OOExercises.
H11: Klassen en objecten
- H11_1 SchoolAdmin Student attributen — theorie: Attributen
KlasseStudentmet publieke attributen voor naam, geboortedatum, studentennummer en cursussen, plus de tellerStudentCounter. - H11_2 SchoolAdmin Student methoden — theorie: Methoden
De methodenGenerateNameCardenDetermineWorkload, en een eerste keuzemenu inMaindatDemoStudentsoproept. - H11_3 SchoolAdmin Student Cursussen private — theorie: Access modifiers
Courseswordt het private veldcoursesen krijgt de methodeRegisterForCourse, die dubbele inschrijvingen tegenhoudt. - H11_4 SchoolAdmin klasse Course — oefeningen
Nieuwe klasseCoursemetStudents,TitleenShowOverview, getest via de demomethodeDemoCourses. - H11_5 SchoolAdmin klasse CourseResult — oefeningen
Nieuwe klasseCourseResult; inStudentvervangt de listcourseResultsde listcourses, enRegisterCourseResultvervangtRegisterForCourse. - H11_6 SchoolAdmin Student Average — oefeningen
De methodeAverage, en eenShowOverviewdie naam, werkbelasting, cijferrapport en gemiddelde toont. - H11_7 SchoolAdmin properties Course — oefeningen
Coursekrijgt de propertyCreditPointsmet private setter, een read-onlyIdviamaxId, en de statische lijstAllCourses. - H11_8 SchoolAdmin properties CourseResult — oefeningen
De attributen vanCourseResultworden properties, waarbijResultnooit hoger dan 20 kan worden ingesteld. - H11_9 SchoolAdmin Student Age — oefeningen
Read-only computed propertyAgeop basis van de geboortedatum, mee opgenomen inShowOverview.
H12: Objecten (al dan niet) aanmaken
- H12_1 SchoolAdmin Student Constructor — oefeningen
Constructor met twee parameters voorStudent, die meteenStudentNumbertoekent vanuitStudentCounter. - H12_2 SchoolAdmin Cursus Constructor — oefeningen
Drie constructors voorCoursemet chaining, die hetIdzetten en het nieuwe object toevoegen aanAllCourses. - H12_3 SchoolAdmin CursusResultaat Constructor — oefeningen
Constructor metnameenresultvoorCourseResult, waarbijNameread-only wordt. - H12_4 SchoolAdmin Student uit tekst lezen — oefeningen
De methodeReadTextFormatStudent, die één student met al zijn cursusresultaten inleest uit één regel CSV-tekst.
H13: Geheugenmanagement bij klassen
- H13_1 SchoolAdmin nullable Resultaat — theorie: Nullable value types
CourseResultwordt hernoemd naarCourseRegistrationen het resultaat wordt nullable, zodat je kan inschrijven zonder resultaat. - H13_2 SchoolAdmin: cursus opzoeken op Id — oefeningen
De statische methodeSearchCourseById, dieAllCoursesdoorloopt ennullteruggeeft als de cursus niet bestaat. - H13_3 SchoolAdmin: gelinkte objecten — oefeningen
CourseRegistrationverwijst voortaan naar een echtCourse-object in plaats van naar een string. - H13_4 SchoolAdmin: Studieprogramma — oefeningen
Nieuwe klasseStudyProgrammet een naam en een lijst cursussen, plus de demomethodeDemoStudyProgram. - H13_5 SchoolAdmin: Studieprogramma aanpassen — oefeningen
Een cursus schrappen en een cursustitel wijzigen in één programma, en zien wat dat doet met het andere programma (referenties).
H14: Datastructuren
- H14_1 SchoolAdmin: AlleStudenten — oefeningen
Statische read-only propertyAllStudentsalsImmutableList<Student>, die vanuit de constructor wordt aangevuld. - H14_2 SchoolAdmin: Cursuslijsten immutable — oefeningen
AllCoursesen de cursuslijst vanStudyProgramworden afgeschermd als immutable lijsten.
H15: Overerving
- H15_1 SchoolAdmin: Persoon — oefeningen
Abstracte klassePersonmetId,Name,BirthDateenAge, en de methoden die elke kindklasse moet implementeren. - H15_2 SchoolAdmin: Student erft over van Persoon — oefeningen
Studentwordt een kind vanPerson, verliest de dubbele leden en krijgt het dossierStudentFile. - H15_3 SchoolAdmin: Personeel erft over van Persoon — oefeningen
Abstracte klasseEmployeemet anciënniteit (max. 50), een takenlijst en de verplichte methodeCalculateSalary. - H15_4 SchoolAdmin: Administratief Personeel — oefeningen
AdministrativePersonnelmet een salaris op basis van anciënniteit en tewerkstellingsbreuk, en een eigen naamkaartje. - H15_5 SchoolAdmin: Lector — oefeningen
Lecturermet de cursussen die hij of zij geeft, en een eigen berekening van salaris en werkbelasting.
H16: Geavanceerde overerving
Bij Uitbreidingen SchoolAdmin staat een klassediagram van het volledige project na alle stappen van dit hoofdstuk.
- H16_1 SchoolAdmin: Vergelijkbare objecten — oefeningen
Een eigenEqualsenGetHashCodeopPersonenCourse, gebaseerd op hetId. - H16_2 SchoolAdmin: ToString — oefeningen
EenToStringopPerson, waarbij elke concrete klasse het statuut van de persoon toevoegt. - H16_3 SchoolAdmin: Eenmaking statische lijsten personen — oefeningen
De aparte statische lijsten per subklasse verdwijnen; ze worden on-the-fly berekend uitAllPersons. - H16_4 SchoolAdmin: Tweerichtingsverkeer voor CourseRegistration — oefeningen
ViaAllCourseRegistrationskan je de link student–cursus in beide richtingen bevragen, zonder data dubbel bij te houden. - H16_5 SchoolAdmin: Cursussen in semesters — oefeningen
Het studieprogramma wordt eenDictionaryvan cursus naar semester, en het overzicht toont de cursussen per semester. - H16_6 SchoolAdmin: Manueel data invoeren — oefeningen
Menu-opties om studenten, cursussen en inschrijvingen manueel toe te voegen en de inschrijvingsgegevens te tonen.
H17: Exception handling
- H17_1 SchoolAdmin: geen dubbele cursusnamen — oefeningen
Een eigenDuplicateDataExceptiondie verhindert dat twee cursussen met dezelfde naam geregistreerd worden. - H17_2 SchoolAdmin: geen lege waarden voor CourseRegistration — oefeningen
EenArgumentExceptionwanneer je een inschrijving maakt zonder student en/of zonder cursus. - H17_3 SchoolAdmin: geen tweede inschrijving voor dezelfde cursus — oefeningen
EenArgumentExceptionwanneer dezelfde student zich een tweede keer voor dezelfde cursus inschrijft. - H17_4 SchoolAdmin: beperkt aantal inschrijvingen per cursus — oefeningen
EenCapacityExceededExceptionzodra er al 20 lopende inschrijvingen voor een cursus zijn.
H18: Polymorfisme en interfaces
- H18_1 SchoolAdmin: sorteren volgens criteria — oefeningen
Klassen dieIComparer<T>implementeren, zodat de gebruiker studenten en cursussen op verschillende criteria kan sorteren. - H18_2 SchoolAdmin: data export naar CSV — oefeningen
De interfaceICSVSerializablemetToCSV, doorheen de hele klassenhiërarchie geïmplementeerd, plus de menu-optie "Data exporteren".
H19: Testing
Deze oefeningen dragen geen H19_-nummer, maar testen wel rechtstreeks code die je in SchoolAdmin
hebt geschreven. Je maakt hiervoor een testproject TestSchoolAdmin.
- Oefening SchoolAdmin test null-waarden en TestCleanup — oefening
TestklasseTestEmptyValuesdie deArgumentExceptionuit H17_2 nagaat, metTestInitializeenTestCleanup. - Oefening SchoolAdmin test equals — oefening
TestklasseTestEqualsdie deEquals-implementaties uit H16_1 controleert voor studenten en lectoren. - Oefening SchoolAdmin test cursus zoeken met id — oefening
TestklasseTestSearchCoursedieSearchCourseByIduit H13_2 test metAssert.IsInstanceOfType,Assert.AreSameenAssert.AreEqual.