OPGELET: Na indienen worden twee types testen uitgevoerd. Het tabblad ‘General’ geeft feedback over definities van instantievariabelen en methodes. Het tabblad ‘Evaluatie na examen’ toont de testen die worden gebruikt bij de evaluatie na de indiening.

Gegeven:

Het python project Aandelen1 wordt gebruikt voor het bijhouden van je portefeuille van aandelen. Elk aandeel heeft een Markt code, een Ticker (i.e. afkorting naam aandeel), een prijs en een hoeveelheid. De aandelen van je portefeuille worden ingelezen via een tekstbestand. Figuur 1 toont de regels van dit bestand:

NASDAQ;NFLX;447.77;15
NASDAQ;AMZN;2640.98;3
NASDAQ;AAPL;351.59;10
NASDAQ;TSLA;991.79;5
NASDAQ;MSFT;194.24;6
NYSE;DIS;117.65;3
NYSE;BAC;25.00;100
NYSE;JPM;99.45;15
NYSE;WMT;119.03;23
NYSE;T;30.25;45

Het project bevat twee klassen. De klasse FileReader leest bij het instantiëren een tekstbestand met een portefeuille volgens het eerder beschreven formaat in (default is dat het bestand “portefeuille.txt”). De interface van de klasse biedt volgende methoden aan:

Zoals onderstaande figuur toont maakt FileReader gebruik van de klasse AandeelData. Elk object van deze laatste klasse stelt de gegevens van één aandeel voor. De klasse heeft volgende methoden:

op de markt NASDAQ zal de key NASDAQ-NFLX aangemaakt worden.

Gevraagd:

Via 10 methodes gaan we aan de klasse AandelenPortefeuille eenvoudige beheerstaken voor een Aandelen portefeuille toevoegen.

Vraag 1 (2 punten)

Creëer een klasse AandelenPortefeuille.

Vraag 2 (2 punten)

Voeg een constructor zonder parameters toe aan de klasse AandelenPortefeuille. Deze constructor zal eerst een nieuw FileReader-object reader en een dictionary portefeuille_map initialiseren als instantievariabelen. Vervolgens zal het de reader gebruiken om de AandeelData-items een voor een toe te voegen aan het portefeuille_map dictionary. De key wordt aangemaakt via de static methode create_key van de klasse AandeelData.

Vraag 3 (2 punten)

Voeg een publieke methode aandeel_aanwezig toe met als parameters een string markt en een string ticker. Indien het aandeel aanwezig is in de instantievariabele portefeuille_map retourneert de methode True, indien niet False. Je kan bepalen of een aandeel aanwezig is door te kijken naar de key van de portefeuille_map instantievariabele.

Vraag 4 (2 punten)

Voeg een publieke methode toevoegen_aandeel toe met als parameter een AandeelData-object. Dit object mag enkel worden toegevoegd indien dit aandeel nog niet aanwezig is in de portefeuille. Indien het aandeel kon worden toegevoegd, retourneert de methode True, indien niet False.

Vraag 5 (2 punten)

Voeg een publieke methode aanpassen_aandeel toe met als parameters een string markt, een string ticker, een float prijs en een int aantal. De methode zal de prijs en aantal van een aandeel aanpassen indien dit aandeel aanwezig is de portefeuille_map collectie. Indien het aandeel niet aanwezig is in de collectie wordt niets aangepast.

Vraag 6 (2 punten)

Voeg een publieke methode waarde_aandeel toe met als parameter een string markt en een string ticker. De methode zal de waarde van een aandeel retourneren als float op basis van de prijs en de hoeveelheid. Indien het aandeel niet aanwezig is in de collectie, retourneert de methode 0.

Vraag 7 (2 punten)

Voeg een publieke methode totale_waarde toe. De methode zal de totale waarde van de portefeuille retourneren als float.

Vraag 8 (2 punten)

Voeg een publieke methode get_aandelen_markt toe met als parameter een marktcode als string. Deze methode retourneert een lijst met AandeelData objecten die genoteerd staan op de Markt die overeenstemt met de gegeven parameter. Indien de markt niet bestaat wordt een lege lijst geretourneerd.

Vraag 9 (2 punten)

Voeg een publieke methode get_kleinste_aandeel toe. Deze methode retourneert de sleutel (markt-aandeel) van het aandeel met de laagste waarde (prijs * hoeveelheid).

Vraag 10 (2 punten)

Voeg een publieke methode rapport toe. Deze methode print een rapport in de console van de volgende vorm:

Portefeuille
----------------
NYSE T  30.25 45
NASDAQ AMZN  2640.98 3
NYSE DIS  117.65 3
NYSE WMT  119.03 23
NASDAQ NFLX  447.77 15
NASDAQ MSFT  194.24 6
NYSE JPM  99.45 15
NASDAQ TSLA  991.79 5
NYSE BAC  25.0 100
NASDAQ AAPL  351.59 10
TOTALE WAARDE: 32723.42