PO Informatica: PDA van een ober

Status
Niet open voor verdere reacties.

jetsesnoep

Nieuwe gebruiker
Lid geworden
23 nov 2009
Berichten
2
Ik moet voor school een PO voor informatica maken, maar ik snap er niet heel veel van.
Volgens mij is dit voor vele een hele makkelijke opdracht. Als iemand mij op weg kan helpen dan zou dat echt super zijn! (of misschien zelfs helemaal maken :D)

Om een 6 te krijgen voor deze PO moet de PDA van de ober moet minstens het volgende kunnen:

o een aantal dranken bestellen uit een beperkt aanbod
o een aantal hoofdgerechten bestellen uit een beperkt aanbod
o een totaalrekening maken van hetgeen is besteld


Kan iemand mij uit de brand helpen?
 
Stukje code

Ik ben even voor je bezig geweest zodat ik er zelf ook wat van kan leren, want het is niet gebruikelijk dat mensen ineens een heel stuk code voor jou gaan schrijven, omdat jij een huiswerk opdracht hebt. daarom hierbij mijn stukje geschreven code er zitten nog wel fouten in (bijv. met de stop functie) deze code mag je van mij gebruiken als je het zelf ook maar snapt, als je het snapt zijn de fouten best snel op te lossen volgens mij ook moet je nog even het dranken bestellen maken, succes ermee;), maar ik moet nu zelf voor tentamens leren dus ik heb geen tijd om de code te verbeteren.
Ik heb de code zonder Graphical User Interface gemaakt dus gewoon alleen code.
Ik weet trouwens ook dat ik sommige functies niet helemaal netjes heb gemaakt qua indeling (sommige stukken horen eigenlijk bij andere methodes te worden uitgevoerd)
Apl code (om het programma te starten):
Code:
public class Apl {
    public static void main( String[] args ) {
        PDA pda = new PDA();
        
        pda.printKeuzes();
        pda.bestelGerecht();
    }
}

PDA:
Code:
import java.io.*;

public class PDA {
    private double totaalbedrag;
    
    public PDA() {
        this.totaalbedrag = totaalbedrag;
    }
    
    public String zieDranken() {
        String keuzesDrank = "";
        for( Dranken dranken : Dranken.values()) {
            keuzesDrank += "\n" + dranken.name() + " € " + dranken.getPrijs();
        }
        return keuzesDrank;
    }
    
    public String zieHoofdgerecht() {
        String keuzesEten = "";
        for(Hoofdgerecht hoofdgerecht : Hoofdgerecht.values()) {
            keuzesEten += "\n" + hoofdgerecht.name() + " € " + hoofdgerecht.getPrijs();
        }
        return keuzesEten;
    }
        
    public void printKeuzes() {
        System.out.println("De producten die u kunt bestellen zijn: \nDranken: \n " + zieDranken() + "\n\nEten: " + zieHoofdgerecht() );
    }
    
    public void bestelGerecht() {
        String gerecht = "";
        System.out.println("Typ uw gerecht in om hem te bestellen");
        BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
        try{
            gerecht = br.readLine();
        }catch(IOException ioe){
            System.out.println("Er is een fout opgetreden");
        }
        for(Hoofdgerecht hoofdgerecht : Hoofdgerecht.values()) {
            if(gerecht.equalsIgnoreCase(hoofdgerecht.name())) {
                System.out.println("U heeft het gerecht: " + hoofdgerecht.name() + " besteld. ");
                totaalbedrag += hoofdgerecht.getPrijs();
                System.out.println("Typ \" stop \" bestellen om het totaal te berekenen, typ \"verder\" om verder te bestellen");
                try {
                    gerecht = br.readLine();
                }catch(IOException ioe) {
                    System.out.println("Een foutje");
                }
                if(gerecht.equalsIgnoreCase("stop")) { 
                    break;
                } else 
                if(gerecht.equalsIgnoreCase("verder")) {
                    bestelGerecht();
                }else {
                    if(!gerecht.equalsIgnoreCase("veder") || !gerecht.equalsIgnoreCase("stop")) {
                        System.out.println("Foutieve invoer");
                        bestelGerecht();
                    }
                }
            }
        }
    }
    
    public void berekenTotaal() {
        System.out.println( "Het totaal van de bestelde gerechten is " + totaalbedrag );
    }
}

Enumeratie Hoofdgerecht:
Code:
public enum Hoofdgerecht {
    salade(1.45),
    kipschotel(1.23),
    patat(2.11),
    vis(3.55);
    
    private double prijs;
    
    Hoofdgerecht(double prijs) {
        this.prijs = prijs;
    }
    
    public double getPrijs() {
        return prijs;
    }
}

Enumeratie Dranken:
Code:
public enum Dranken {
    bier(1.45),
    cola(1.25),
    fanta(1.20),
    wijn(2.15),
    bierSpecial(3.14);
    
    private double prijs;
    
    Dranken(double prijs) {
        this.prijs = prijs;
    }
    
    public double getPrijs() {
        return prijs;
    }
    
}

Groeten
Bram:)
 
harstikke bedankt! (:
dit helpt me enorm opweg!
nog even mijn eigen dingetjes eraan toevoegen, super!
 
Ik zou eens goed naar je for loop kijken in bestelgerechten.

Deze loop gebruik je om door je gerechten te gaan, om te zien of je gerechten er in zitten. Dat is oke. Maar in deze loop moet je niets anders doen!.

In deze loop roep je ook weer bestel gerecht aan...Dit is recursief aanroepen van je functie, dit is soms heel handig maar ook gevaarlijk.
Als bestelgerecht klaar is gaat het programma verdere waar je dit hebt aangeroepen.. Dus weer in de bestelgerecht functie.

De 'stop' opdracht zal ik in eigen loop doen..

dus in pseudo code.

Code:
invoer = lees invoer
while (invoer != stop) {
     besteldgerecht = null;
     for (gerecht : alle gerechten) {
            if (gerecht gevonden) {
                  besteldGerecht = gerecht
                  break;
            }
     }
 
     if (besteldgerecht != null) {
             prijs += besteldgerecht.getPrijs        
     } 
     else {
         onbekend gerecht.
      }
      invoer =  lees invoer;
}

Je ziet in Helpmij niet vaak dat mensen Enum gebruiken, dit is erg handige constructie in java. Echter deze moet je wel gebruiken voor opsomming van constanten..
en je gerechten zijn niet echt constanten.. Als er een nieuwe gerecht komt moet je programma aanpassen, dat kan niet de bedoeling zijn!
 
Ik kwam er ook al achter dat ik paar stukken code. in verkeerde klasses en/of methodes had gezet, maar had het ook in de post erbij gezet;)
maar, alsnog bedankt voor het melden.
en over de Enum heb je gelijk in, maar omdat hij maar een "bepaald" aantal gerechten hoefde te hebben dacht ik, een enum kan hier ook wel bij :)

ps. jetsesnoep als je vraag is opgelost zou je de vraag dan als "opgelost" willen markeren
B.v.d.

Bram;
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan