Übungsaufgabe Online Shop

pg1337

Bekanntes Mitglied
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:

Java:
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;
	}
	
	
}

Java:
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:
Java:
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 🙂
 
Zuletzt bearbeitet von einem Moderator:
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!
 
Was soll ich denn in die Klasse Einkaufswagen reinschreiben?

kann ja von da aus schlecht auf das Objekt bestellung zugreifen?
 
Naja, zumindest ne Methode
Code:
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:
Java:
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());
 
Zuletzt bearbeitet von einem Moderator:
Naja, zumindest ne Methode
Code:
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:
Java:
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());

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

Java:
 public void addArtikel(Artikel artikel)
   
   {
	   
   }
 
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.
 
Java:
  List<Test> einkaufsListe = new ArrayList<Test>();
 
   public void addArtikel(Artikel artikel)
   
   {
	   einkaufsListe.add(laptop);
	   
   }



so stimmt das aber nicht..
 
Zuletzt bearbeitet:
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:

Java:
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);
		
   }
}
 
ach jetzt erst gesehen:

Java:
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).
 
Zuletzt bearbeitet:
Jetzt sind in der Liste alle drei Artikel drin?
Laptop, fernseher, dvdPlayer?

EDIT:

So nun oder?

Java:
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);
		
	}	
}
 
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?!
 
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.
 
Bestellung ist also kein eigenes Objekt?

Sprich so dann:

Java:
List<Artikel> bestellung = new ArrayList<Artikel>();

In welche Klasse soll ich dies dann schreiben?
In den Einkaufswagen?
 
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.
 
Hat sich erledigt.. musste das sowieso mit ner HashMap machen etc.

Danke trotzdem für jede Hilfe funktioniert jetzt 🙂
 
Also die Frage:

Java:
	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ß
 
Zuletzt bearbeitet:
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
 
Java:
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.
 

Zurück
Oben