diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..9478cb1 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java index 16a794f..5bca47a 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java @@ -6,7 +6,7 @@ import de.hs_mannheim.informatik.bank.ui.UI; public class Main { public static void main(String[] args) throws Exception { - Banksystem bs = new Banksystem("Spaßkasse Mannheim"); + Banksystem bs = new Banksystem("Sparkasse Mannheim"); UI ui = new UI(bs); } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java index 27aeb58..f55174b 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Bank.java @@ -7,20 +7,20 @@ import java.util.HashMap; public class Bank implements Serializable { private String name; private HashMap konten = new HashMap<>(); - private int kontozähler; + private int kontozähler; public Bank(String name) { this.name = name; - this.kontozähler = -1; + this.kontozähler = -1; } public int addKonto(String name, int auswahl) { Konto k; if (auswahl == 1) - k = new Konto(name, ++kontozähler); + k = new Konto(name, ++kontozähler); else - k = new Girokonto(name, ++kontozähler); + k = new Girokonto(name, ++kontozähler); konten.put(k.getKontonummer(), k); diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java index 0956f65..2ed9105 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java @@ -3,15 +3,17 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; public class Girokonto extends Konto implements Serializable { - - public Girokonto(String inhaber, int kontozähler) { - super(inhaber, kontozähler); + + private long dispositionsKredit=-1000; + + public Girokonto(String inhaber, int kontozähler) { + super(inhaber, kontozähler); } - public boolean Überweise(Girokonto ziel, long betrag, String zweck) { - if (super.getKontostand() - betrag >= 0) { - this.auszahlen(betrag, zweck, "Ãœberweisungsausgang", super.getInhaber()); - ziel.einzahlen(betrag, zweck, "Ãœberweisungseingang", super.getInhaber()); + public boolean überweise(Girokonto ziel, long betrag, String zweck) { + if (super.getKontostand() - betrag >= dispositionsKredit) { + this.auszahlenGiro(betrag, zweck, "Überweisungsausgang", super.getInhaber()); + ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); return true; } @@ -19,9 +21,13 @@ public class Girokonto extends Konto implements Serializable { return false; } + + @Override public String toString() { return "Giro-" + super.toString(); } + + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java index 31220e1..5f88c9e 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Konto.java @@ -7,11 +7,14 @@ public class Konto implements Serializable { private int nummer; private long stand = 0; private String inhaber; - + private long dispositionsKredit=-1000; + private ArrayList kontobewegungen; + private long[] saldo = new long[5]; + - public Konto(String inhaber, int kontozähler) { - nummer = 1000 + kontozähler; + public Konto(String inhaber, int kontozähler) { + nummer = 1000 + kontozähler; this.inhaber = inhaber; this.kontobewegungen = new ArrayList<>(); @@ -33,6 +36,10 @@ public class Konto implements Serializable { public long getKontostand() { return stand; } + + public void setKontostand(long stand) { + this.stand = stand; + } public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { stand += betrag; @@ -41,6 +48,7 @@ public class Konto implements Serializable { } public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (stand - betrag >= 0) { stand -= betrag; @@ -48,9 +56,23 @@ public class Konto implements Serializable { return true; } - + return false; } + + public boolean auszahlenGiro(long betrag, String zweck, String art, String auftraggeber) { + + if (stand - betrag >= dispositionsKredit) { + stand -= betrag; + + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + + return true; + } + + return false; + + } public String[] getKontobewegungen() { String[] auflistung = new String[kontobewegungen.size()]; @@ -62,5 +84,18 @@ public class Konto implements Serializable { return auflistung; } + + public void kontobewegung(long betrag, String zweck, String art, String auftraggeber) { + + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + } + + + public long berechneSaldo(long betrag) { + + long neuerStand = stand + betrag; + + return neuerStand; + } } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java index 04e96ae..3b7014e 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/KontoTest.java @@ -8,15 +8,15 @@ class KontoTest { @Test void testKontoBasics() { - Konto k = new Konto("Müller", 0); - assertEquals("Müller", k.getInhaber()); + Konto k = new Konto("Müller", 0); + assertEquals("Müller", k.getInhaber()); assertEquals(1000, k.getKontonummer()); assertEquals(0, k.getKontostand()); } @Test void testKontoEinUndAuszahlung() { - Konto k = new Konto("Müller", 0); + Konto k = new Konto("Müller", 0); Konto k2 = new Konto("Mayer", 1); assertEquals("Mayer", k2.getInhaber()); @@ -31,5 +31,17 @@ class KontoTest { assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); } + + //Saldo test + @Test + void ueberziehen() throws Exception { + Konto k = new Konto("Saulus", 2); + + assertEquals(true,k.auszahlenGiro(100, null, null, null)); + assertEquals(false,k.auszahlenGiro(10000, null, null, null)); + assertEquals(-100,k.getKontostand()); + } + + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java index 73aa0fd..ec36b69 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/Banksystem.java @@ -9,6 +9,7 @@ import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; public class Banksystem { private Bank bank; + static int counter = 0; public Banksystem(String bankname) throws Exception { if (Persistenz.sindDatenGespeichert(bankname)) @@ -53,10 +54,14 @@ public class Banksystem { public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { Konto konto = bank.findeKonto(kontonummer); - Persistenz.speichereBankDaten(this.bank, bank.getName()); - - return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + if(konto instanceof Girokonto) { + return konto.auszahlenGiro(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + } + else + return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); } + + public String[] erstelleKontoauszug(int kontonummer) { Konto konto = bank.findeKonto(kontonummer); @@ -69,16 +74,24 @@ public class Banksystem { Konto ziel = bank.findeKonto(zielkonto); if (start instanceof Girokonto && ziel instanceof Girokonto) { - return ((Girokonto)start).Überweise((Girokonto)ziel, betrag, verwendungszweck); + return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck); } return false; } + public long getKontostand(int kontonummer) { Konto konto = bank.findeKonto(kontonummer); return konto.getKontostand(); } + + public long berechneSaldo(int Kontonummer, long betrag) { + Konto konto = bank.findeKonto(Kontonummer); + long neuerSaldo = konto.berechneSaldo(betrag); + + return neuerSaldo; + } } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java index 0ce5674..0f15cb9 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java @@ -1,12 +1,23 @@ package de.hs_mannheim.informatik.bank.facade; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.File; + +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -class SystemTest { +import de.hs_mannheim.informatik.bank.domain.Bank; +import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; +class SystemTest { + + String Testdatei="TestName"; + @Test void smokeTest() throws Exception { Banksystem bs = new Banksystem("Testsystem"); @@ -16,4 +27,111 @@ class SystemTest { assertEquals("Testsystem", bs.getBankname()); } + @Test + void bsGeldEinzahlenTest() throws Exception { +// Persistenz ps =new Persistenz(); + Bank bankTest=new Bank(Testdatei); + + Banksystem bsTest = new Banksystem(Testdatei); + //normales Konto anlegen + + int testK1 = bsTest.kontoAnlegen("testk1", 1); + int testK2 = bsTest.kontoAnlegen("testk2", 1); + + bsTest.geldEinzahlen(testK1, 3337); + bsTest.geldEinzahlen(testK2, 210); + + assertEquals(3337,bsTest.getKontostand(testK1)); + assertEquals(210,bsTest.getKontostand(testK2)); + + } + + @Test + void bsGeldAuszahlenTest() throws Exception { + + Banksystem bsTest = new Banksystem(Testdatei); + + //normales Konto anlegen + int testK1 = bsTest.kontoAnlegen("testk1", 1); + int testK2 = bsTest.kontoAnlegen("testk2", 1); + + bsTest.geldEinzahlen(testK1, 900); + bsTest.geldEinzahlen(testK2, 1453); + + assertEquals(900,bsTest.getKontostand(testK1)); + assertEquals(1453,bsTest.getKontostand(testK2)); + + bsTest.geldAuszahlen(testK1, 500); + bsTest.geldAuszahlen(testK2, 50); + + assertEquals(400,bsTest.getKontostand(testK1)); + assertEquals(1403,bsTest.getKontostand(testK2)); + + + } + + @Test + void persistierenTest() throws Exception { + + Banksystem bs = new Banksystem("Testdatei"); + + int testK1 = bs.kontoAnlegen("testk1", 1); + bs.geldEinzahlen(testK1, 1000); + assertEquals(1000, bs.getKontostand(testK1)); + + Banksystem tbs = new Banksystem("Testdatei"); + assertEquals(1000, tbs.getKontostand(testK1)); + + } + + @Test + void bsGeldAuszahlenBisDispoTest() throws Exception { + Banksystem bs = new Banksystem(Testdatei); + + + int testK1 = bs.kontoAnlegen("testk1", 2); + int testK2 = bs.kontoAnlegen("testk2", 2); + + bs.geldEinzahlen(testK1, 1000); + bs.geldEinzahlen(testK2, 3500); + + + assertEquals(1000, bs.getKontostand(testK1)); + assertEquals(3500, bs.getKontostand(testK2)); + + bs.geldAuszahlen(testK1, 1500); + assertEquals(-500, bs.getKontostand(testK1)); + bs.geldAuszahlen(testK1, 500); + assertEquals(-1000, bs.getKontostand(testK1)); + bs.geldAuszahlen(testK1, 1); + assertNotEquals(-999, bs.getKontostand(testK1)); + + } + + @Test + void bsÜberweisenTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + + int testK1 = bs.kontoAnlegen("testK1", 2); + int testK2 = bs.kontoAnlegen("testK2", 2); + + bs.geldEinzahlen(testK1, 500); + bs.geldEinzahlen(testK2, 1000); + + assertTrue(bs.überweisungBeauftragen(testK1, testK2, 550, "Testüberweisung")); + assertEquals(-50, bs.getKontostand(testK1)); + assertEquals(1550, bs.getKontostand(testK2)); + + } + + + @AfterEach + public void stDeleteFile() { + String Banksystemname = "Testsystem-bank-data.ser"; + File file = new File(Banksystemname); + if (file.exists()) { + file.delete(); + } + } } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java index 5d08e48..3b9e306 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java @@ -26,5 +26,9 @@ public class Persistenz { return bank; } - + + public static boolean löscheBankdaten(String name) { + File file = new File ("C:\\Users\\Drees\\git\\Bank-System\\Bank-Beispiel\\" + name + "-bank-data.ser"); + return file.delete(); + } } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java index cba3429..38c479d 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/ui/UI.java @@ -7,6 +7,7 @@ import de.hs_mannheim.informatik.bank.facade.Banksystem; public class UI { private Banksystem bs; Scanner sc = new Scanner(System.in); + static int counter =0; public UI(Banksystem bs) { this.bs = bs; @@ -20,14 +21,13 @@ public class UI { while (true) { System.out.println(); System.out.println("--------"); - System.out.println("Hauptmenü"); + System.out.println("Hauptmenü"); System.out.println("1 -> Konten anzeigen"); System.out.println("2 -> Konto anlegen"); System.out.println("3 -> Geld einzahlen"); System.out.println("4 -> Geld auszahlen"); System.out.println("5 -> Kontoauszug drucken"); - System.out.println("6 -> Ãœberweisung beauftragen"); - + System.out.println("6 -> Überweisung beauftragen"); System.out.println("9 -> Beenden"); System.out.println(); @@ -38,13 +38,11 @@ public class UI { try { switch(input) { case 1: kontenAnzeigen(); break; - case 2: - kontoAnlegen(); - break; + case 2: kontoAnlegen(); break; case 3: geldEinzahlen(); break; case 4: geldAuszahlen(); break; case 5: kontoauszugDrucken(); break; - case 6: überweisungBeauftragen(); break; + case 6: ÜberweisungBeauftragen(); break; case 9: break mainloop; } @@ -56,12 +54,12 @@ public class UI { System.out.println("Auf Wiedersehen!"); - } // hauptmenü + } // hauptmenü private void kontenAnzeigen() { String[] konten = bs.getKontenliste(); if (konten.length > 0) { - System.out.println("Folgende Konten sind aktuell verfügbar:"); + System.out.println("Folgende Konten sind aktuell verfügbar:"); for (String s : konten) { System.out.println(s); } @@ -74,7 +72,7 @@ public class UI { System.out.println("Bitte den Namen des Kontoinhabers angeben: "); String name = sc.nextLine(); - System.out.println("Möchten Sie ein Sparkonto (1) oder ein Girokonto (2) anlegen?"); + System.out.println("Möchten Sie ein Sparkonto (1) oder ein Girokonto (2) anlegen?"); int auswahl = Integer.parseInt(sc.nextLine()); int kontonummer = bs.kontoAnlegen(name, auswahl); @@ -83,41 +81,60 @@ public class UI { private void geldEinzahlen() throws Exception { System.out.println("Geld einzahlen"); - System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); int kontonummer = Integer.parseInt(sc.nextLine()); - // optional prüfen, ob Konto existiert + // optional prüfen, ob Konto existiert - System.out.print("Bitte den gewünschten Betrag eingeben: "); + System.out.print("Bitte den gewünschten Betrag eingeben: "); double betrag = Double.parseDouble(sc.nextLine()); long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100); + long saldo = bs.berechneSaldo(kontonummer, (long) betrag * 100); + counter++; + if (counter % 5 == 0) { + System.out.println("Zwischensaldo: " + (bs.getKontostand(kontonummer) / 100.0) + "€"); + } + + System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0)); } private void geldAuszahlen() throws Exception { System.out.println("Geld auszahlen"); - System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); int kontonummer = Integer.parseInt(sc.nextLine()); - System.out.print("Bitte den gewünschten Betrag eingeben: "); + System.out.print("Bitte den gewünschten Betrag eingeben: "); double betrag = Double.parseDouble(sc.nextLine()); boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long)betrag * 100); + + if (erfolgreich == true) { + long saldo = bs.berechneSaldo(kontonummer, (long) -betrag * 100); + counter++; + if (counter % 5 == 0) { + System.out.println("Zwischensaldo: " + (bs.getKontostand(kontonummer) / 100.0) + "€"); + } + } + System.out.printf("Auszahlung" + ((!erfolgreich)? " nicht" : "" )+ " erfolgreich. "); + System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); } private void kontoauszugDrucken() { - System.out.print("Bitte die gewünschte Kontonummer für den Auszug eingeben: "); + System.out.print("Bitte die gewünschte Kontonummer für den Auszug eingeben: "); int kontonummer = Integer.parseInt(sc.nextLine()); + + System.out.println(); // in echt auf einem Drucker - System.out.println("Auszug für Konto " + kontonummer); + System.out.println("Auszug für Konto " + kontonummer); String[] kontobewegungen = bs.erstelleKontoauszug(kontonummer); if (kontobewegungen.length > 0) @@ -128,14 +145,14 @@ public class UI { System.out.println("Noch keine Kontobewegungen."); } - private void überweisungBeauftragen() { - System.out.print("Bitte die Kontonummer des Ausgangskontos der Ãœberweisung eingeben: "); + private void ÜberweisungBeauftragen() { + System.out.print("Bitte die Kontonummer des Ausgangskontos der Überweisung eingeben: "); int startkonto = Integer.parseInt(sc.nextLine()); - System.out.print("Bitte die Kontonummmer für das Zielkonto der Ãœberweisung eingeben: "); + System.out.print("Bitte die Kontonummmer für das Zielkonto der Überweisung eingeben: "); int zielkonto = Integer.parseInt(sc.nextLine()); - System.out.print("Bitte den gewünschten Ãœberweisungsbetrag eingeben: "); + System.out.print("Bitte den gewünschten Überweisungsbetrag eingeben: "); double betrag = Double.parseDouble(sc.nextLine()); System.out.print("Bitte den Verwendungszweck eingeben: "); @@ -143,7 +160,7 @@ public class UI { boolean erfolgreich = bs.überweisungBeauftragen(startkonto, zielkonto, (long)(betrag * 100), verwendungszweck); - System.out.println("Ãœberweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); + System.out.println("Überweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); } } diff --git a/Spaßkasse Mannheim-bank-data.ser b/Spaßkasse Mannheim-bank-data.ser new file mode 100644 index 0000000..1f216fd Binary files /dev/null and b/Spaßkasse Mannheim-bank-data.ser differ diff --git a/TestName-bank-data.ser b/TestName-bank-data.ser new file mode 100644 index 0000000..b780732 Binary files /dev/null and b/TestName-bank-data.ser differ diff --git a/.classpath b/oldclasspath.txt similarity index 74% rename from .classpath rename to oldclasspath.txt index 8ecf11b..3902eca 100644 --- a/.classpath +++ b/oldclasspath.txt @@ -1,6 +1,10 @@ - + + + + +