Skip to content

Track 3 - Toetsopdracht - Student

Codelab

npx @hboictcloud/codelab-cli new oop/3-student

Beschrijving

Bij deze opdracht maak je een klassenstructuur voor studenten van HBO-ICT. In deze opdracht maak je drie classes die als volgt met elkaar te maken hebben: een Klas bestaat uit een aantal Studenten, maximaal 30. Een Student heeft onder andere een Adres.

  1. Maak een class Adres met validatie voor Nederlandse postcodes.
  2. Maak een class Student met adresgegevens en geboortedatum.
  3. Maak een class Klas die studenten kan beheren met een maximum van 30 studenten.

Klassendiagram

Onderstaand diagram vat de structuur van de class samen:

classDiagram
    class Adres {
        -_straat: string
        -_nummer: string
        -_postcode: string
        -_stad: string
        +constructor(straat: string, nummer: string, postcode: string, stad: string)
        +toString() string
        +checkPostcode(postcode: string) boolean
    }
    class Student {
        -_studentnummer: string
        -_voornaam: string
        -_achternaam: string
        -_geboortedatum: Date
        -_adres: Adres
        +constructor(studentnummer: string, voornaam: string, achternaam: string, geboortedatum: Date, adres: Adres)
        +toString() string
        +korteGeboortedatum() string
    }
    class Klas {
        -_naam: string
        -_aantalStudenten: number
        -_studenten: Student[]
        +constructor(naam: string)
        +voegStudentToe(student: Student) boolean
        +getAantalStudenten() number
        +toString() string
    }

    Student "*" *-- "1" Adres : woont op
    Klas "1" *-- "0..30" Student : zit in

Stappenplan

Opdracht a: class Adres

  1. Maak een class Adres aan met de attributen zoals in het klassendiagram weergegeven.
  2. Deze class heeft de volgende methoden:

    1. Constructor: heeft vier argumenten en initialiseert hiermee de attributen.
    2. Methode toString(): geeft een string terug met daarin het adres met de volgende opmaak (voorbeeld):

      Wibautstraat 2, 1091GM Amsterdam
      
    3. Static methode checkPostcode(postcode: string): checkt of een postcode een geldige Nederlandse postcode is. Geeft true terug als de postcode geldig is, anders false. Een postcode is geldig als het 1e karakter van de postcode tussen 1 en 9 zit, het 2e t/m 4e karakter van de postcode tussen 0 – 9 zitten, en het 5e en 6e karakter tussen de ‘A’ en de ‘Z’ zitten.

      • Tip! test als eerste de lengte van de postcode. Een postcode kan alleen geldig zijn als hij uit 6 karakters bestaat.
      • Tip! Je kunt handmatig elk karakter controleren, maar het kan handig zijn om hier een regex(regular expression) toe te passen. Google!
  3. Test deze class door in de index.ts een nieuw adres aan te maken en deze vervolgens af te drukken met behulp van de methode toString().

  4. Test in de index.ts vervolgens ook of de methode checkPostcode(postcode: string) werkt, door deze methode aan te roepen met verschillende geldige en niet geldige postcodes en de uitkomst van de methode af te drukken, bijvoorbeeld met:
const postcode: string = "1234AB"; // geldige postcode
console.log(postcode + ": " + Adres.checkPostcode(postcode));
const postcode2: string = "0123AB";        // ongeldige postcode
console.log(postcode2 + ": " + Adres.checkPostcode(postcode2));
const postcode3: string = "123AB";         // ongeldige postcode
console.log(postcode3 + ": " + Adres.checkPostcode(postcode3));
const postcode4: string = "1234A0";         // ongeldige postcode
console.log(postcode4 + ": " + Adres.checkPostcode(postcode4));

Opdracht b: class Student

  1. Maak een class Student aan met de attributen zoals in het klassendiagram weergegeven.
  2. Deze class heeft de volgende methoden:

    1. Constructor: heeft vijf argumenten en initialiseert hiermee de attributen.
    2. Methode korteGeboortedatum(): geeft een string terug met daarin de datum als dag-maand-jaar, bijvoorbeeld 1-12-1998. Dit is een zogenaamde “helper-method” die handig is om te gebruiken in de methode toString().
    3. Methode toString(): geeft een string representatie terug van een Student met de volgende opmaak (voorbeeld):

      500812345 Jan Janssen (1-12-1998)
      Adres: Wibautstraat 2, 1091GM Amsterdam
      
      • Tip! maak hierbij handig gebruik van de toString()methode van Adres. Schrijf zo min mogelijk dubbele code!
  3. Test deze class door in de index.ts een nieuwe student aan te maken en deze vervolgens af te drukken met behulp van de methode toString(). Gebruik als adres voor de student het adres dat je bij opdracht a hebt aangemaakt.

