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

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

Een aanvaller is een speler. Een aanvaller heeft een marktwaarde van de waarde van een speler + €50.000.

Klasse Verdediger

Een verdediger is een speler. Een verdediger heeft altijd een vaste marktwaarde van €200.000.

Interface 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

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

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:

  1. De teamnaam

  2. Spelers met naam, rugnummer, marktwaarde

  3. Indien IScouteerbaar: ook #####X met het aantal pogingen

  4. Totale kracht

  5. 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)

  1. Speler toevoegen

  2. Opstelling tonen

  3. Programma afsluiten

  4. Alle geheime spelers scouten

Speler toevoegen

Drie stappen:

  1. Kies type speler (Verdediger, Aanvaller, GeheimeSpeler)

  2. Geef naam, rugnummer en kracht (kracht moet tussen 1 en 10)

  3. Indien GeheimeSpeler: vraag of meteen gescout moet worden

Deel 3: Extra functionaliteit (2 punten)

3.1 ToString() output

Bij gebruik van Console.WriteLine(speler):

  • Toon type, rugnummer, marktwaarde, naam

  • Indien GeheimeSpeler: ook of hij gescout is

3.2 ScoutAlles() methode

Deze 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

Een Wedstrijd simuleert een duel tussen twee voetbalteams.

Eigenschappen:

  • Thuisploeg: een VoetbalTeam

  • Uitploeg: een VoetbalTeam

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?