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 BlueJ 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:

Gevraagd:

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

Vraag 1 (2 punten)

Voeg een klasse AandelenPortefeuille toe met als instantievariabelen een FileReader reader en een HashMap portefeuilleMap met een String als key type en AandeelData als value type.

Vraag 2 (2 punten)

Voeg een constructor zonder parameters toe aan de klasse AandelenPortefeuille. Deze constructor zal de reader en de portefeuilleMap instantievariabelen eerst initialiseren. Vervolgens zullen via het reader object de AandeelData entries één voor één worden toegevoegd aan de HashMap portefeuilleMap. De key wordt aangemaakt via de static methode createKey van de klasse AandeelData.

Vraag 3 (2 punten)

Voeg een publieke methode aandeelAanwezig toe met als parameters een String markt en een String ticker. Indien het aandeel aanwezig is in de instantievariabele portefeuilleMap retourneert de methode true, indien niet false. Je kan bepalen of een aandeel aanwezig is door te kijken naar de key van de portefeuilleMap instantievariabele.

Vraag 4 (2 punten)

Voeg een publieke methode toevoegenAandeel 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 aanpassenAandeel toe met als parameters een String markt, een String ticker, een double prijs en een int aantal. De methode zal de prijs en aantak van een aandeel aanpassen indien dit aandeel aanwezig is de portefeuilleMap collectie. Indien het aandeel niet aanwezig is in de collectie wordt niets aangepast.

Vraag 6 (2 punten)

Voeg een publieke methode waardeAandeel toe met als parameter een String markt en een String ticker. De methode zal de waarde van een aandeel retourneren als double 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 totaleWaarde toe. De methode zal de totale waarde van de portefeuille retourneren als double.

Vraag 8 (2 punten)

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

Vraag 9 (2 punten)

Voeg een publieke methode getKleinsteAandeel 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