# Supermarkt wie speicher ich die Kundendaten?



## HolzixD (28. Sep 2014)

Hallo wir sollen für die schule ein Programm schreiben das einen Supermarkt simuliert.
Der Supermarkt ist so aufgebaut das ein Kunde waren einkaufen kann, sich dann an die Kasse anstellt welche ein Arry ist und dann nach dem first in first out Prinzip bezahlt, soweit so gut ich habe die Klassen WARE, KUNDE,WARTESCHLANGE und KASSE erstellt, gegeben war die Klassse TESTABLAUF.Gefordert ist nun auch das der Umsatz der mit den Waren die die Leute kaufen erzielt wird gespeichert wird und das ist auch mein Problem.


```
public class KUNDENWARTESCHLANGE
{
    private KUNDE [] Kunden;
    private int laenge;
    
    public KUNDENWARTESCHLANGE()
    {
        Kunden = new KUNDE [20];
        laenge = 0;
        
        
    }
    public void anstellen (int KundenID, String name){
        Kunden[laenge]=new KUNDE ( name);
        laenge++;

   
   
}
public void weggehn(){
    
    if ( laenge != 0) {
        KUNDE i= Kunden[0];
        for (int a= 0;a<laenge;a++)
        {
            Kunden[a-1] = Kunden [a];
            
        }
        
    }
}
}
```

So bis jetzt sellt sich ja der Kunde an und geht wieder weg und der nächste kann auf rutschen. und in KUNDE i speicher ich ja den Kunden der zahlen soll. Jetzt muss ich aber noch das ganze als Umsatz abspeichern die waren Preis die jeder kunde in seinem warenkorb hat also Speichern und zusammenzählen. NUr wie mach ich das?


----------



## JavaMeister (28. Sep 2014)

Den Umsatz würde ich an einer Warteschlange speichern. Du hast ja den Kunde i beim weggehen. Und der Kunde hat sein Warenkorb und der hat ja ne Summe. 

Anschließend kann man über alle Warteschlangen iterieren und den Gesamtumsatz zu speichern.


----------



## HolzixD (28. Sep 2014)

und wie berechne ich die summe aus dem warenkorb?


----------



## JavaMeister (28. Sep 2014)

Du addierst alle Preise der Artikel im Warenkorb.

Summe


----------



## Gucky (28. Sep 2014)

Indem du die einzelnen Preise addierst der Waren im Warenkorb addierst. Das geht mit einer Schleife, mit der du über den Warenkorb iterierst.


----------



## AndiE (28. Sep 2014)

ich würde ja wieder vorschlagen, du postest uns alle Klassen und erklärst uns, was du dabei gedacht hast. Bis jetzt ist das ein großes Ratespiel, finde ich.


----------



## HolzixD (28. Sep 2014)

TESTKLASSE
	
	
	
	