Opdracht c: class Klas

  1. Maak een class Klas aan met de attributen zoals in het klassendiagram weergegeven.
  2. Deze class heeft de volgende methoden:

    1. Constructor: heeft één argument (naam) en initialiseert hiermee dat attribuut. Een groep begint altijd leeg, dus zorg dat de attributen aantalStudenten en studenten de juiste waarde krijgen.

    2. Methode voegStudentToe(student: Student): voegt de student die als argument wordt meegegeven toe aan de groep. De student wordt dus op de juiste plek in de array gestopt, en de methode geeft dan true terug,

      • Tip! zorg dat je aantalStudenten ook aanpast.
      • Tip! test of de groep vol is. Bij een volle groep mag geen student worden toegevoegd. De methode geeft dan false terug.
      • Tip! gebruik voor het maximale aantal studenten in een klas een constante MAX_AANTAL_STUDENTEN, zodat je bij het testen van de class dit aantal gemakkelijk kunt wijzigen.
    3. Methode getAantalStudenten(): heeft de standaardfunctionaliteit van een getter.

    4. Methode toString(): geeft een string representatie terug van een Klas met de volgende opmaak (voorbeeld):

      Klas IS101 (2 studenten)
      500812345 Jan Janssen (1-12-1998)
      Adres: Wibautstraat 2, 1091GM Amsterdam
      500839104 Piet Pietersen (22-10-1999)
      Adres: Wilhelminalaan 14, 1441EL Purmerend
      

      Dus ook alle studenten uit de klas moeten door toString() worden teruggegeven.

      Maak gebruik van string concatenatie of template strings voor het opbouwen van de return-value.

      • Tip! maak hierbij handig gebruik van de toString()methode van Student. Schrijf zo min mogelijk dubbele code!
  3. Test deze class door in de index.ts een nieuwe klas aan te maken en hier de student die je bij opdracht b hebt aangemaakt aan toe te voegen. Druk vervolgens de klas af met behulp van de methode toString().

  4. Zet vervolgens MAX_AANTAL_STUDENTEN in de class Klas op 1. Probeer vanuit de index.ts een tweede student toe te voegen en druk daarna de klas weer af met behulp van toString(). Gebruik de debugger om te controleren of je methode voegStudentToe() correct werkt. Als het goed is wordt de 2e student niet toegevoegd aan de klas.
  5. Zet vervolgens MAX_AANTAL_STUDENTEN in de class Klas terug op 30 en run je code opnieuw. Als het goed is wordt de 2e student nu wel toegevoegd aan de klas.

Opdracht d: index.ts

Nu alle klassen getest zijn, kun je in de index een applicatie schrijven om de klassenstructuur te gebruiken:

  1. Vraag de gebruiker om de naam van de klas en sla deze op als een object Klas.
  2. Vraag de gebruiker om de studenten in de klas. Gebruik een loop om de gegevens van alle studenten te vragen. Vraag per student studentnummer, voornaam, achternaam, geboortedatum en zijn adresgegevens. Sla elke student op als een object Student en een daaraan gekoppeld object Adres. Voeg de Student toe aan de Klas.

    • Tip! De ingegeven geboortedatum (string), moet je opdelen in dag, maand en jaar om er een Date van te kunnen maken. Je kunt hiervoor bijvoorbeeld de methode split() gebruiken. De strings dag, maand en jaar vervolgens omzetten naar een number kan met de methode parseInt().
  3. Controleer, nadat de gebruiker een postcode heeft ingevoerd, of deze postcode correct is. Gebruik hiervoor de static methode checkPostcode() in Adres.

  4. Zorg dat de loop stopt als de gebruikers als studentnummer het getal 0 invoert, of als het maximale aantal studenten is bereikt.

    • Tip! Gebruik hiervoor de constante MAX_AANTAL_STUDENTEN en de methode getAantalStudenten() van de class Klas.
  5. Print als alle studenten zijn ingevoerd de klas, met alle studenten. Gebruik hiervoor de methode toString() van Klas.

Richtlijnen bij coderen

  • Zorg dat je naam en het doel van het programma bovenin staan.
  • Gebruik de juiste inspringing (indentation) bij de lay-out.
  • Let op juist gebruik hoofdletters en kleine letters.
  • Gebruik goede namen.
  • Voeg waar nodig commentaar toe dat inzicht geeft in je code.
  • Vermijd magic numbers, gebruik constanten.
  • Gebruik de TSDoc tags @author, @param en @return.
  • Denk aan encapsulation, gebruik private waar mogelijk.