1.3-Object-Georienteerd-Programmeren

Snoepautomaat

Bij deze opdracht modelleren we een snoepautomaat. Iedere snoepautomaat bestaat uit vakjes. In een vakje zit producten van hetzelfde soort (bijvoorbeeld Mars of Coca Cola). Er zijn twee typen producten aanwezig in de soepautomaat: frisdrank blikjes en snoep. Van ieder product moet er opgeslagen worden: de naam en de prijs. Daarnaast moeten we bij de frisdrank blikjes opslaan: de inhoud in milliliters, hoeveelheid suiker in gram en of er cafeine in zit. Bij snoep moet er nog opgeslagen worden wat het gewicht is in gram.

Als gebruiker kun je een product uit de automaat halen door op de automaat in te toetsen uit welk vakje je een product wilt halen. De snoepautomaat heeft 20 vakjes (van index 0 t/m 19). Ieder vakje kan meerdere exemplaren van hetzelfde product bevatten (bijvoorbeeld 8x een mars).

De machine heeft volgende functionaliteit:

Daarnaast moet de automaat goede foutafhandeling hebben een duidelijke printReport() methode, waarmee de inhoud van de automaat geprint wordt (zie voorbeeld). Implementeer de klasse snoepautomaat en schrijf de benodigde klassen om de producten en de vakinhoud op te kunnen slaan.

Je hoeft je verder geen zorgen te maken over de interactie met het systeem. Voor deze opdrachten houden we het gewoon bij de code en een report-methode. Tevens hebben wij weer een TestApplication klasse geschreven waarmee je je oplossing kan testen.

Voorbeeld

Deze code:

public static void main(String[] args) {
    CandyMachine machine = new CandyMachine();

    // Add drinks
    machine.addProduct(0, new Drink("Coca Cola", 200, 300, 20, false));
    machine.addProduct(1, new Drink("RedBull", 250, 300, 100, true));

    // Add snacks
    machine.addProduct(2, new Candy("M&M's", 150, 230));
    machine.addProduct(3, new Candy("Mars", 100, 230));
    machine.addProduct(4, new Candy("Twix", 120, 230));
    machine.addProduct(5, new Candy("Lion", 125, 230));
    machine.addProduct(6, new Candy("Snickers", 150, 230));

    for (int i = 0; i < 3; i++) {
        machine.takeItem(0);
        machine.takeItem(1);
    }

    machine.printReport();
}

heeft onderstaande resultaat opgeleverd:

CandyMachine status: 

Compartment 0: Coca Cola (€2.0) [2 items remaining]
Compartment 1: RedBull (€2.5) [2 items remaining]
Compartment 2: M&M's (€1.5) [5 items remaining]
Compartment 3: Mars (€1.0) [5 items remaining]
Compartment 4: Twix (€1.2) [5 items remaining]
Compartment 5: Lion (€1.25) [5 items remaining]
Compartment 6: Snickers (€1.5) [5 items remaining]
Compartment 7: Not in use
Compartment 8: Not in use
Compartment 9: Not in use
Compartment 10: Not in use
Compartment 11: Not in use
Compartment 12: Not in use
Compartment 13: Not in use
Compartment 14: Not in use
Compartment 15: Not in use
Compartment 16: Not in use
Compartment 17: Not in use
Compartment 18: Not in use
Compartment 19: Not in use

Total profit: €13,50