# Übungsaufgabe Online Shop



## pg1337 (10. Jan 2012)

Huhu,

hab ne Übungsaufgabe gefunden und hätte da ne Frage:

Es wird ein System für einen Online Shop benötigt. Der Laden verkauft Artikel wie Fernseher, DVD Player, Laptops. Jeder Artikel hat eine Beschreibung, einen Preis und eine Kategorie. Der Online Shop braucht einen "Einkaufswagen", zu dem die Artikel zum späteren Checkout hinzugefügt werden können. Der Einkaufswagen erstellt eine Bestellung. Aus der Bestellung kann man den gesamten Preis berechnen. Der Preis wird wie folgt berechnet: Die Summe von allen Artikeln der Bestellung plus die Lieferung. Es gibt drei Arten von Lieferungen: Schnelle-, Overnight- und Standard-Lieferung. Die Standard-Lieferung kostet €3. Die Schnelle-Lieferung addiert 3% zu dem gesamten Preis der Artikel und die Overnight-Lieferung ein 5%.


Habe bis jetzt mir 3 Klassen erstellt. Sieht wie folgt aus:


```
public class Artikel{

	String beschreibung;
	double preis;
	String kategorie;
	

	public Artikel(String beschreibung, double preis, String kategorie)
	{
		this.beschreibung= beschreibung;
		this.preis=preis;
		this.kategorie= kategorie;
		
	}

	public String getBeschreibung() {
		return beschreibung;
	}


	public void setBeschreibung(String beschreibung) {
		this.beschreibung = beschreibung;
	}

	
	public double getPreis() {
		return preis;
	}

	
	public void setPreis(double preis) {
		this.preis = preis;
	}


	public String getKategorie() {
		return kategorie;
	}


	public void setKategorie(String kategorie) {
		this.kategorie = kategorie;
	}
	
	public double standardLieferung(){
		
		preis= preis+3;
		return preis;
	}
	
	public double schnelleLieferung() {
		
		preis= preis*1.03;
		return preis;
	}
	
	public double overnightLieferung() {
		
		preis= preis*1.05;
		return preis;
	}
	
	
}
```


```
public class Test {
	
	

	public static void main(String[] args)
	{
		
		double endbestellung;
		
		Artikel laptop= new Artikel("Neu", 500,"5");
		Artikel dvdPlayer= new Artikel(null, 0, null);
		Artikel fernseher= new Artikel(null, 0, null);
		Einkaufswagen bestellung= new Einkaufswagen();
		
		endbestellung= laptop.standardLieferung()+dvdPlayer.standardLieferung()+fernseher.standardLieferung();
		
		System.out.println(bestellung.getEndbestellung());
		
//		
//		laptop.standardLieferung();
//		dvdPlayer.schnelleLieferung();
	
		
	
	}
	
	
	
}
```

Und zu guter letzt:

```
public class Einkaufswagen{
	
	double endbestellung;

	
	public double getEndbestellung() {
		return endbestellung;
	}

	public void setEndbestellung(double endbestellung) {
		this.endbestellung = endbestellung;
	}


}
```


Nun weiss ich nicht genau wie ich weiter machen soll.. mehr Objekte erstellen?
Soll nur eine Main-Methode geben-

Regards


----------



## SlaterB (10. Jan 2012)

du sollst nicht (nur) in Bahnen von 'Objekte erstellen, Klassen schreiben' denken,
sondern zunächst einmal über die Aufgabe und die konkrete fachliche Arbeit nachdenken,
was fehlt denn noch, was ist zu tun, was soll im Programm noch passieren?

meiner Ansicht nach bist du sogar schon im Grundablauf fertig, 
ein Endpreis wird berechnung und ausgegeben, mehr steht doch gar nicht in der Aufgabe?
ok, Auswahl der Lieferungsart usw. wäre wohl nicht schlecht, da ist die Aufgabe schwammig, nun ja,
mehr Objekte in der main in einem zweiten Einkaufswagen wäre durchaus interessant als Test

vorerst:
wiederum bezogen auf die Klassen ist dir aber ein schwerer Fehler in der Umsetzung unterlaufen,
die Klasse Einkaufswagen wird bisher fast nicht genutzt bzw. für das wenige (ein double-Wert)
auch noch falsch, im Einkaufswagen steht nur 0, der berechnete endbestellung-double aus der main wird dagegen nicht ausgegeben