```
public class TESTABLAUF 
{
    KUNDE k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,k15,k16,k17,k18,k19,k20;
    KUNDENWARTESCHLANGE kschlange = new KUNDENWARTESCHLANGE();
    KASSE kasse1 = new KASSE();
    
    private void erzeugeKunden(){
        k1 = new KUNDE("Kunde1-Hans");
        k2 = new KUNDE("Kunde2-Peter");
        k3 = new KUNDE("Kunde3-Susi");
        k4 = new KUNDE("Kunde4-Rita");
        k5 = new KUNDE("Kunde5-Anja");
//geht hier weiter bis k20
}
 private void lasseKundenEinkaufen()
    {
        k2.einkaufen(new WARE(7810,"Kiwi",1.63));       
        k5.einkaufen(new WARE(6094,"Kakao",0.74));      
        k15.einkaufen(new WARE(1453,"Banane",5.79));        
        k17.einkaufen(new WARE(9772,"Forelle",2.09));       
        k16.einkaufen(new WARE(1151,"Paranuß",8.01));       
        k8.einkaufen(new WARE(7734,"Kuhmilch 3%",3.29));
//geht hier ebenfalls noch weiter
}
public void ablaufen(){
        System.out.println("20 Kunden betreten den Supermarkt."); 
        erzeugeKunden();
        System.out.println("Die Kunden kaufen die Waren ein."); 
        lasseKundenEinkaufen();
        System.out.println("Kunde1 und Kunde2 stellen sich hinten an die Kasse an."); 
        kschlange.hintenAnstellen(k1);
        kschlange.hintenAnstellen(k2);
        System.out.println("Drei Kunden werden von der Kasse bedient."); 
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        System.out.println("Kunde3 bis Kunde12 stellen sich hinten an die Kasse an."); 
        kschlange.hintenAnstellen(k3);
        kschlange.hintenAnstellen(k4);
        kschlange.hintenAnstellen(k5);
        kschlange.hintenAnstellen(k6);
        kschlange.hintenAnstellen(k7);
        kschlange.hintenAnstellen(k8);
        kschlange.hintenAnstellen(k9);
        kschlange.hintenAnstellen(k10);
        kschlange.hintenAnstellen(k11);
        kschlange.hintenAnstellen(k12);
        System.out.println("Sechs Kunden werden von der Kasse bedient."); 
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        System.out.println("Kunde13 bis Kunde16 stellen sich hinten an die Kasse an."); 
        kschlange.hintenAnstellen(k13);
        kschlange.hintenAnstellen(k14);
        kschlange.hintenAnstellen(k15);
        kschlange.hintenAnstellen(k16);
        System.out.println("Vier Kunden werden von der Kasse bedient."); 
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        System.out.println("Kunde17 bis Kunde20 stellen sich hinten an die Kasse an."); 
        kschlange.hintenAnstellen(k17);
        kschlange.hintenAnstellen(k18);
        kschlange.hintenAnstellen(k19);
        kschlange.hintenAnstellen(k20);
        System.out.println("Acht Kunden werden von der Kasse bedient."); 
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        kasse1.naechstenKundenRegistrieren(kschlange);
        System.out.println("Die Kundenwarenliste wird ausgegeben."); 
        System.out.println(kasse1.kundenWarenlisteGeben());
        System.out.println("Die Gesamteinnahme der Kasse wird ausgegeben."); 
        System.out.println((Math.round(kasse1.gesamtEinnahmenGeben()*100))/100+" €");
    }
}
```

KASSE 
	
	
	
	





```
public class KASSE
{
    private  KUNDENWARTESCHLANGE Schlange;

   
    public KASSE()
    {
        Schlange = new KUNDENWARTESCHLANGE();

        
    }    
}
```
KUNDE

```
public class KUNDE
{
    
    private String Name;
    private WARE Waren[];
    private int Warenzahl;
    
    public KUNDE(String nName)
    {
        Name = nName;
        Warenzahl = 0;
        Waren =new WARE[10];
        
      
    }
    public void einkaufen(int WarenID, String Warenname, double preis){
     Waren[Warenzahl]= new WARE (WarenID,Warenname,preis);
     Warenzahl++;

   
    }
}
```
WARE

```
public class WARE
{
    private int ID;
    private String Bezeichnung;
    private double Preis;
   
    public WARE(int IDn, String BezeichnungN,double PreisN)
    {
        ID=IDn;
        Bezeichnung = BezeichnungN;
        Preis = PreisN;
       
    }
}
```
KUNDENWARTESCHLANGE

```
public class KUNDENWARTESCHLANGE
{
    private KUNDE [] Kunden;
    private int laenge;
    
    public KUNDENWARTESCHLANGE()
    {
        Kunden = new KUNDE [20];
        laenge = 0;
        
        
    }
    public void anstellen (int KundenID, String name){
        Kunden[laenge]=new KUNDE ( name);
        laenge++;

   
   
}
public void weggehn(){
    
    if ( laenge != 0) {
        KUNDE i= Kunden[0];
        for (int a= 0;a<laenge;a++)
        {
            Kunden[a-1] = Kunden [a];
            
        }
        
    }
}
}
```

AUßerdem kommt wenn ich die TESTKLASSE compilen will die Fehlermeldung:
method einkaufen in class KUNDE cannot be applied to given types;
 required:int,java.lang.String,double;   found:WARE;  reason:actual and formal argument lists differ in lenght

Ich hoffe du ahst das poste die klassen so gemeint.


----------



## JavaMeister (28. Sep 2014)

Fangen wir erstmal mit der Fehlermeldung an...
Was bedeutet diese auf Deutsch?


----------



## HolzixD (28. Sep 2014)

das die methode einkaufen in der klasse  KUNDE nicht angewandt werden kann. Mit den gegebenen daten typen.
er bräuchte int,string und double und das dannach versteh ich net weil dann sagt der er hat WARE gefunden da sind doch die daten typen gegeben oder nicht? und die begründung ist wenn ich das richtig übersetzte das die formale und die tatsächliche Argumentenliste sich in der länge unterscheidet. Sry ich bin ziehmlicher anfänger.


----------



## JavaMeister (28. Sep 2014)

