Oefeningen H9
Week 1
RapportModule (Essential)
Doel: Ontwerp een klasse die een graad berekent op basis van een behaald percentage.
Specificaties:
Klassenaam:
RapportProperties:
Percentage(type:int): Het behaalde punt.
Methoden:
PrintGraad()(type:void): Toont de graad in de console.
Werking (Business Rules): De methode PrintGraad controleert de waarde van Percentage en toont de bijbehorende tekst:
Minder dan 50
"Niet geslaagd"
50 t.e.m. 68
"Voldoende"
69 t.e.m. 75
"Onderscheiding"
76 t.e.m. 85
"Grote onderscheiding"
Meer dan 85
"Grootste onderscheiding"
Voorbeeldgebruik: Test je klasse met volgende code in Main:
Controleer je oplossing ook via Test => Run All Tests.
Nummers (Essential)
Doel: Maak een rekenmachine-klasse die bewerkingen uitvoert op twee getallen.
Specificaties:
Klassenaam:
NummerBerekenaarProperties:
Getal1(type:int): Het eerste getal.Getal2(type:int): Het tweede getal.
Methoden:
Som(): returntypeintVerschil(): returntypeintProduct(): returntypeintQuotient(): returntypedouble
Werking:
Som,Verschil,Product: Voeren de standaard wiskundige bewerking uit (+,-,*) en geven het resultaat terug.Quotient: DeeltGetal1doorGetal2.Let op: Delen door nul mag niet.
Als Getal2 gelijk is aan 0: Toon foutboodschap "Kan niet delen door 0" in de console EN geef
0.0terug.Anders: Geef het resultaat van de deling terug.
Voorbeeldgebruik:
Studentklasse (Essential)
Doel: Sla gegevens van een student op en bereken het gemiddelde.
Specificaties:
Klassenaam:
StudentEnum:
Klassen(definieer deze buiten de klasse, mogelijke waarden:TI1,TI2,TI3)Properties:
Naam(string)Leeftijd(int)Klas(Klassen- gebruik de enum hierboven)PuntenCommunicatie(int)PuntenProgrammingPrinciples(int)PuntenWebTech(int)
Methoden:
BerekenGemiddelde(): Geeft het gemiddelde van de 3 puntenvakken terug alsdouble.GeefOverzicht(): Toont een rapport in de console (zie voorbeeld).
Voorbeeldgebruik:
Verwachte Output:
PizzaTime
Doel: Maak een klasse Pizza die waarden controleert voordat ze worden opgeslagen.
Specificaties:
Klassenaam:
PizzaProperties (Full Properties met validatie):
Toppings(string): Beschrijving van de toppings.Diameter(int): Doorsnede in cm.Price(double): Prijs in euro.
Validatie Regels (in de set van de properties): Bij het toewijzen van een nieuwe waarde (value), controleer het volgende. Indien de waarde niet geldig is, doe je niets (de oude waarde blijft behouden).
Price en Diameter: Moeten groter zijn dan 0. (Indien
value <= 0-> negeer).Toppings: Mag niet leeg zijn. (Gebruik
string.IsNullOrWhiteSpace(value)om te controleren. Indientrue-> negeer).
Voorbeeldgebruik: Maak in je Main enkele pizza's aan en probeer foute waarden in te stellen om te testen of ze inderdaad geweigerd worden.
Figuren
Doel: Werken met overerving of losse klassen (hier losse klassen) en validatie.
Specificaties:
Klasse
Property
Type
Validatie in set
Rechthoek
Lengte
int
Indien value < 1, stel in op 1. Anders value.
Breedte
int
Indien value < 1, stel in op 1. Anders value.
Methode: ToonOppervlakte()
void
Berekent Lengte * Breedte en toont resultaat.
Driehoek
Basis
int
Indien value < 1, stel in op 1. Anders value.
Hoogte
int
Indien value < 1, stel in op 1. Anders value.
Methode: ToonOppervlakte()
void
Berekent (Basis * Hoogte) / 2 en toont resultaat.
Let op: Rechthoek en Driehoek zijn hier twee aparte klassen en hebben niets met elkaar te maken, behalve dat ze toevallig gelijkaardige methoden hebben.
Opdracht: Maak van elke figuur een instantie in je Main en roep ToonOppervlakte aan.
Week 2
Bibliotheek (Essential)
Doel: Beheer het uitlenen van boeken met datums.
Specificaties:
Klassenaam:
BibBoekProperties:
Ontlener(string): Naam van de ontlener. Standaardwaarde:"onbekend".Uitgeleend(DateTime): Datum van uitlening.Accessors:
private get,public set.Initialisatie: Stel in de constructor (of bij declaratie) standaard in op
DateTime.Now.
InleverDatum(DateTime): Readonly property.Logica: Geeft altijd de datum
Uitgeleend+ 14 dagen terug.
Methoden:
VerlengTermijn(int aantalDagen)(void): Verlengt de uitleentermijn.Logica: Tel
aantalDagenop bij de huidigeUitgeleenddatum.
Voorbeeldgebruik: Test je werken met datums door enkele boek-objecten aan te maken.
BankManager (Essential)
Deel 1: Basisrekening
Specificaties:
Klassenaam:
RekeningVariabelen:
balans(int): Houdt het saldo bij (private field).
Properties:
NaamKlant(string): Autoproperty.RekeningNummer(string): Autoproperty.Balans(int): Readonly property die het veldbalansteruggeeft.
Methoden:
StortGeld(int bedrag): Voegtbedragtoe aanbalans.HaalGeldAf(int bedrag):Indien
bedrag > balans: Haal de volledige rest van de rekening af (zetbalansop 0), toon fout "Rekening leeg nu" en returneer de rest.Indien
bedrag <= balans: Verminderbalansmetbedragen returneerbedrag.
ToonInfo(): Toont naam, rekeningnummer en huidige balans.
Deel 2: Rekeningstaat
Voeg functionaliteit toe om een rekening te blokkeren.
Extra Specificaties:
Enum:
RekeningStaat(waarden:Geldig,Geblokkeerd).Property:
Staat(RekeningStaat): Autoproperty metprivate set.Methode:
VeranderStaat(): Wisselt de staat om (Geldig -> Geblokkeerd, en omgekeerd).
Gewijzigd Gedrag: Pas de methoden van Deel 1 aan met deze regels:
StortGeld
Voer storting uit.
Toon error: "Gaat niet. Rekening geblokkeerd."
HaalGeldAf
Voer afhaling uit (zie regels Deel 1).
Extra: Als balans op 0 komt door afhaling -> Zet Staat automatisch op Geblokkeerd.
Toon error: "Gaat niet. Rekening geblokkeerd."
Testscenario:
Maak rekeningen aan met geld.
Schrijf over van rek1 naar rek2:
rek2.StortGeld(rek1.HaalGeldAf(300));Test blokkering door over de limiet te gaan.
Persoon (Essential)
Specificaties:
Klassenaam:
PersoonProperties:
Voornaam(string)Achternaam(string)GeboorteDatum(DateTime): Full property.Validatie (in set): De datum moet liggen tussen
01/01/1990enDateTime.Today.Bij ongeldige invoer: Stel in op
DateTime.Today.
Methoden:
BerekenLeeftijd(): Geeft leeftijd (int) terug op basis van verschil tussen vandaag enGeboorteDatum.
Verjaardag
Doel: Bereken hoelang het duurt tot de volgende verjaardag.
Vereisten:
Vraag de gebruiker om een geboortedatum (dag/maand).
Gebruik
DateTimeenTimeSpan.Toon:
Welke dag van de week (bv. maandag) de volgende verjaardag is.
Hoeveel dagen wachten dit nog is.
Tip voor dagnaam:
Voorbeeld:
Sports
Sportspeler
Maak een klasse die een speler voorstelt.
Optie A: Kies zelf Kies je favoriete sport en bedenk zelf 4 eigenschappen (zoals positie, rugnummer, ...) en 2 acties.
Optie B: Voorbeeld (Voetballer) Gebruik deze specificaties als je geen eigen sport wil kiezen.
Klasse:
VoetballerProperties:
Naam(string)Rugnummer(int) - Validatie: tussen 1 en 99.Positie(string) - "Aanvaller", "Middenvelder", "Verdediger".IsKapitein(bool)
Methoden:
StelIn(string naam, int rugnummer, string positie, bool isKapitein): Stelt alle properties in.SchietOpDoel(): Toont tekst "Naam schiet op doel!".MaakOvertreding(): Toont tekst "Naam krijgt gele kaart.".
Opdracht: Maak een console-applicatie, maak enkele spelers aan, en roep de methoden aan.
Dobbelstenen
Doel: Simuleer het werpen van twee dobbelstenen.
Specificaties:
Klassenaam:
DobbelstenenMethoden:
WerpEnTel6()(void)
Werking (WerpEnTel6):
Maak een lus die 1000 keer herhaalt.
In elke iteratie:
Genereer twee willekeurige getallen tussen 1 en 6 (gebruik
Random).Controleer of beide getallen 6 zijn.
Indien ja: tel 1 op bij een teller.
Na de lus: Toon het totaal aantal keer dat dubbel-6 is gegooid op het scherm.
De Campingmanager: "Het Nullpointerke" (Combined Essential)
Scenario: Je bent zojuist aangenomen als lead developer voor Camping "Het Nullpointerke". De eigenares, Gerda, doet haar boekingen momenteel nog op bierviltjes, maar sinds de doorbraak van "Glamping" verliest ze het overzicht. Ze heeft vooral problemen met gasten die bij het uitchecken niet genoeg geld blijken te hebben, en ze vergeet vaak de seniorenekorting toe te passen (wat tot boze bejaarden aan de receptie leidt).
Aan jou de taak om een digitaal boekingssysteem te bouwen dat deze problemen oplost.
Doel: Ontwerp een klasse Boeking die fungeert als de digitale receptioniste. De klasse moet invoer streng valideren (Gerda houdt van orde), prijzen berekenen op basis van luxe-niveau, en controleren of de gast wel kan betalen voordat de boeking definitief wordt.
Specificaties:
De Accommodatie (Enum)
Definieer een enum
VerblijfTypemet opties:Tentplek(basic),Stacaravan(comfort), enLuxeChalet(voor de echte IT-managers).
De Boeking (Klasse)
Klassenaam:
BoekingProperties (met Validatie):
Hoofdboeker(string): De naam van de gast. Mag niet leeg zijn. Als iemand een lege naam opgeeft, noem je hem "Onbekende Gast".GeboorteDatum(DateTime): Mag niet in de toekomst liggen. (Tijdreizigers worden niet toegelaten). Indien fout: stel in op vandaag.HuidigBudget(double): De inhoud van de portemonnee van de gast. Mag niet negatief zijn bij het instellen (geen schulden bij aankomst!).Type(VerblijfType): Het gekozen verblijf.CheckInDatum(DateTime): Wordt bij het aanmaken van het object (in de constructor) standaard op Vandaag gezet. (We boeken enkel last-minute).
Methoden:
BerekenTotaalPrijs(int aantalNachten)(returntype:double):Basisprijzen: Tentplek = €25, Stacaravan = €50, LuxeChalet = €95 (prijzen per nacht).
Korting: Gerda heeft een zwak voor gepensioneerden. Is de gast ouder dan 60 jaar? Geef dan 15% korting op het totaalbedrag.
BevestigBoeking(int aantalNachten)(returntype:void):Dit is de grote finale. Roep
BerekenTotaalPrijsaan om te weten wat het kost.Check: Heeft de gast genoeg
HuidigBudget?Scenario A (Genoeg geld):
Trek het bedrag af van het
HuidigBudget.Bereken de uitcheck-datum (
CheckInDatum+ aantal nachten).Toon in de console: "Boeking geslaagd voor [Naam]! U checkt uit op [Datum]. Restbudget: €[Bedrag]".
Scenario B (Te weinig geld):
Toon in de console: "Helaas [Naam], dit kost €[Prijs], maar u heeft slechts €[Budget]. Ga eerst langs de bankautomaat."
Voorbeeldgebruik (in je Main):
Last updated
Was this helpful?

