DigiKlantenkaart Deel5

Deel 5: Klasse WinkelApp
Download de interface IWinkelApp.
- Definieer de klasse WinkelApp als implementatie van de interface IWinkelApp.
- Voeg de instantievariabelen toe zoals beschreven in het bovenstaande klassendiagram. De HashMap houdt voor elke klant zijn/haar klantenID bij als sleutel en het bijhorende KlantenKaart object als waarde.
- Definieer de constructors zoals beschreven in het bovenstaande klassendiagram. De constructor zonder parameters initialiseert enkel het veld ‘klanten’ als lege map. De andere constructor heeft twee Strings als parameters en roept hiermee de laadKlanten- en laadWinkel-methodes op.
- Maak een methode laadKlanten die een String als parameter heeft. De methode laad het data bestand (met hashmap serialisatie) met de gegeven naam in. De data zal opgelagen worden in het veld ‘klanten’. Indien het inlezen succesvol verloopt, zal de volgende boodschap weergegeven worden in de console voordat het aantal ingeladen klanten teruggegeven wordt:
Klanten gelezen van bestand [de meegegeven naam van het klanten bestand]. Indien er iets misloopt (bv. indien het data bestand corrupt is), zal een KlantenKaartException gegooid worden met de volgende boodschap als parameter: Fout bij lezen van bestand [meegegeven bestandsnaam].
- Maak een methode laadWinkel die een String als parameter heeft. De methode laad het data bestand met de gegeven naam in. De data zal opgelagen worden in het veld ‘winkel’. Indien het inlezen succesvol verloopt, zal de volgende boodschap weergegeven worden in de console:
Winkel gelezen van bestand [de meegegeven naam van het winkel bestand]. Indien er iets misloopt (bv. indien het data bestand corrupt is), zal een KlantenKaartException gegooid worden met de volgende boodschap als parameter: Fout bij lezen van bestand [meegegeven bestandsnaam].
- Maak een methode getAantalPunten die geen parameters heeft. De methode geeft het aantal verzamelde punten van de ingelogde gebruiker terug bij de ingeladen winkel. Indien de klant nog geen punten verzameld heeft bij een winkel (i.e., er worden voor de winkel geen punten bijgehouden op de klantenkaart), moet 0 teruggegeven worden. Indien er geen winkel ingeladen is, zal een KlantenKaartException gegooid worden met de volgende boodschap:
Geen winkel ingeladen!. Indien er geen klant aangemeld is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen klant aangemeld!.
- Maak een methode aanmeldenKlant die een String als parameter heeft. De methode meldt de klant met de gegeven ID aan en geeft daarna de volgende welkom boodschap terug:
Welkom [voornaam aangemelde klant] [achternaam aangemelde klant]
Aantal punten verzameld: [aantal verzamelde punten door de aangemelde klant in de ingeladen winkel]"
[Beloning tekst van de ingeladen winkel]
De placeholders zullen vervangen worden met de beschreven waarden. Indien er geen winkel ingeladen is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen winkel ingeladen!. Indien er geen klant gevonden kan worden met de gegeven klantID, zal een KlantenKaartException gegooid worden met de volgende boodschap: Klant '[meegegeven klantID]' niet gevonden!. De placeholder zal vervangen worden door de meegegeven klantID.
- Maak een methode registrerenTransactie die een double als parameter heeft. De methode registreert een transactie (= aankoop) van het gegeven bedrag voor de aangemelde klant in de ingeladen winkel en geeft daarna de volgende boodschap terug:
[voornaam aangemelde klant] [achternaam aangemelde klant], je transactie werd geregistreerd!!!
Aantal punten verzameld: [aantal verzamelde punten door de aangemelde klant in de ingeladen winkel]"
De placeholders zullen vervangen worden met de beschreven waarden. Indien er geen winkel ingeladen is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen winkel ingeladen!. Indien er geen klant aangemeld is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen klant aangemeld!.
- Maak een methode registrerenBeloning die een int als parameter heeft. De methode registreert dat de klant een beloning heeft ontvangen ter waarde van het meegegeven aantal punten (dus zijn zijn/haar verzamelde punten worden verminderd met het meegegeven aantal) en geeft daarna de volgende boodschap terug:
[voornaam aangemelde klant] [achternaam aangemelde klant], je beloning werd geregistreerd!!!
Aantal punten verzameld: [aantal verzamelde punten door de aangemelde klant in de ingeladen winkel]"
De placeholders zullen vervangen worden met de beschreven waarden. Indien er geen winkel ingeladen is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen winkel ingeladen!. Indien er geen klant aangemeld is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen klant aangemeld!. Indien de aangemelde klant onvoldoende punten heeft bij de ingeladen winkel om de beloning van het meegegeven aantal punten te registreren, zal een KlantenKaartException gegooid worden met de volgende boodschap: U heeft slechts [het aantal punten beschikbaar bij de ingeladen winkel] punten beschikbaar!!.
- Maak een methode getEmailAdressenKlanten die geen parameters heeft. De methode geeft de emailsadressen terug van de klanten van de ingeladen winkel. Enkel de klanten die al ooit iets gekocht hebben in die winkel (en dus ooit punten verzameld hebben) mogen in de lijst voorkomen. De emailadressen worden gescheiden door
; (dus CSV formaat) zoals in dit voorbeeld:
[email protected];[email protected];[email protected];[email protected]
Indien de ingeladen winkel nog geen klanten heeft, zal een lege String teruggegeven worden.
- Maak een methode bewaarKlanten die een String als parameter heeft. De methode slaagt de instantievariabele klanten als data object op in een bestand met de meegegeven naam en geeft vervolgens het aantal klanten terug die opgeslagen werden. Indien er iets misloopt bij het opslagen van de klanten, zal een een KlantenKaartException gegooid worden met de volgende boodschap:
Fout bij schrijven naar bestand [klantenBestand]. De placeholder zal vervangen worden door de meegegeven naam van het bestand.
- Maak een methode bewaarWinkel die een String als parameter heeft. De methode slaagt de instantievariabele winkel als data object op in een bestand met de meegegeven naam en print vervolgens de volgende tekst uit in de console:
Winkel weggeschreven naar bestand [winkelBestand]. De placeholder zal vervangen worden door de meegegeven naam van het bestand. Indien er iets misloopt bij het opslagen van de winkel, zal een een KlantenKaartException gegooid worden met de volgende boodschap: Fout bij schrijven naar bestand [winkelBestand]. De placeholder zal vervangen worden door de meegegeven naam van het bestand. Indien er geen winkel ingeladen is, zal een KlantenKaartException gegooid worden met de volgende boodschap: Geen winkel ingeladen!.
- Maak een methode printOverzichtGespaardePunten die een String als parameter heeft. De methode geeft een overzicht terug van de gespaarde punten door de klant met de meegegeven klantID (per klant enkel de winkels waar hij/zij ooit al eens punten voor verzameld heeft). Hieronder achtereenvolgens twee voorbeelden: het eerste voor een klant die al punten verzameld heeft, het tweede voor een klant zonder punten.
Voorbeeld 1:
Overzicht voor Lynn De Win
-------------
Aldi: 213 punten
Lidl: 45 punten
Carrefour: 729 punten
Delhaize: 3 punten
Voorbeeld 2:
Jos De Vos heeft nog geen punten verzameld
Indien er geen klant gevonden kan worden met de gegeven klantID, zal een KlantenKaartException gegooid worden met de volgende boodschap: Klant '[meegegeven klantID]' niet gevonden!. De placeholder zal vervangen worden door de meegegeven klantID.
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).
- test04constructor: test of de constructor het gewenste effect heeft (indien van toepassing).
- test05constructor_String: test de constructor met een String als parameters.
- 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.
- test08laadKlanten: test de laadKlanten-methode.
- test09laadWinkel: test de laadWinkel-methode.
- test10getAantalPunten: test de getAantalPunten-methode.
- test11aanmeldenKlant: test de aanmeldenKlant-methode.
- test12registrerenTransactie: test de registrerenTransactie-methode.
- test13registrerenBeloning: test de registrerenBeloning-methode.
- test14getEmailAdressenKlanten: test de getEmailAdressenKlanten-methode.
- test15bewaarKlanten: test de bewaarKlanten-methode.
- test16bewaarWinkel: test de bewaarWinkel-methode.
- test17printOverzichtGespaardePunten: test de printOverzichtGespaardePunten-methode.