Cesuur2 Deel 1
Bij de toepassing van een hogere cesuur moet je meer dan de traditionele 50 % van de vragen juist beantwoorden om te kunnen slagen. De cesuur of slaaggrens wordt hoger gelegd om te compenseren voor vragen die je juist hebt beantwoord door te gokken. Bij een examen met allemaal vragen met vier antwoordmogelijkheden zal je bijvoorbeeld 25 van de 40 vragen juist moeten beantwoorden om het examencijfer 10/20 te behalen.
Deel 1: Klasse MCExamen (6pt)
Download de klassen Student
en MCVraag
. Zet deze in de default package (= rechtstreeks in de ‘src’-map van je NetBeans project) en werk ook hierin verder.
Elke MCVraag bevat een boolean array correct waarin wordt aangegeven welke antwoorden voor deze vraag correct zijn. BVB: [true, false, false, true]
wil zeggen dat antwoord[0]
en antwoord[2]
correct zijn voor deze vraag. De opdracht is nu om de klassen MCExamen en MCExamenStudent te maken, die het mogelijk maken om de vragen van een multiple choice examen in te lezen en de antwoorden van een student te verwerken.
De klasse MCExamen bevat de volgende instantievariabelen:
- naamVak houdt de naam bij van het vak waaraan het examen gelinkt is.
- vragen die een collectie van MCVraag-objecten bijhoudt. Er is geen bovengrens voor het aantal MCVraag objecten die bijgehouden kunnen worden en het moet mogelijk zijn om dynamisch nog extra MCVraag objecten toe te voegen aan de instantievariabele of ze te verwijderen (hiervoor hoef je echter geen extra methodes te voorzien). Zorg ervoor dat de objecten in de collectie in een bepaalde volgorde bijgehouden worden (dus dat ze een index hebben).
- hogereCesuur toe die aangeeft (waar/nietwaar) of voor dit examen al dan niet een hogere cesuur wordt toegepast.
De klasse MCExamen bevat de volgende constructor en methodes:
- Voeg een constructor toe met als parameter een String, een File-object en een boolean. De constructor initialiseert de instantievariabelen naamVak en hogereCesuur aan de hand van de meegegeven String en boolean en de instantievariabele vragen als lege collectie. Vervolgens roept deze de leesVragen-methode op met het meegegeven bestand. Nadien geeft de methode een boodschap weer in de console van de vorm:
[het aantal ingeladen vragen] MC vragen ingeladen!
. De placeholder wordt vervangen door het aantal MCVraag-objecten die ingeladen zijn door de leesVragen-methode.
- Voeg accessor-methodes toe voor de instantievariabelen.
(1,5 punt)
- Voeg een methode leesVragen toe zonder returntype en met als parameter een File-object. Het File-object verwijst naar een binair bestand waarin een ArrayList met MCVraag-objecten werd opgeslagen. De methode vult de instantievariabele vragen door de ArrayList in te lezen.
Indien het meegegeven bestand niet gevonden kan worden, wordt volgende boodschap uitgeprint in de console: Het bestand '[naam van het meegegeven bestand]' kan niet gevonden worden!
. De placeholder wordt vervangen door de naam van het meegegeven bestand (dus enkel de naam, niet het pad).
Indien er iets anders fout loopt bij het inlezen van het bestand (maar het bestand dus wel gevonden kon worden), wordt volgende boodschap uitgeprint in de console: Er is een probleem bij het lezen van het bestand '[naam van het meegegeven bestand]'!
. De placeholder wordt vervangen door de naam van het meegegeven bestand (dus enkel de naam, niet het pad).
Je kan het bestand mcvragen.bin
downloaden om je methode te testen. Dit bestand bevat data over 10 multiple choice vragen (maar de methode moet uiteraard ook werken voor bestanden met meer of minder vragen!).
(1,5 punt)
- Voeg een methode getAantalVragen toe die het aantal vragen retourneert.
- Voeg een methode getAantalAntwoordenVanVraag toe met als argument een geheel getal die het vraagnummer voorstelt. De methode retourneert het aantal antwoordmogelijkheden voor de vraag die bij dit nummer hoort.
(0,5 punt)
- Voeg de methode bepaalScoreZonderCesuur toe. Deze methode heeft als argument een int die aangeeft hoeveel correcte antwoorden men heeft voor dit examen en retourneert het eindcijfer (als double), op 20, indien er geen cesuur toegepast hoort te worden (= 20 * [aantal vragen correct] / [totaal aantal vragen]). Het eindcijfer dat wordt geretourneerd is steeds mathematisch afgerond tot op twee cijfers na de komma.
(0,5 punt)
- Voeg een methode bepaalHogereCesuur toe. Deze methode retourneert de hogere cesuur (als double) door het toepassen van de onderstaande formule (links) op de data in de instantievariabelen.
(1 punt)
- Voeg de methode bepaalScoreMetCesuur toe. Deze methode heeft als argument een int die aangeeft hoeveel correcte antwoorden men heeft voor dit examen en retourneert het eindcijfer (als double) door toepassen van de hogere cesuur op basis van onderstaande formule (rechts). Het eindcijfer dat wordt geretourneerd is steeds mathematisch afgerond tot op twee cijfers na de komma. Indien op basis van de formule een negatief getal wordt bekomen, wordt 0 geretourneerd.
(1 punt)
Hierbij nog wat uitleg over de Dodona-testen voor deze oefening:
- test00objectConcept: test of de ingediende klasse de verwachte de klasse definitie heeft (interface/abstracte klasse/klasse/enum/…).
- test01inheritance: test of de ingediende klasse de verwachte superklasse heeft en de verwachte interfaces implementeert.
- test02variables_presence: test of de ingediende klasse de verwachte instantievariabelen en statische variabelen definieert.
- test03variables_staticInitialValue: test of de statische variabelen van de klasse geinitialiseerd worden met de verwachte waarde (indien van toepassing).
- test04constructorsPresence: test of de ingediende klasse de verwachte constructor(en) definieert (= test geen effect!) (indien van toepassing).
- test05constructor: test of de constructor het gewenste effect heeft (indien van toepassing).
- test06methodsPresent: test of de verwachte methodes aanwezig zijn in de ingediende klasse en of de methode definities overeenkomen met de verwachte definities (= test geen effect!).
- test07accessorsMutators: test of de ingediende klasse de al dan niet verwachte accessor- en mutatormethodes definieert en of deze het verwachte effect hebben.
- test08leesVragen: test de leesVragen-methode.
- test09leesVragen_zonderExceptions: test de leesVragen-methode enkel met scenario’s waarin geen exceptions verwacht worden.
- test10leesVragen_enkelExceptions: test de leesVragen-methode enkel met scenario’s waarin een exception verwacht wordt.
- test11leesVragen_enkelFileNotFoundException: test de leesVragen-methode enkel voor scenario’s waarin een FileNotFoundException verwacht wordt.
- test12getAantalVragen: test de getAantalVragen-methode.
- test13getAantalAntwoordenVanVraag: test de getAantalAntwoordenVanVraag-methode.
- test14bepaalScoreZonderCesuur: test de bepaalScoreZonderCesuur-methode.
- test15bepaalHogereCesuur: test de bepaalHogereCesuur-methode.
- test16bepaalScoreMetCesuur: test de bepaalScoreMetCesuur-methode.