> Sry ich bin ziehmlicher anfänger.



Hätte ich gar nicht vermutet. Warum entschuldigt sich einfach jeder?

Ja was macht man da? Er meckert rum, dass die Methode A B C verlangt und X (und nur X) bekommt. Was ist als nächstes zu tun?

Schreibe die Methoden - Deklaration raus, die aufgerufen wird und den Aufruf. Also in deinem nächsten Posting müssten zwei Zeilen kommen. 

Und dann müsste klar sein, wieso das so nicht funktioniert. Wenn nicht, dann nochmal Grundlagen (ersten 2, 3 Kapitel) lesen.


----------



## Gucky (28. Sep 2014)

Lass uns das doch mal abstrahieren: dein Chef verlangt von dir drei Bilder und einen Text. Du tust alles in ein Paket, weil du es nicht einzeln mit dir rumschleppen willst und gibst das Paket deinem Chef. Der Chef ist aber doof und sieht nur das Paket und du bekommst den Ärger, weil er doch die Bilder und den Text haben wollte.
Also was machst du noch vorher? Du gibst dem Chef das Paket und sagst ihm, dass er die gefragten Dinge darin findet und er packt es aus oder du packst es aus und gibst ihm die Dinge einzeln.

Also musst du entweder der Methode die gewünschten Dinge einzeln geben oder du sagst ihr, dass sie die gewünschten Dinge in dem Paket (der Container Klasse) findet. Dann musst du sie aber so umschreiben, dass du ihr ein Paket geben kannst.


----------



## HolzixD (28. Sep 2014)

```
k14.einkaufen(2856,"Kuhmilch 1.5 %",1.39);
```
 ok hab mein problem so gelöst


----------



## HolzixD (28. Sep 2014)

So ich hab mein Programm verbessert mittleweile kommt keine fehlermeldung mehr aber das zusammenzählen funktioniert noch nicht.


```
public class KUNDE
{
    
    private String Name;
    private WARE[] Waren;
    private int warenzahl;

    
    public KUNDE( String name)
    {
        
        Name=name;
        warenzahl=0;
        Waren=new WARE[20];
    }

    public void einkaufen(int WarenID, String Warenname, double preis)
    {
      Waren[warenzahl]=new WARE(WarenID, Warenname, preis);
      warenzahl++;
    }
   
    public double Preise()
    {
      double x=0;
      for(int y=0;y<warenzahl;y++)
      {
       x=x+Waren[y-1].Preis;  
      }
      return x;
    }
    
    public void Warenliste()
    {
        for(int i=0;i< warenzahl;i++)
        {
            System.out.println(Waren[i]) ;
        }
        
    }   
    
}
```


```
public class WARE
{
  
    private int ID;
    private String Bezeichnung;
    protected double Preis;

    
    public WARE(int ID1, String Bezeichnung1, double Preis1)
    {
        ID=ID1;
        Bezeichnung=Bezeichnung1;
        Preis=Preis1;
    }
    
    public double Preisgeben()
    {
     return Preis;   
    }

}
```


----------



## JavaMeister (28. Sep 2014)

Was bedeutet es: Funktioniert nicht richtig?


----------



## HolzixD (28. Sep 2014)

Das Programm läuft Fehlerfrei aber als Letztes wenn es den Betrag ausgeben soll der in der Kasse ist bekomm ich 0,0 raus was bedeutet er hat anscheinend nicht die summen zusammen gezählt. Aber an sich läuft der rest und funktioniert.


----------



## AndiE (28. Sep 2014)

Ich selbst sehe vier Dinge, die mir nicht gefallen:
1. Es wird viel zu oft ein gleicher Text wiederholt aufgeschrieben.

2. Im ersten Thread steht, es soll eine Simulation eines Supermarktes sein. Und ich kenne Supermärkte, wo Waren in Regalen liegen, und von jedem Kunden gekauft werden können. Das geht bei dir nicht-Komisch, nicht? Das Zauberwort, das dein Problem löst, heißt übrigens "Kassensturz". 

3. Das Design der Klassen hat noch nichts mit OOP zu tun. Getter und Setter z.B. wären ratsam.

4. Eine Iteration ist übrigens eine Umschreibung für das, was Schleifen machen.

Ich hoffe, ich komme nicht falsch rüber, aber ich will nicht für andere die Hausaufgaben machen.


----------



## HolzixD (28. Sep 2014)

