From f11dcbf4ef70a5168038cc97405df4e3ae86d138 Mon Sep 17 00:00:00 2001 From: eronahasani Date: Sat, 13 Dec 2025 21:44:07 +0100 Subject: [PATCH] =?UTF-8?q?+=20Bestellung=20Klasse=20verwendet=20=09+=20be?= =?UTF-8?q?stellen=20Methode=20in=20TUI=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + Berechnungen zu Mwst von Waren und Versand, als auch Versandkosten Netto, und Gesamtpreis + optische Anpassung --- OS-Abgabe/src/backend/Bestellung.java | 28 ++++- OS-Abgabe/src/backend/OnlineShop.java | 6 +- OS-Abgabe/src/backend/Produkt.java | 67 ++++-------- OS-Abgabe/src/backend/Warenkorb.java | 141 ++++++++++++++++++++++---- OS-Abgabe/src/tui/shopTUI.java | 137 +++++++++++++++---------- 5 files changed, 256 insertions(+), 123 deletions(-) diff --git a/OS-Abgabe/src/backend/Bestellung.java b/OS-Abgabe/src/backend/Bestellung.java index 9e13dbd..ae4c248 100644 --- a/OS-Abgabe/src/backend/Bestellung.java +++ b/OS-Abgabe/src/backend/Bestellung.java @@ -1,7 +1,31 @@ package backend; public class Bestellung { + private String name; + private String adresse; + private Warenkorb warenkorb; + private double gesamtpreis; + public Bestellung(String name, String adresse, Warenkorb warenkorb) { + this.name = name; + this.adresse = adresse; + this.warenkorb = warenkorb; + this.gesamtpreis = warenkorb.gesamtpreis(); + } + + public String getName() { + return name; + } + + public String getAdresse() { + return adresse; + } + + public Warenkorb getWarenkorb() { + return warenkorb; + } + + public double getGesamtpreis() { + return gesamtpreis; + } } - - diff --git a/OS-Abgabe/src/backend/OnlineShop.java b/OS-Abgabe/src/backend/OnlineShop.java index a24e0ef..6740cb6 100644 --- a/OS-Abgabe/src/backend/OnlineShop.java +++ b/OS-Abgabe/src/backend/OnlineShop.java @@ -34,6 +34,7 @@ public class OnlineShop { sc.close(); } + public String[] produktListe() { String[] produkt = new String[lager.size()]; for(int i = 0; i < lager.size(); i++) { @@ -45,7 +46,7 @@ public class OnlineShop { public boolean reduzieren(Produkt p, int menge) { for (Produkt lagerProdukt : lager) { - if (lagerProdukt.equals(p)) { + if (lagerProdukt.getId() == p.getId()) { if (lagerProdukt.bestand >= menge) { lagerProdukt.bestand -= menge; return true; @@ -56,9 +57,10 @@ public class OnlineShop { return false; } + public void erhöhen(Produkt p, int menge) { for (Produkt lagerProdukt : lager) { - if (lagerProdukt.equals(p)) { + if (lagerProdukt.getId() == p.getId()) { lagerProdukt.bestand += menge; return; } diff --git a/OS-Abgabe/src/backend/Produkt.java b/OS-Abgabe/src/backend/Produkt.java index 68b9135..0e81015 100644 --- a/OS-Abgabe/src/backend/Produkt.java +++ b/OS-Abgabe/src/backend/Produkt.java @@ -1,12 +1,12 @@ package backend; public class Produkt { - public int id; - public String name; - public double gewicht; - public double preis; - public int mwst; - public int bestand; + private int id; + private String name; + private double gewicht; + private double preis; + private int mwst; + int bestand; public Produkt(int id, String name, double gewicht, double preis, int mwst, int bestand) { this.id = id; @@ -17,56 +17,33 @@ public class Produkt { this.bestand = bestand; } - public String getName() { - return this.name; + public int getId() { + return id; } - public void setName(String neu) { - this.name = neu; + public String getName() { + return this.name; } public double getPreis() { return preis; } + public double getGewicht() { + return gewicht; + } + + public int getMwst() { + return mwst; + } + + public int getBestand() { + return bestand; + } + public String toString() { return id + " | " + name + " | " + preis + "€"; } - - public boolean equals(Produkt o) { - if (!(o instanceof Produkt)) - return false; - - if (o == null) - return false; - - if (!this.name.equals(((Produkt)o).name) - || this.preis != ((Produkt)o).preis) - return false; - - return true; - } - - @Override - public int hashCode() { - return Objects.hash(name, preis); //TODO - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Produkt other = (Produkt) obj; - return Objects.equals(name, other.name) - && Double.doubleToLongBits(preis) == Double.doubleToLongBits(other.preis); - } - - - } diff --git a/OS-Abgabe/src/backend/Warenkorb.java b/OS-Abgabe/src/backend/Warenkorb.java index 30f911e..33f5b0f 100644 --- a/OS-Abgabe/src/backend/Warenkorb.java +++ b/OS-Abgabe/src/backend/Warenkorb.java @@ -5,11 +5,13 @@ public class Warenkorb { private ArrayList inhalt; private ArrayList positionen; + public Warenkorb() { inhalt = new ArrayList(); positionen = new ArrayList<>(); } + public void produktHinzufügen(Produkt p, int menge) { for (int i = 0; i < menge; i++) { inhalt.add(p); @@ -17,44 +19,36 @@ public class Warenkorb { boolean gefunden = false; for (WarenkorbPosition wp : positionen) { - if (wp.getProdukt().getName().equals(p.getName())) { + if (wp.getProdukt().getId() == p.getId()) { wp.setMenge(wp.getMenge() + menge); gefunden = true; break; } } + if (!gefunden) { positionen.add(new WarenkorbPosition(p, menge)); } } + public ArrayList getPositionen() { return positionen; } - - - public double berechneGesamtpreis() { - double preis = 0; - for (WarenkorbPosition wp : positionen) { - preis += wp.getMenge() * wp.getProdukt().getPreis(); - } - return preis; - } - - + + public void pEntfernen(Produkt p) { ArrayList neu = new ArrayList<>(); + for (WarenkorbPosition wp : positionen) { - if (!wp.getProdukt().equals(p)) { + if (wp.getProdukt().getId() != p.getId()) { neu.add(wp); - } else { - p.bestand += wp.getMenge(); } } positionen = neu; } - - + + public boolean mengeAendern(Produkt p, int neu) { if (neu == 0) { this.pEntfernen(p); @@ -62,14 +56,125 @@ public class Warenkorb { } for (WarenkorbPosition wp : positionen) { - if (wp.getProdukt().equals(p)) { + if (wp.getProdukt().getId() == p.getId()) { wp.setMenge(neu); return true; } } return false; } + + + public double produkteNetto() { + double preis = 0; + for (WarenkorbPosition wp : positionen) { + preis += wp.getMenge() * wp.getProdukt().getPreis(); + } + return preis; + } + + + public double produkteMwst() { + double mwst = 0; + for (WarenkorbPosition wp : positionen) { + double netto = wp.getProdukt().getPreis() * wp.getMenge(); + int mwstInt = wp.getProdukt().getMwst(); + mwst += netto * mwstInt / 100.00; + } + return mwst; + } + + + public double versandBrutto() { + if (produkteNetto() >= 500) return 0; + double gewicht = 0; + for (WarenkorbPosition wp : positionen) { + gewicht += wp.getProdukt().getGewicht() * wp.getMenge(); + } + if (gewicht <= 0.1) { + return 3.95; + } + else if (gewicht <= 1.0) { + return 4.95; + } + else if (gewicht <= 5.0) { + return 5.95; + } + else { + return 19.95; + } + } + + + public double versandNetto() { + double netto7 = 0; + double netto19 = 0; + double gesamtNetto = 0; + + for (WarenkorbPosition wp : positionen) { + double netto = wp.getProdukt().getPreis() * wp.getMenge(); + int mwst = wp.getProdukt().getMwst(); + if (mwst == 7) netto7 += netto; + else if (mwst == 19) netto19 += netto; + gesamtNetto += netto; + } + + if (versandBrutto() == 0 || gesamtNetto == 0) return 0; + + double anteil7 = netto7 / gesamtNetto; + double anteil19 = netto19 / gesamtNetto; + + double anteilBrutto7 = versandBrutto() * anteil7; + double anteilBrutto19 = versandBrutto() * anteil19; + + return (anteilBrutto7 / 1.07) + (anteilBrutto19 / 1.19); + } + + + public double versandMwst() { + double netto7 = 0; + double netto19 = 0; + double gesamtNetto = 0; + for (WarenkorbPosition wp : positionen) { + double netto = wp.getProdukt().getPreis() * wp.getMenge(); + int mwst = wp.getProdukt().getMwst(); + + if (mwst == 7) { + netto7 += netto; + } else if (mwst == 19) { + netto19 += netto; + } + gesamtNetto += netto; + } + + if (versandBrutto() == 0 || gesamtNetto == 0) { + return 0; + } + + double anteil7 = netto7 / gesamtNetto; + double anteil19 = netto19 / gesamtNetto; + + double anteilBrutto7 = versandBrutto() * anteil7; + double anteilBrutto19 = versandBrutto() * anteil19; + + double nettoVersand7 = anteilBrutto7 / 1.07; + double nettoVersand19 = anteilBrutto19 / 1.19; + + return (anteilBrutto7 + - nettoVersand7) + + (anteilBrutto19 + - nettoVersand19); + } + + + + public double gesamtpreis() { + return produkteNetto() + + produkteMwst() + + versandNetto() + + versandMwst(); + } } diff --git a/OS-Abgabe/src/tui/shopTUI.java b/OS-Abgabe/src/tui/shopTUI.java index 3747c43..8a1729e 100644 --- a/OS-Abgabe/src/tui/shopTUI.java +++ b/OS-Abgabe/src/tui/shopTUI.java @@ -3,6 +3,7 @@ import backend.WarenkorbPosition; import backend.OnlineShop; import backend.Produkt; import backend.Warenkorb; +import backend.Bestellung; import java.util.Scanner; import java.io.FileNotFoundException; @@ -17,9 +18,7 @@ public class shopTUI { System.out.println("Willkommen bei Onami! („•֊•„)੭"); shop = new OnlineShop(); - - warenkorb = new Warenkorb(); - + warenkorb = new Warenkorb(); hauptmenü(); } @@ -40,7 +39,7 @@ public class shopTUI { } else if (eingabe.equals("produktsuche") || eingabe.equals("suche")) { suche(); } else if (eingabe.equals("warenkorb")) { - warenkorbAnzeigen(); + warenkorb(); } else if (eingabe.equals("beenden")) { System.out.println("\n\n\n | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| "); System.out.println(" Auf Wiedersehen! "); @@ -60,7 +59,7 @@ public class shopTUI { for (int i = 0; i < produkte.length; i++) { Produkt p = shop.lager.get(i); - System.out.printf(" %-2d | %-23s | %.2f€\n", p.id, p.name, p.preis); + System.out.printf(" %-2d | %-23s | %.2f€\n", p.getId(), p.getName(), p.getPreis()); } System.out.println("\nWählen Sie ein Produkt anhand der Artikelnummer für Ihren Warenkorb aus \noder geben Sie 'Hauptmenü' an, wenn Sie zurück wollen: "); @@ -74,10 +73,10 @@ public class shopTUI { int index = nummer - 1; Produkt p = shop.lager.get(index); - System.out.println("\n\n\nSie haben folgendes ausgewählt: " + p.name); + System.out.println("\n\n\nSie haben folgendes ausgewählt: " + p.getName()); System.out.println("(„•֊•„) Geben Sie bitte die gewünschte Menge an: \n"); int menge = Integer.parseInt(sc.nextLine()); - if (menge <= p.bestand) { + if (menge <= p.getBestand()) { warenkorb.produktHinzufügen(p, menge); shop.reduzieren(p, menge); System.out.println("Das Produkt wurde in der gewünschten Menge zum Warenkorb hinzugefügt ✧。٩(ˊᗜˋ)و✧*。"); @@ -101,8 +100,8 @@ public class shopTUI { for (int artnr = 0; artnr < shop.lager.size(); artnr++) { Produkt p = shop.lager.get(artnr); - for (int i = 0; i <= p.name.length() - suchbegriff.length(); i++) { - if (p.name.substring(i, i + suchbegriff.length()).toLowerCase().equals(suchbegriff)) { + for (int i = 0; i <= p.getName().length() - suchbegriff.length(); i++) { + if (p.getName().substring(i, i + suchbegriff.length()).toLowerCase().equals(suchbegriff)) { if(!gefunden) { System.out.println("\n(˶ˆᗜˆ˵) Wir haben folgenden Treffer zu bieten: "); } @@ -116,7 +115,7 @@ public class shopTUI { System.out.println("(„•֊•„) Geben Sie bitte die gewünschte Menge an: "); int menge = Integer.parseInt(sc.nextLine()); - if (menge <= p.bestand) { + if (menge <= p.getBestand()) { warenkorb.produktHinzufügen(p, menge); shop.reduzieren(p, menge); System.out.println("Das Produkt wurde in der gewünschten Menge zum Warenkorb hinzugefügt ✧。٩(ˊᗜˋ)و✧*。"); @@ -142,87 +141,114 @@ public class shopTUI { } - public static void warenkorbAnzeigen() { + public static void warenkorb() { if (warenkorb.getPositionen().size() == 0) { System.out.println("\n\nIhr Warenkorb ist leer (˶ᵕ˶)⸝♡"); System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n"); hauptmenü(); } else { - System.out.println("\n\n(。•◡•。) Hier ist Ihr aktueller Warenkorb: "); - int pos = 1; + System.out.println("\n⟡ . ݁₊ ⊹ . ݁˖ . ݁ . ݁₊ Warenkorbübersicht . ݁ ˖ . ݁ . ݁₊ ⊹ . ݁˖ ݁.⟡"); + System.out.println("⟡ . ݁ ݁.⟡"); + + int pos = 1; for (WarenkorbPosition wp : warenkorb.getPositionen()) { - System.out.printf("Pos.: %2d. | %dx | %-23s | %.2f€\n", - pos++, - wp.getMenge(), - wp.getProdukt().getName(), - wp.getProdukt().getPreis()); + System.out.printf("⟡ . ݁ Pos.: %2d | %2dx | %-23s | %6.2f€ ݁.⟡\n", + pos++, + wp.getMenge(), + wp.getProdukt().getName(), + wp.getProdukt().getPreis()); } - System.out.printf("Ihre Summe beträgt %.2f€ ૮˶ᵔᵕᵔ˶ა%n", warenkorb.berechneGesamtpreis()); + + System.out.println("⟡ . ݁ ݁.⟡"); + + double gesamtpreis + = warenkorb.produkteNetto() + + warenkorb.produkteMwst() + + warenkorb.versandNetto() + + warenkorb.versandMwst(); + + System.out.printf("⟡ . ݁ %-29s %19.2f€ ݁.⟡\n", "Nettosumme:", warenkorb.produkteNetto()); + System.out.printf("⟡ . ݁ %-29s %19.2f€ ݁.⟡\n", "MwSt:", warenkorb.produkteMwst()); + System.out.println("⟡ . ݁ ݁.⟡"); + System.out.printf("⟡ . ݁ %-29s %19.2f€ ݁.⟡\n", "Versandkosten:", warenkorb.versandNetto()); + System.out.printf("⟡ . ݁ %-29s %19.2f€ ݁.⟡\n", "MwSt Versand:", warenkorb.versandMwst()); + System.out.println("⟡ . ݁ ݁.⟡"); + System.out.printf("⟡ . ݁ %-29s %19.2f€ ݁.⟡\n", "Gesamt Brutto:", gesamtpreis); + System.out.println("⟡ . ݁ ݁.⟡"); + System.out.println("⟡ . ݁₊ ⊹ . ݁˖ . ݁ . ݁ ₊ ⊹ . ݁˖ . ݁ ⟡ . ݁₊ ⊹ . ݁˖ . ݁ . ݁₊ ⊹ . ݁˖ ݁.⟡"); + + System.out.println("\n\n\nMöchten Sie bestellen, die Menge ändern oder zurück zum Hauptmenü?: "); String eingabe = sc.nextLine().toLowerCase(); if (eingabe.equals("hauptmenü") || eingabe.equals("menü")) { hauptmenü(); } else if (eingabe.equals("menge ändern") || eingabe.equals("die menge ändern") || eingabe.equals("ändern")) { - mengeBearbeiten(); + menge(); } else if (eingabe.equals("bestellen")) { - System.out.print("Bitte geben Sie Ihren vollständigen Namen ein: "); - String name = sc.nextLine(); - - System.out.print("\nBitte geben Sie Ihre Lieferadresse ein: "); - String adresse = sc.nextLine(); - - System.out.println("\n\n\n\n\n(\\ (\\"); - System.out.println("(„• ֊ •„) Danke schön für Ihre Bestellung!"); - System.out.println("━O━O━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); - System.out.println("Name: "); - System.out.println(name); - System.out.println("\nAdresse: "); - System.out.println(adresse); - System.out.println("\nArtikel:" ); - int artpos = 1; - for (WarenkorbPosition wp : warenkorb.getPositionen()) { - System.out.printf("Pos.: %2d. | %d | %-23s | %.2f€\n", - artpos++, - wp.getMenge(), - wp.getProdukt().getName(), - wp.getProdukt().getPreis()); - } - System.out.println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); - warenkorb = new Warenkorb(); - System.out.println("\n\nIhr Warenkorb wurde geleert! ◝(˶˃ᵕ˂˶)◜"); - System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n"); - hauptmenü(); + bestellen(); } else { System.out.println("\n\n Ungültige Eingabe (˃̣̣̥ᯅ˂̣̣̥) Versuchen Sie es bitte erneut: \n\n"); - warenkorbAnzeigen(); + warenkorb(); } } } + public static void bestellen() { + System.out.print("Bitte geben Sie Ihren vollständigen Namen ein: "); + String name = sc.nextLine(); + + System.out.print("\nBitte geben Sie Ihre Lieferadresse ein: "); + String adresse = sc.nextLine(); + + Bestellung bestellung = new Bestellung(name, adresse, warenkorb); + + System.out.println("\n\n\n\n\n(\\ (\\"); + System.out.println("(„• ֊ •„) Danke schön für Ihre Bestellung!"); + System.out.println("━O━O━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); + System.out.println("Name: \n" + bestellung.getName()); + System.out.println("\nAdresse: \n" + bestellung.getAdresse()); + System.out.println("\nArtikel:" ); + int artpos = 1; + for (WarenkorbPosition wp : bestellung.getWarenkorb().getPositionen()) { + System.out.printf("Pos.: %2d. | %2d | %-23s | %.2f€\n", + artpos++, + wp.getMenge(), + wp.getProdukt().getName(), + wp.getProdukt().getPreis()); + } + System.out.printf("\nGesamtpreis: \n%.2f€\n", bestellung.getGesamtpreis()); + System.out.println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); + warenkorb = new Warenkorb(); + System.out.println("\n\nIhr Warenkorb wurde geleert! ◝(˶˃ᵕ˂˶)◜"); + System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n"); + hauptmenü(); + } - public static void mengeBearbeiten() { + + public static void menge() { System.out.print("Welche Position möchten Sie bearbeiten?: "); int posNr = Integer.parseInt(sc.nextLine()) - 1; if (posNr < 0 || posNr >= warenkorb.getPositionen().size()) { System.out.println("Ungültige Eingabe (˃̣̣̥ᯅ˂̣̣̥) Versuchen Sie es bitte erneut:"); - warenkorbAnzeigen(); + warenkorb(); return; } WarenkorbPosition wp = warenkorb.getPositionen().get(posNr); - Produkt p = wp.getProdukt(); - int alt = wp.getMenge(); + Produkt p = wp.getProdukt(); + int alt = wp.getMenge(); - System.out.print("\nGeben Sie bitte die neue Menge: "); + System.out.print("\nGeben Sie bitte die neue Menge an: "); int neu = Integer.parseInt(sc.nextLine()); int x = neu - alt; if (neu == 0) { + shop.erhöhen(p, alt); warenkorb.pEntfernen(p); System.out.println("Die Position wurde gelöscht! ✧。٩(ˊᗜˋ)و✧*。"); - } else if (x > 0 && p.bestand < x) { + } else if (x > 0 && p.getBestand() < x) { System.out.println("Leider reicht unser Bestand nicht aus (˃̣̣̥ᯅ˂̣̣̥)"); } else { if (x > 0) shop.reduzieren(p, x); @@ -230,7 +256,6 @@ public class shopTUI { warenkorb.mengeAendern(p, neu); System.out.println("Die Menge wurde geändert! ✧。٩(ˊᗜˋ)و✧*。"); } - - warenkorbAnzeigen(); + warenkorb(); } }