wichtig ist dass du die einfache Anforderung, die Artikel in den Einkaufswagen zu legen, auch umsetzt,
dort muss es eine Liste von Artikeln geben oder ähnliches,
auch die Berechnung muss unbedingt in diese Klasse und darf sich nicht statisch auf drei einzelne Artikel beziehen,
sondern muss mit der internen Liste mit beliebiger Befüllung funktionieren, Schleifenverarbeitung!


----------



## pg1337 (10. Jan 2012)

Was soll ich denn in die Klasse Einkaufswagen reinschreiben?

kann ja von da aus schlecht auf das Objekt bestellung zugreifen?


----------



## Gast2 (10. Jan 2012)

Naja, zumindest ne Methode 
	
	
	
	





```
addArtikel(Artikel artikel)
```
 braucht der Einkaufswagen, du willst ja was reinlegen.
Den Endpreis der Bestellung kann dann z.b. der Einkaufswagen ausrechnet, weil der ja weiß was alles in ihm drin liegt.

EDIT:
In der main() sollte der Code dann ungefähr so ausschauen:

```
Artikel laptop= new Artikel("Neu", 500,"5");
Artikel dvdPlayer= new Artikel(null, 0, null);
Artikel fernseher= new Artikel(null, 0, null);

Einkaufswagen einkaufswagen = new Einkaufswagen();
einkaufswagen.addArtikel(laptop);
einkaufswagen.addArtikel(dvdPlayer);
einkaufswagen.addArtikel(fernseher);

System.out.println("Der Bestellwert beträgt: " + einkaufswagen.getBestellwert());
```


----------



## pg1337 (10. Jan 2012)

EikeB hat gesagt.:


> Naja, zumindest ne Methode
> 
> 
> 
> ...



Das hört sich schonmal gut an, nur was soll ich in der addArtikel Methode schreiben:


```
public void addArtikel(Artikel artikel)
   
   {
	   
   }
```


----------



## Gast2 (10. Jan 2012)

Zumindest nicht das was du da aktuell stehen hast 

Der Einkaufswagen muss sich merken was in ihm drin liegt, also müsstest du die artikel in nen Array oder ne Liste legen.


----------



## pg1337 (10. Jan 2012)

```
List<Test> einkaufsListe = new ArrayList<Test>();
 
   public void addArtikel(Artikel artikel)
   
   {
	   einkaufsListe.add(laptop);
	   
   }
```



so stimmt das aber nicht..


----------



## diggaa1984 (10. Jan 2012)

ersetze doch Test durch Artikel, denn das ist der Typ Objekt der in der Liste abgelegt wird


----------



## pg1337 (10. Jan 2012)

Die Objekte habe ich jedoch in der Klasse Test angelegt. In der Klasse Artikel stehen nur die Attribute und Methoden sowie Konstruktor.

Diese Methode jetzt steht aber in der Klasse Einkaufswagen?

Das klappt nicht mit dem hinzufügen so:


```
import java.util.ArrayList;
import java.util.List;


public class Einkaufswagen{
    
    double endbestellung;
 
    
    public double getEndbestellung() {
        return endbestellung;
    }
 
    public void setEndbestellung(double endbestellung) {
        this.endbestellung = endbestellung;
    }
    
    List<Artikel> einkaufsListe = new ArrayList<Artikel>();
 
   public void addArtikel(Artikel artikel)
   
   {
	   einkaufsListe.addArtikel(dvdPlayer);
		einkaufsListe.addArtikel(fernseher);
		einkaufsListe.addArtikel(laptop);
		
   }
}
```


----------



## diggaa1984 (10. Jan 2012)

ach jetzt erst gesehen:


```
public void addArtikel(Artikel artikel) {
    einkaufsListe.add(artikel);
}
```

du brauchst ja nur das übergebene Objekt darin ablegen, nichts aus anderen Klassen!

EDIT: dvdPlayer, laptop etc. sind in der Klasse Einkaufswagen nicht bekannt, da hilft auch keine identische Schreibweise, was über diese Methode in den Einkaufswagen kommt ist in dem Parameter enthalten. Und der wird bei Methodenaufruf angegeben (wie in deiner Main-methode).


----------



## pg1337 (10. Jan 2012)

Jetzt sind in der Liste alle drei Artikel drin?
Laptop, fernseher, dvdPlayer?

EDIT:

So nun oder?