Musst du nicht es geht darum das ich das was du da sagst leider noch nicht gelernt hab da ich erst seit dem Jahr mit java progrmmier und das auch nur in der schule, auf gut Deutsch seit 4 Wochen. Und ich leider nur das anwenden kann was ich ind er Schule gelernt hab.


----------



## Gucky (28. Sep 2014)

Anscheinend ist jeder Info Lehrer ein Voll***** bis auf Meiner. Ich konnte nach einem Jahr zwar nicht so gut programmieren wie jetzt aber ich wusste, was OOP bedeutet und was getter und setter und so weiter sind. Und was ich nicht von ihm gelernt habe, habe ich aus dem Internet. Mein Wissen hat sich seitdem nur um Events und Teile der API erweitert. Der Rest ist Übung und vielleicht ein paar Kleinigkeiten.


----------



## nvidia (29. Sep 2014)

Gucky hat gesagt.:


> Anscheinend ist jeder Info Lehrer ein Voll***** bis auf Meiner.[...]



Manchmal sollte man die Kirche auch im Dorf lassen. Der/Die gute hat seit 4 Wochen Info-Unterricht mit Programmierung, wie oft hat man im Durchschnitt Info in der Woche? Bis zur 10. hatte ich damals z.B. insg. 90Min, also eine Doppelstunde pro Woche, im Abitur, so denn man Info als LK wählen kann sind das IMHO 5x 45min. Zu heute hat sich da sicher nicht ungemein viel geändert. Davon abgesehen nicht jeden interessiert Programmierung oder Informatik im Allg. Jeder ist anders der eine mag vll. mehr Fremdsprachen, der andere mehr Mathematik, vll. mag einer Biologie usw. Dann ist da auch noch das individuelle Lerntempo etc. Das sagt nun aber auch nichts über die Qualität des Lehrers aus, ich bin ja schon froh das hier nicht das Wort BlueJ im ersten Absatz gefallen ist.  

Was also erwartest du von jmden der vll. noch nie etwas mit dem Thema Programmierung zu tun hatte? Vll. einfach mal darüber reflektieren und lieber sinnvolle Korrekturvorschläge unterbreiten, auch wenn "Anfängerfragen" sehr gerne als lästig empfunden werden. Letzteres hat auch durchaus seine Berechtigung wenn *keinerlei* Wille erkennbar ist.


----------



## Gucky (29. Sep 2014)

Er hat doch seit einem Jahr Info "auf gut Deutsch seit 4 Wochen". Das klang für mich so, als habe er seit einem jahr jede Woche 1 - 4 Stunden in Info gesessen aber das, was der Lehrer ihnen da vermittelt hat hätte man auch in 4 Wochen quetschen können.

So ist das bei mir angekommen. Sollte das nicht so sein, entschuldige ich mich, für alles, was ich gesagt habe.


----------



## Saheeda (29. Sep 2014)

@Gucky
Er hat "seit dem Jahr" Info, also seit diesem Schuljahr, was je nach Bundesland gerade mal eine handvoll Unterrichtsstunden bisher waren.


----------



## Gucky (29. Sep 2014)

Ok. Dann ist das bei mir falsch angekommen und ich entschuldige mich.


----------



## Shams (30. Sep 2014)

Es gibt da ein Code-Fragment in der Klasse TESTABLAUF, welches ich nicht so ganz vertsehe:


```
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
kasse1.naechstenKundenRegistrieren(kschlange);
```

Weiso wird mehr als einmal die Kundenwarteschlange an die Kasse übergeben?

<edit>
...aus meiner Sicht macht das nur dann Sinn, wenn Du an der Kasse sukzessive die Kundenwarteschlange bei jedem einzelnen Mal, da dieser der Kasse übergeben wird, abarbeitest, wie folgt etwa:


```
public void naechstenKundenRegistrieren(KUNDENWARTESCHLANGE kschlange) {
		kunden[i]=kschlange.getKunden()[i];
		i++;
		
	}
```
</edit>


----------



## AndiE (30. Sep 2014)

Jemand hatte mal als Signatur" Lerne nicht Programmierspreachen- Lerne programmieren". Als ich vor gut 30 Jahren begonnen nhabe, da gab es BASIC. Wenn ich das unselige Rumgehopse weglasse, dann gab es damals schon: Variablen, Methoden, Arrays, Schleifen und Entscheidungen. Heute wird dieses  durch die Bestandteile der OOP wie Klassen erweitert und verändert. Und trotzdem muß man damals wie heute Analysieren- Entwerfen- Code schreiben - Testen. Da muss man nun mal durch. damals wie heute.


----------

