Deze opgave is het tweede deel van de Puntenboek-opgave.

Jouw score voor deze reeks?

In deze opgave zal je, gespreid over 2 deelopgaves, een programma maken waarin je de punten van studenten kan beheren. Nadat je in het eerste deel een Student hebt gemodelleerd, zal je in de deze deelopgave je Student-klasse gebruiken om schoolresultaten op te vragen en te tonen.

Opgave

Gradebook

Aangezien datastructuren buiten de scope van deze cursus vallen, kun je een implementatie van de Gradebook-klasse downloaden die reeds voor jou werd gemaakt: Gradebook.java1. Deze klasse maakt gebruik van jouw Student-klasse uit de vorige opgave, bevat een constructor die geen argumenten vereist en beschikt over volgende methoden. Deze klasse mag je NIET aanpassen.

// Vraag de gemiddelde score op voor het meegegeven vak.
double getAverageScore(String course);

// Vraag de gemiddelde score op voor de meegegeven student.
double getAverageScore(Student student);

// Vraag de score op voor de gegeven student, voor het gegeven vak.
double getScore(String course, Student student);

// Vult de score in voor de gegeven student, voor het gegeven vak.
void setScore(String course, Student student, double score);

Taak

Schrijf een Java programma (Grades.java) dat een main()-methode heeft, waarin je via een Scanner gegevens opvraagt aan de gebruiker en deze opslaat in een object van de Gradebook-klasse, om vervolgens de gemiddelde scores te printen. Je programma moet volgende flow volgen, bekijk ook zeker de onderstaande voorbeelduitvoer voor extra verduidelijkingen.

  1. Vraag het aantal studenten, het aantal schoolvakken, gevolgd door de naam van elk schoolvak (bijvoorbeeld: Wiskunde, Nederlands en Fysica).
  2. Vraag voor elke student zijn naam, leeftijd en woonplaats op, gevolgd door zijn score voor elk van de schoolvakken.
  3. Print voor elk vak de gemiddelde score.

Belangrijk: Inlezen van getallen

De nextInt()-methode van de Scanner-klasse houdt geen rekening met het end-of-line teken (\n) en werkt dus niet correct wanneer je 2 getallen na elkaar wil inlezen die niet op dezelfde regel staan. Om alle problemen te vermijden, kun je doubles en integers inlezen door de nextLine()-methode van de Scanner-klasse te gebruiken. Dit geeft je een String, die je naar een double of int kan converteren door respectievelijk Double.parseDouble() en Integer.parseInt() te gebruiken.

Voorbeeld

Scanner keyboard = new Scanner(System.in);
int intGetal = Integer.parseInt(keyboard.nextLine());
int doubleGetal = Double.parseDouble(keyboard.nextLine());

Voorbeelduitvoering

De tekst in het rood stelt invoer van de gebruiker voor (deze wordt niet uitgeprint door je programma).

Hoeveel vakken zijn er?
3
Wat is de naam van het 1e vak?
Defence Against the Dark Arts
Wat is de naam van het 2e vak?
Potions
Wat is de naam van het 3e vak?
Transfiguration
Hoeveel studenten zijn er?
2
Hoe heet de 1e student?
Harry
Hoe oud is Harry?
16
Waar woont Harry?
Little Whinging
Welke score behaalde Harry voor Defence Against the Dark Arts?
18
Welke score behaalde Harry voor Potions?
14
Welke score behaalde Harry voor Transfiguration?
10
Hoe heet de 2e student?
Ron
Hoe oud is Ron?
17
Waar woont Ron?
The Burrow
Welke score behaalde Ron voor Defence Against the Dark Arts?
12
Welke score behaalde Ron voor Potions?
8
Welke score behaalde Ron voor Transfiguration?
4
2 studenten scoren gemiddeld 15.0 voor Defence Against the Dark Arts.
2 studenten scoren gemiddeld 11.0 voor Potions.
2 studenten scoren gemiddeld 7.0 voor Transfiguration.
Harry scoort gemiddeld 14.0.
Ron scoort gemiddeld 8.0.

Hierbij nog wat uitleg over de Dodona-testen voor deze oefening: