Opdracht

Schrijf een programma dat de scores van studenten bijhoudt voor meerdere vakken. Elke student kan meerdere vakken volgen, maar de vakken kunnen verschillen tussen studenten. Studenten kunnen herkansen en het hoogste cijfer telt.

  1. Schrijf een functie met de naam student_data die volgende procedure volgt:
    • Vraag naar het aantal studenten
    • Voor elke student:
      • Vraag je de naam van de student
      • Vraag het aantal vakken dat de student volgt
      • Voor elk vak:
    • Vraag de naam van het vak (gebruik een set om dubbele vakken te voorkomen).
    • Vraag naar het cijfer (op 10) voor dit vak, heeft de student herkansingen gehad, dan moeten de cijfers ingegeven worden als een reeks cijfers gescheiden door een spatie

Deze data moet opgeslagen worden in een dictionary met als keys de studenten en als values een andere dictionary met als keys de vakken en als values een list met all cijfers (dus ook herkansingen) voor dat vak:

De functie geeft de opgebouwede dictionary terug.

  1. Schrijf een functie calculate_average om het gemiddelde cijfer te berekenen van een student, waarbij het hoogste cijfer van elk vak telt. Deze functie krijgt als input de naam van de student en de studentengegevens verkregen met de functie student_data. Naast het gemiddelde geeft de functie ook terug of de student geslaagd is of niet (in de vorm van een string: ‘geslaagd’/’niet geslaagd’). Een student is geslaagd bij een gemiddeld cijfer van 5.5 of hoger.

  2. Schrijf een functie class_stats die, mits de nodig bewerkingen, de volgende gegevens teruggeeft:
    • een set met alle unieke vakken
    • het gemiddelde voor de klas
    • de student met het hoogste gemiddelde
  3. Schrijf een functie correctie die voor een gegeven student en vak toelaat om de scores te corrigeren. Na het ingeven van de student, vraag je naar het vak en geeft een overzicht van de vakken van die student (Dodona zal dit wel niet testen) (zie voorbeeld). De functie zal zal de dictionary updaten met de nieuwe punten (geen return!).

Bouw je hoofdprogramma als volgt op:

  1. Roep functie student_data op
  2. Voor alle studenten in de dictionary met studentengegevens
    1. Roep de functie calculate_average op
    2. druk op het scherm het gemiddelde voor deze student
  3. Roep de functie class_stats op
    1. Druk op het scherm de unieke vakken af (zie voorbeeld)
    2. Druk op het scherm het gemiddelde cijfer van de klas af (zie voorbeeld)
    3. Druk op het scherm de student met het hoogste gemiddelde (zie voorbeeld)
  4. Vraag of er correcties moet uitgevoerd worden (Y/N)
    1. Bij Y wordt wordt de student, het vak en de nieuwe reeks punten gevraagd.
      • Vervolgens wordt gevraagd of het nieuwe overzicht moet getoond worden (Y/N)
      • bij Y wordt het volledige overzicht (zie 2 en 3) met met de nieuw punten getoond
      • bij N wordt er terug gevraagd of er correcties nodig zijn.
    2. by N wordt de gebruiker bedankt voor de ingave (zie voorbeeld)

Voorbeeld (vet + cursief is input)

Hoeveel studenten zijn er? 2
Naam van student 1: Jan
Hoeveel vakken volgt Jan? 2
Voer het 1e vak in: Wiskunde
Voer alle cijfers (op 10) in voor Wiskunde (gescheiden door een spatie): 8
Voer het 2e vak in: Engels
Voer alle cijfers (op 10) in voor Engels (gescheiden door een spatie): 3 7
Naam van student 2: An
Hoeveel vakken volgt An? 3
Voer het 1e vak in: Biologie
Voer alle cijfers (op 10) in voor Biologie (gescheiden door een spatie): 5
Voer het 2e vak in: Wiskunde
Voer alle cijfers (op 10) in voor Wiskunde (gescheiden door een spatie): 1 3
Voer het 3e vak in: Geschiedenis
Voer alle cijfers (op 10) in voor Geschiedenis (gescheiden door een spatie): 6
Gemiddelde cijfers:
Jan heeft een gemiddelde van 7.5 en is geslaagd.
An heeft een gemiddelde van 4.7 en is niet geslaagd.
Unieke vakken in de klas: Biologie, Engels, Geschiedenis, Wiskunde
Gemiddelde cijfer van de klas: 6.1
Student met het hoogste gemiddelde: Jan
Correcties uitvoeren (Y/N): Y
Voor student: Jan
Voor welk vak van student J (Wiskunce, Engels): Wiskunde
Geef de nieuwe reeks punten in van student Jan voor vak W (gescheiden door een spatie): 9
Overzicht met nieuwe resultaten printen (Y/N): Y
Unieke vakken in de klas: B, E, G, W
Gemiddelde cijfers:
Jan heeft een gemiddelde van 8.0 en is geslaagd.
An heeft een gemiddelde van 4.7 en is niet geslaagd.
Gemiddelde cijfer van de klas: 6.3
Student met het hoogste gemiddelde: Jan
Correcties uitvoeren (Y/N): N
Bedankt voor het ingeven van de punten.