Aufgaben nochmal durchgangen, aufgefallen das bei Warenpreis BRUTTO ab

500€ frei ist und dass bei Versand nur 100g inkl. sein soll, die anderen
Gewichte exkl.

Bei Junit vorherige Vereinfachungen entfernt und delta 0.01 für
Rundungsfehler (von KI Vorschlag, siehe quellen.txt) auch entfernt, weil
unnötig, denn meine Methoden geben Wert 1:1 zurück

Optische Verfeinerungen
main
eronahasani 2025-12-15 02:50:32 +01:00
parent 379a5bb8f4
commit 2e6a8c154c
4 changed files with 103 additions and 93 deletions

View File

@ -44,6 +44,18 @@ public class Produkt {
public String toString() { public String toString() {
return id + " | " + name + " | " + preis + "€"; return id + " | " + name + " | " + preis + "€";
} }
public boolean namePasst(String suchbegriff) {
String n = name.toLowerCase();
String s = suchbegriff.toLowerCase();
for (int i = 0; i <= n.length() - s.length(); i++) {
if (n.substring(i, i + s.length()).equals(s)) {
return true;
}
}
return false;
}
} }

View File

@ -5,9 +5,11 @@ public class Warenkorb {
private ArrayList<WarenkorbPosition> positionen; private ArrayList<WarenkorbPosition> positionen;
public Warenkorb() { public Warenkorb() {
positionen = new ArrayList<>(); positionen = new ArrayList<>();
} }
public void produktHinzufügen(Produkt p, int menge) { public void produktHinzufügen(Produkt p, int menge) {
@ -26,6 +28,7 @@ public class Warenkorb {
} }
} }
public ArrayList<WarenkorbPosition> getPositionen() { public ArrayList<WarenkorbPosition> getPositionen() {
return positionen; return positionen;
@ -43,10 +46,11 @@ public class Warenkorb {
positionen = neu; positionen = neu;
} }
public boolean mengeAendern(Produkt p, int neu) { public boolean mengeAendern(Produkt p, int neu) {
if (neu == 0) { if (neu == 0) {
this.entfernen(p); entfernen(p);
return true; return true;
} }
@ -60,13 +64,16 @@ public class Warenkorb {
} }
public double produkteNetto() { public double produkteNetto() {
double preis = 0; double preis = 0;
for (WarenkorbPosition wp : positionen) { for (WarenkorbPosition wp : positionen) {
preis += wp.getMenge() * wp.getProdukt().getPreis(); preis += wp.getMenge() * wp.getProdukt().getPreis();
} }
return preis; return preis;
} }
public double produkteMwst() { public double produkteMwst() {
@ -80,21 +87,30 @@ public class Warenkorb {
return mwst; return mwst;
} }
public double produkteBrutto() {
return produkteNetto() + produkteMwst();
}
public double versandBrutto() { public double versandBrutto() {
if (produkteNetto() >= 500) return 0; if (produkteBrutto() >= 500) {
return 0;
}
double gewicht = 0; double gewicht = 0;
for (WarenkorbPosition wp : positionen) { for (WarenkorbPosition wp : positionen) {
gewicht += wp.getProdukt().getGewicht() * wp.getMenge(); gewicht += wp.getProdukt().getGewicht() * wp.getMenge();
} }
if (gewicht <= 0.1) { if (gewicht <= 0.1) {
return 3.95; return 3.95;
} }
else if (gewicht <= 1.0) { else if (gewicht < 1.0) {
return 4.95; return 4.95;
} }
else if (gewicht <= 5.0) { else if (gewicht < 5.0) {
return 5.95; return 5.95;
} }
else { else {
@ -102,6 +118,7 @@ public class Warenkorb {
} }
} }
public double versandNetto() { public double versandNetto() {
double netto7 = 0; double netto7 = 0;
@ -111,13 +128,15 @@ public class Warenkorb {
for (WarenkorbPosition wp : positionen) { for (WarenkorbPosition wp : positionen) {
double netto = wp.getProdukt().getPreis() * wp.getMenge(); double netto = wp.getProdukt().getPreis() * wp.getMenge();
int mwst = wp.getProdukt().getMwst(); int mwst = wp.getProdukt().getMwst();
if (mwst == 7) netto7 += netto; if (mwst == 7) {
else if (mwst == 19) netto19 += netto; netto7 += netto;
gesamtNetto += netto; }
else if (mwst == 19) {
netto19 += netto;
}
gesamtNetto += netto;
} }
if (versandBrutto() == 0 || gesamtNetto == 0) return 0;
double anteil7 = netto7 / gesamtNetto; double anteil7 = netto7 / gesamtNetto;
double anteil19 = netto19 / gesamtNetto; double anteil19 = netto19 / gesamtNetto;
@ -127,6 +146,7 @@ public class Warenkorb {
return (anteilBrutto7 / 1.07) + (anteilBrutto19 / 1.19); return (anteilBrutto7 / 1.07) + (anteilBrutto19 / 1.19);
} }
public double versandMwst() { public double versandMwst() {
double netto7 = 0; double netto7 = 0;
@ -137,18 +157,14 @@ public class Warenkorb {
double netto = wp.getProdukt().getPreis() * wp.getMenge(); double netto = wp.getProdukt().getPreis() * wp.getMenge();
int mwst = wp.getProdukt().getMwst(); int mwst = wp.getProdukt().getMwst();
if (mwst == 7) { if (mwst == 7) {
netto7 += netto; netto7 += netto;
} else if (mwst == 19) { } else if (mwst == 19) {
netto19 += netto; netto19 += netto;
} }
gesamtNetto += netto; gesamtNetto += netto;
} }
if (versandBrutto() == 0 || gesamtNetto == 0) {
return 0;
}
double anteil7 = netto7 / gesamtNetto; double anteil7 = netto7 / gesamtNetto;
double anteil19 = netto19 / gesamtNetto; double anteil19 = netto19 / gesamtNetto;

View File

@ -49,69 +49,49 @@ public class WarenkorbTest {
@Test @Test
void testGleicheProduktHinzufuegen() { void testGleicheProduktHinzufuegen() {
Produkt p = produkte.get(0);
warenkorb.produktHinzufügen(p, 1); warenkorb.produktHinzufügen(produkte.get(0), 1);
warenkorb.produktHinzufügen(p, 2); warenkorb.produktHinzufügen(produkte.get(0), 2);
assertEquals(3, warenkorb.getPositionen().get(0).getMenge()); assertEquals(3, warenkorb.getPositionen().get(0).getMenge());
} }
@Test @Test
void testMengeAendern() { void testMengeAendern() {
Produkt p = produkte.get(1);
warenkorb.produktHinzufügen(p, 2); warenkorb.produktHinzufügen(produkte.get(1), 2);
assertTrue(warenkorb.mengeAendern(p, 3)); assertTrue(warenkorb.mengeAendern(produkte.get(1), 3));
assertEquals(3, warenkorb.getPositionen().get(0).getMenge()); assertEquals(3, warenkorb.getPositionen().get(0).getMenge());
} }
@Test @Test
void testEntfernen() { void testEntfernenOderWarenkorbLeer() {
Produkt p = produkte.get(2);
warenkorb.produktHinzufügen(p, 1); warenkorb.produktHinzufügen(produkte.get(2), 1);
warenkorb.mengeAendern(p, 0); warenkorb.mengeAendern(produkte.get(2), 0);
assertEquals(0, warenkorb.getPositionen().size());
}
@Test
void testWarenkorbLeer() {
Produkt p = produkte.get(0);
warenkorb.produktHinzufügen(p, 2);
warenkorb.mengeAendern(p, 0);
assertEquals(0, warenkorb.getPositionen().size()); assertEquals(0, warenkorb.getPositionen().size());
} }
@Test @Test
void testProdukteNetto() { void testProdukteNetto() {
Produkt p = produkte.get(0);
warenkorb.produktHinzufügen(p, 1); warenkorb.produktHinzufügen(produkte.get(0), 1);
double netto = p.getPreis(); double netto = produkte.get(0).getPreis();
assertEquals(netto, warenkorb.produkteNetto(), 0.01); assertEquals(netto, warenkorb.produkteNetto());
} }
@Test @Test
void testProdukteMwst() { void testProdukteMwst() {
Produkt p = produkte.get(0);
warenkorb.produktHinzufügen(p, 1); warenkorb.produktHinzufügen(produkte.get(0), 1);
double mwst = p.getPreis() * p.getMwst() / 100.0; double mwst = produkte.get(0).getPreis() * produkte.get(0).getMwst() / 100.0;
assertEquals(mwst, warenkorb.produkteMwst(), 0.01); assertEquals(mwst, warenkorb.produkteMwst());
} }
@ -128,7 +108,7 @@ public class WarenkorbTest {
double mwstP2 = 3 * p2.getPreis() * p2.getMwst() / 100.0; double mwstP2 = 3 * p2.getPreis() * p2.getMwst() / 100.0;
double erwartet = mwstP1 + mwstP2; double erwartet = mwstP1 + mwstP2;
assertEquals(erwartet, warenkorb.produkteMwst(), 0.01); assertEquals(erwartet, warenkorb.produkteMwst());
} }
@ -149,7 +129,7 @@ public class WarenkorbTest {
double erwartet = (anteilBrutto7 / 1.07) double erwartet = (anteilBrutto7 / 1.07)
+ (anteilBrutto19 / 1.19); + (anteilBrutto19 / 1.19);
assertEquals(erwartet, warenkorb.versandNetto(), 0.01); assertEquals(erwartet, warenkorb.versandNetto());
} }
@ -174,7 +154,7 @@ public class WarenkorbTest {
+ (anteilBrutto19 + (anteilBrutto19
- nettoVersand19); - nettoVersand19);
assertEquals(erwartet, warenkorb.versandMwst(), 0.01); assertEquals(erwartet, warenkorb.versandMwst());
} }

View File

@ -11,7 +11,7 @@ import java.io.FileNotFoundException;
public class shopTUI { public class shopTUI {
private static OnlineShop shop; private static OnlineShop shop;
private static Warenkorb warenkorb = new Warenkorb(); private static Warenkorb warenkorb;
private static Scanner sc = new Scanner(System.in); private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws FileNotFoundException { public static void main(String[] args) throws FileNotFoundException {
@ -55,9 +55,8 @@ public class shopTUI {
public static void angebot() { public static void angebot() {
System.out.println("\n\n\n૮ ྀིᴗ͈.ᴗ͈ ྀིა Unser Angebot: \n"); System.out.println("\n\n\n૮ ྀིᴗ͈.ᴗ͈ ྀིა Unser Angebot: \n");
String[] produkte = shop.produktListe();
for (int i = 0; i < produkte.length; i++) { for (int i = 0; i < shop.lager.size(); i++) {
Produkt p = shop.lager.get(i); Produkt p = shop.lager.get(i);
System.out.printf(" %-2d | %-23s | %.2f€ | + %2d%%\n", p.getId(), p.getName(), p.getPreis(), p.getMwst()); System.out.printf(" %-2d | %-23s | %.2f€ | + %2d%%\n", p.getId(), p.getName(), p.getPreis(), p.getMwst());
} }
@ -92,53 +91,56 @@ public class shopTUI {
System.out.println("\n(˶˃ᵕ˂˶) Wonach suchen Sie?: "); System.out.println("\n(˶˃ᵕ˂˶) Wonach suchen Sie?: ");
String suchbegriff = sc.nextLine().toLowerCase(); String suchbegriff = sc.nextLine().toLowerCase();
if (suchbegriff.length() == 0) return; if (suchbegriff.length() == 0) {
if (suchbegriff.equals("hauptmenü")) return; return;
}
if (suchbegriff.equals("hauptmenü")) {
return;
}
boolean gefunden = false; boolean gefunden = false;
for (int artnr = 0; artnr < shop.lager.size(); artnr++) { for (int artnr = 0; artnr < shop.lager.size(); artnr++) {
Produkt p = shop.lager.get(artnr); Produkt p = shop.lager.get(artnr);
for (int i = 0; i <= p.getName().length() - suchbegriff.length(); i++) {
if (p.getName().substring(i, i + suchbegriff.length()).toLowerCase().equals(suchbegriff)) { if (p.namePasst(suchbegriff)) {
if(!gefunden) { if(!gefunden) {
System.out.println("\n(˶ˆᗜˆ˵) Wir haben folgenden Treffer zu bieten: "); System.out.println("\n(˶ˆᗜˆ˵) Wir haben folgenden Treffer zu bieten: ");
} }
System.out.println(p); System.out.println(p);
gefunden = true; gefunden = true;
System.out.println("\nMöchten Sie das Produkt zu Ihrem Warenkorb hinzufügen? (✿◠ᴗ◠)"); System.out.println("\nMöchten Sie das Produkt zu Ihrem Warenkorb hinzufügen? (✿◠ᴗ◠)");
String antwort = sc.nextLine().toLowerCase(); String antwort = sc.nextLine().toLowerCase();
if (antwort.equals("ja")) {
System.out.println("(„•֊•„) Geben Sie bitte die gewünschte Menge an: ");
int menge = Integer.parseInt(sc.nextLine());
if (antwort.equals("ja")) { if (menge <= p.getBestand()) {
System.out.println("(„•֊•„) Geben Sie bitte die gewünschte Menge an: "); warenkorb.produktHinzufügen(p, menge);
int menge = Integer.parseInt(sc.nextLine()); shop.reduzieren(p, menge);
System.out.println("Das Produkt wurde in der gewünschten Menge zum Warenkorb hinzugefügt ✧。٩(ˊᗜˋ)و✧*。");
if (menge <= p.getBestand()) { System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n");
warenkorb.produktHinzufügen(p, menge); hauptmenü();
shop.reduzieren(p, menge);
System.out.println("Das Produkt wurde in der gewünschten Menge zum Warenkorb hinzugefügt ✧。٩(ˊᗜˋ)و✧*。");
System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n");
hauptmenü();
} else {
System.out.println("Leider reicht unser Bestand nicht aus (˃̣̣̥ᯅ˂̣̣̥)");
System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n");
hauptmenü();
}
} else { } else {
System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n"); System.out.println("Leider reicht unser Bestand nicht aus (˃̣̣̥ᯅ˂̣̣̥)");
hauptmenü(); System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n");
hauptmenü();
} }
} } else {
} System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n");
hauptmenü();
}
}
} }
if (!gefunden) { if (!gefunden) {
System.out.println("Leider keine Treffer (˃̣̣̥ᯅ˂̣̣̥)"); System.out.println("Leider keine Treffer (˃̣̣̥ᯅ˂̣̣̥)");
System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n"); System.out.println("Ab zum Hauptmenü... ٩(^ᗜ^ )و \n\n\n");
hauptmenü(); hauptmenü();
} }
} }
public static void warenkorb() { public static void warenkorb() {