```
public class Test {
	
	

	public static void main(String[] args)
	{
		
		double endbestellung;
		
		Artikel laptop= new Artikel("Neu", 500,"5");
		Artikel dvdPlayer= new Artikel(null, 2, null);
		Artikel fernseher= new Artikel(null, 2, null);
		Einkaufswagen einkaufswagen= new Einkaufswagen();
		
		endbestellung= laptop.standardLieferung()+dvdPlayer.standardLieferung()+fernseher.standardLieferung();
		
		einkaufswagen.addArtikel(fernseher);
		einkaufswagen.addArtikel(dvdPlayer);
		einkaufswagen.addArtikel(laptop);

		System.out.println(endbestellung);
		
	}	
}
```


----------



## diggaa1984 (10. Jan 2012)

bezüglich der Aufgabenstellung muss die Sache mit den Lieferungen und der Berechnung des Endpreises ja noch anders gelöst werden, aber das Problem mit den Artikeln im Einkaufskorb sollte gelöst sein?!


----------



## pg1337 (10. Jan 2012)

diggaa1984 hat gesagt.:


> bezüglich der Aufgabenstellung muss die Sache mit den Lieferungen und der Berechnung des Endpreises ja noch anders gelöst werden, aber das Problem mit den Artikeln im Einkaufskorb sollte gelöst sein?!



Drin sind die Sachen ja jetzt im Einkaufskorb 

bzw im Objekt einkaufswagen oder?


----------



## diggaa1984 (10. Jan 2012)

ja denke schon, gibt ja keine fehler weiter?  Nun musst du dich darum kümmern ne "Bestellung" zu erstellen, anhand der Artikelliste im Einkaufskorb ... und so wie ich das verstehe, is die bestellung eigentlich ne Art Liste von Artikeln, denn auf der Bestellung wird der Preis berechnet unter Berücksichtigung der Lieferart. Ich finde den Teil der Aufgabe ein wenig schwammig oder unvorteilhaft beschrieben.


----------



## pg1337 (10. Jan 2012)

Bestellung ist also kein eigenes Objekt?

Sprich so dann:


```
List<Artikel> bestellung = new ArrayList<Artikel>();
```

In welche Klasse soll ich dies dann schreiben?
In den Einkaufswagen?


----------



## diggaa1984 (10. Jan 2012)

Bestellung erscheint mir gerade ein Objekt, laut Beschreibung aber es muss auch die Liste an Artikeln kapseln, die Info wäre damit redundant. Sicherlich steht aufm Kassenbon das drauf was im Einkaufskorb lag, aber irgendwie erscheint es mir nich schön, in einer Klasse Bestellung ebenfalls eine List<Artikel> zu führen.


----------



## pg1337 (11. Jan 2012)

Hat sich erledigt.. musste das sowieso mit ner HashMap machen etc.

Danke trotzdem für jede Hilfe funktioniert jetzt


----------



## pg1337 (11. Jan 2012)

Also die Frage:


```
List<Artikel> einkaeufe= new ArrayList<Artikel>();
		
	
		public void listefuellen(Artikel artikel, double preis)
		{
			einkaeufe.add(e)
		}
```



Wie fülle ich in die Liste einkaeufe meine eingekauften Objekte, sprich Laptop etc. + ihren Preisen, sodass ich in der Main-Methode einer anderen Klasse dann die Einkäufe aufsteigend nach Preis ausgeben kann.

Gruß


----------



## Stelufl (11. Jan 2012)

Vielleicht erstmal Galileo Computing :: Java ist auch eine Insel - index durcharbeiten.


----------



## SlaterB (11. Jan 2012)

Listen füllt man allein durch Einfügen,

Sortieren ist ein Thema für sich und nicht ganz ohne,
da gibts aber in der Tat extra Lehrbuch-Kapitel


----------



## pg1337 (11. Jan 2012)

```
public List<Artikel> getEinkaeufe()
		{
			List<Artikel> einkaeufe= new ArrayList<Artikel>();
			
			Set<Artikel> artikels = einkaufsListe.keySet();
			
			// for each
			for(Artikel a: artikels){
				einkaeufe.add(a);	
			}
			
			Collections.sort(einkaeufe, new PreisComparator());
			return einkaeufe;
		}
		
		public class PreisComparator implements Comparator<Artikel> {

			@Override
			public int compare(Artikel a1, Artikel a2) {
				return (int)( a2.getPreis() -a1.getPreis());
				
			}
			
		}
```

so passts.


----------



## pg1337 (11. Jan 2012)

Stelufl hat gesagt.:


> Vielleicht erstmal Galileo Computing :: Java ist auch eine Insel - index durcharbeiten.



Werde wohl kaum einfach so was hingeschrieben haben ohne dass ich mir davor schonmal was angeschaut habe 

Bin zwar noch nicht lange dabei aber tue mein Bestes.


----------

