Opgave 10 (2025)
Deze 2 opgaven waren onderdeel van de vaardigheidsproefopdracht voor het examen van dit vak (OOP) in juli 2025 (licht aangepast)
Opgave 1 Voetbalteam (12p)
Je bent aangenomen als softwareontwikkelaar bij de Belgische Voetbalbond. Een aantal trainers heeft gevraagd om een digitale toepassing waarmee ze hun teamopstelling kunnen beheren en analyseren. Ze willen niet alleen spelers toevoegen en de sterkte van hun team bekijken, maar ook weten hoeveel hun opstelling waard is — iets wat belangrijk is bij transfers, scouts, en media-aandacht.
Deel 1: Klassenstructuur en gedragsregels (6 punten)
Je systeem moet volgende structuur en logica ondersteunen:
Klasse Speler
Speler
Elke speler op het veld heeft:
Een rugnummer (bijv. 10 voor een spits)
Een naam (bijv. Eden Hazard)
Een kracht, op een schaal van 1 tot 10
Deze gegevens worden opgegeven via een constructor bij het aanmaken van een speler.
De Kracht
van een speler moet steeds tussen 1 en 10 liggen. Als een andere waarde wordt ingegeven, moet het programma een foutmelding geven via een ArgumentOutOfRangeException
.
Elke speler heeft ook een IsBasisSpeler
-eigenschap.
De marktwaarde wordt berekend als kracht × €100.000. En wordt via een readonly property teruggegeven.
Daarnaast moet een static
property aanwezig zijn dat het totaal aantal spelers bijhoudt dat ooit is toegevoegd. Deze teller verhoogt automatisch bij elke creatie van een nieuwe speler.
Klasse Aanvaller
Aanvaller
Een aanvaller is een speler. Een aanvaller heeft een marktwaarde van de waarde van een speler + €50.000.
Klasse Verdediger
Verdediger
Een verdediger is een speler. Een verdediger heeft altijd een vaste marktwaarde van €200.000.
Interface IScouteerbaar
IScouteerbaar
Deze interface definieert spelers waarvan de waarde verborgen blijft tot ze gescout zijn.
Scout()
activeert de werkelijke waarde.AantalScoutPogingen()
telt de leespogingen vóór het scouten.
Klasse GeheimeSpeler
GeheimeSpeler
Deze speler heeft de interface IScouteerbaar
en is een speler.
Toont 0 als marktwaarde zolang hij niet is gescout.
Houdt bij hoe vaak zijn marktwaarde werd opgevraagd vóór het scouten.
Toont zijn echte waarde na het aanroepen van
Scout()
.
Klasse VoetbalTeam
VoetbalTeam
Een team:
Heeft een naam
Bevat maximaal 11 spelers
De methode VoegSpelerToe(speler)
:
Voegt een speler toe tenzij er al 11 spelers zijn
Gooit een
Exception
met boodschap “Team is vol. Speler niet toegevoegd.” als het team vol is.Verhoogt de globale
static
teller bij een succesvolle toevoeging.
De methode ToonOpstelling()
toont:
De teamnaam
Spelers met naam, rugnummer, marktwaarde
Indien
IScouteerbaar
: ook#####X
met het aantal pogingenTotale kracht
Totale marktwaarde (inclusief €100.000 extra voor elke
IScouteerbaar
speler)
Deel 2: Console-applicatie (4 punten)
Bij het opstarten wordt de teamnaam gevraagd.
Hoofdmenu (blijft herhalen)
Speler toevoegen
Opstelling tonen
Programma afsluiten
Alle geheime spelers scouten
Speler toevoegen
Drie stappen:
Kies type speler (Verdediger, Aanvaller, GeheimeSpeler)
Geef naam, rugnummer en kracht (kracht moet tussen 1 en 10)
Indien GeheimeSpeler: vraag of meteen gescout moet worden
Deel 3: Extra functionaliteit (2 punten)
3.1 ToString()
output
ToString()
outputBij gebruik van Console.WriteLine(speler)
:
Toon type, rugnummer, marktwaarde, naam
Indien
GeheimeSpeler
: ook of hij gescout is
3.2 ScoutAlles()
methode
ScoutAlles()
methodeDeze methode scout alle GeheimeSpelers
in een team. Wordt aangeroepen via menu-optie 4.
3.3 totaal aantal spelers
Toon onderaan in het hoofdmenu hoeveel spelers er in totaal al toegevoegd zijn.
Deel 4: Wedstrijdsimulatie (3 punten)
De Belgische Voetbalbond wil ook graag vriendschappelijke wedstrijden kunnen simuleren tussen twee teams. Hiervoor voeg je een nieuwe klasse toe.
Klasse Wedstrijd
Wedstrijd
Een Wedstrijd
simuleert een duel tussen twee voetbalteams.
Eigenschappen:
Thuisploeg
: eenVoetbalTeam
Uitploeg
: eenVoetbalTeam
Constructor:
Neemt twee
VoetbalTeam
-objecten aan en stelt ze in als thuis- en uitploeg.
Methode:
Simuleer()
: bepaalt de winnaar van de wedstrijd.Vergelijk de totale kracht van beide teams.
Het team met de hoogste kracht wint.
Bij een gelijkstand wint het team met de hoogste marktwaarde.
Is ook die gelijk? Dan is het een gelijkspel.
De methode geeft een string terug in volgende stijl:
"Team Gent wint van Team Brugge met kracht 76 tegen 65." Of "Gelijkspel tussen Team Gent en Team Brugge met kracht 70."
Opmerking: deze klasse hoeft niet via het hoofdmenu opgeroepen te worden, maar moet wel instantieerbaar en bruikbaar zijn in code (bv. voor latere uitbreiding)
Opgave 2 Bestandsfilter (4p)
Schrijf een applicatie die aan de gebruiker in de console een folderpath vraagt (bijvoorbeeld “c:”). Vervolgens wordt een grootte in megabyte gevraagd. Vervolgens de applicatie alle bestanden in die folder, en alle subfolders, wiens bestandsgrootte gelijk of meer dan de ingegeven grootte is. De applicatie toont de naam van het bestand, de grootte in MB en de datum waarop het bestand is aangemaakt. Bij het verwerken van de bestanden mogen eventuele uitzonderingen geen impact hebben op de nog te verwerken bestanden. Bestanden die dus niet geopend kunnen worden, worden overgeslagen. De applicatie toont dan wel een melding in de console dat het bestand niet geopend kon worden.
Voorbeeld uitvoer
Tekst die start met ">" is invoer van de gebruiker.
Geef het pad van een folder in:
>c:\temp
Geef de minimum grootte (in megabyte) van bestanden die ik moet tonen:
>50
Bestanden groter dan 50 MB:
Bestand: c:\temp\mycontract.docx
Grootte: 83,58 MB
Aangemaakt op: 2024-09-30 15:19:46
Bestand c:\temp\corruptefile.docx kon niet geopend worden.
Bestand: c:\temp\video\zookeeper.mp4
Grootte: 535,40 MB
Aangemaakt op: 2024-09-30 15:19:46
Bestand: c:\temp\ffmpeg\bin\ffprobe.exe
Grootte: 63,45 MB
Aangemaakt op: 2024-09-30 15:19:48
Last updated
Was this helpful?