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 d9b1d77..68807df 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,14 +3,28 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; public class Girokonto extends Konto implements Serializable { + private long dispo = -5000; public Girokonto(String inhaber, int kontozähler) { super(inhaber, kontozähler); + + } + public boolean giroAuszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (stand - betrag >= dispo) { + stand -= betrag; + + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + + return true; + } + + return false; + } public boolean überweise(Girokonto ziel, long betrag, String zweck) { - if (super.getKontostand() - betrag >= 0) { - this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); + if (super.getKontostand() - betrag >= dispo) { + this.giroAuszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); return true; 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..4799b81 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 @@ -5,10 +5,10 @@ import java.util.ArrayList; public class Konto implements Serializable { private int nummer; - private long stand = 0; + protected long stand = 0; private String inhaber; - private ArrayList kontobewegungen; + protected ArrayList kontobewegungen; public Konto(String inhaber, int kontozähler) { nummer = 1000 + kontozähler; @@ -40,7 +40,7 @@ public class Konto implements Serializable { kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); } - public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + public boolean sparkontoAuszahlen(long betrag, String zweck, String art, String auftraggeber) { if (stand - betrag >= 0) { stand -= betrag; @@ -52,6 +52,7 @@ public class Konto implements Serializable { return false; } + public String[] getKontobewegungen() { String[] auflistung = new String[kontobewegungen.size()]; 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..955a2e8 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 @@ -25,10 +25,10 @@ class KontoTest { k2.einzahlen(100, "Test", "Einzahlung", "JUnit"); assertEquals(100, k2.getKontostand()); - assertTrue(k2.auszahlen(50, "Test", "Auszahlung", "JUnit")); + assertTrue(k2.sparkontoAuszahlen(50, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); - assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); + assertFalse(k2.sparkontoAuszahlen(500, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.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 5d72301..7b8547f 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 @@ -19,7 +19,7 @@ public class Banksystem { public int kontoAnlegen(String name, int auswahl) throws Exception { int kontonummer = bank.addKonto(name, auswahl); - + Persistenz.speichereBankDaten(this.bank, bank.getName()); return kontonummer; @@ -31,7 +31,7 @@ public class Banksystem { int i = 0; for (Konto k : konten) { - liste[i++] = k.toString(); + liste[i++] = k.toString(); } return liste; @@ -46,16 +46,24 @@ public class Banksystem { konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber()); Persistenz.speichereBankDaten(this.bank, bank.getName()); - + return konto.getKontostand(); } + // hier war ein Fehler drin, es wurde zuerst gespeichert und dann ausgezahlt, + // ich speichere den boolean jetzt zwischen, führe die Methode aus und gebe den + // boolean dann zurück public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception { Konto konto = bank.findeKonto(kontonummer); - + if(konto instanceof Girokonto) { + boolean funktioniert = ((Girokonto) konto).giroAuszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + return funktioniert; + } + boolean funktioniert = konto.sparkontoAuszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + Persistenz.speichereBankDaten(this.bank, bank.getName()); - return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); + return funktioniert; } public String[] erstelleKontoauszug(int kontonummer) { @@ -64,12 +72,16 @@ public class Banksystem { return konto.getKontobewegungen(); } - public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) { + //hier das gleiche Problem wie in "geldAuszahlen" -> boolean zwischenspeichern und dann speichern + public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) throws Exception { Konto start = bank.findeKonto(startkonto); Konto ziel = bank.findeKonto(zielkonto); if (start instanceof Girokonto && ziel instanceof Girokonto) { - return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck); + boolean funktioniert = ((Girokonto) start).überweise((Girokonto) ziel, betrag, verwendungszweck); + Persistenz.speichereBankDaten(this.bank, bank.getName()); + return funktioniert; + } return false; 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..3983fcf 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,19 +1,190 @@ package de.hs_mannheim.informatik.bank.facade; +import de.hs_mannheim.informatik.bank.domain.Konto; + +import static org.junit.Assert.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.io.File; +import java.nio.file.Files; + +import org.junit.After; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; class SystemTest { + @Test void smokeTest() throws Exception { Banksystem bs = new Banksystem("Testsystem"); + assertNotNull(bs); assertEquals(0, bs.getKontenliste().length); assertEquals("Testsystem", bs.getBankname()); + + + + } + + @Test + void bsGeldEinzahlenTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + //Erstmal Konten anlegen bevor diese getestet werden können; 1 für Auswahl Sparkonto + int testKontonummer1 = bs.kontoAnlegen("Robin", 1); + int testKontonummer2 = bs.kontoAnlegen("Kai", 1); + + + bs.geldEinzahlen(testKontonummer1, 500); + bs.geldEinzahlen(testKontonummer2, 1000); + + //Überprüfen, ob das Einzahlen funktioniert + assertEquals(500, bs.getKontostand(testKontonummer1)); + assertEquals(1000, bs.getKontostand(testKontonummer2)); + + + } + + @Test + void bsGeldAuszahlenTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + //Erstmal Konten anlegen bevor diese getestet werden können; 1 für Auswahl Sparkonto + int testKontonummer1 = bs.kontoAnlegen("Robin", 1); + int testKontonummer2 = bs.kontoAnlegen("Kai", 1); + + bs.geldEinzahlen(testKontonummer1, 500); + bs.geldEinzahlen(testKontonummer2, 1000); + + //Überprüfen, ob das Einzahlen funktioniert + assertEquals(500, bs.getKontostand(testKontonummer1)); + assertEquals(1000, bs.getKontostand(testKontonummer2)); + + bs.geldAuszahlen(testKontonummer1, 250); + bs.geldAuszahlen(testKontonummer2, 750); + + assertEquals(250, bs.getKontostand(testKontonummer1)); + assertEquals(250, bs.getKontostand(testKontonummer2)); + + + + } + + @Test + void bsGeldAuszahlenBisDispoTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + //Erstmal Konten anlegen bevor diese getestet werden können; 2 für Auswahl Girokonto + int testKontonummer1 = bs.kontoAnlegen("Robin", 2); + int testKontonummer2 = bs.kontoAnlegen("Kai", 2); + + bs.geldEinzahlen(testKontonummer1, 500); + bs.geldEinzahlen(testKontonummer2, 1000); + + + assertEquals(500, bs.getKontostand(testKontonummer1)); + //assertEquals(1000, bs.getKontostand(testKontonummer2)); + + bs.geldAuszahlen(testKontonummer1, 5499); + assertEquals(-4999, bs.getKontostand(testKontonummer1)); + bs.geldAuszahlen(testKontonummer1, 1); + assertEquals(-5000, bs.getKontostand(testKontonummer1)); + bs.geldAuszahlen(testKontonummer1, 1); + assertNotEquals(-5001, bs.getKontostand(testKontonummer1)); + //System.out.println(bs.getKontostand(testKontonummer1)); + + + } + + @Test + void bsÜberweisenTest() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + //Erstmal Konten anlegen bevor diese getestet werden können; 2 für Auswahl Girokonto + int testKontonummer1 = bs.kontoAnlegen("Robin", 2); + int testKontonummer2 = bs.kontoAnlegen("Kai", 2); + + bs.geldEinzahlen(testKontonummer1, 500); + bs.geldEinzahlen(testKontonummer2, 1000); + + bs.überweisungBeauftragen(testKontonummer1, testKontonummer2, 500, "Testüberweisung"); + assertEquals(0, bs.getKontostand(testKontonummer1)); + assertEquals(1500, bs.getKontostand(testKontonummer2)); + bs.überweisungBeauftragen(testKontonummer1, testKontonummer2, 5000, "Testüberweisung"); + assertEquals(-5000, bs.getKontostand(testKontonummer1)); + assertEquals(6500, bs.getKontostand(testKontonummer2)); + //System.out.println(bs.getKontostand(testKontonummer2) + "//"+bs.getKontostand(testKontonummer1)); + bs.überweisungBeauftragen(testKontonummer1, testKontonummer2, 1, "Testüberweisung"); + assertNotEquals(5001, bs.getKontostand(testKontonummer1)); + assertNotEquals(6501, bs.getKontostand(testKontonummer2)); + + } +/* + @Test + void geldEinzahlenTest() { + // Konto anlegen mit Kontonummer 1000 + Konto testKonto1 = new Konto("Robin", 0); + + // Konto anlegen mit Kontonummer 1001 + Konto testKonto2 = new Konto("Kai", 1); + + // Überprüfen der Konten + assertEquals(1000, testKonto1.getKontonummer()); + assertEquals("Robin", testKonto1.getInhaber()); + + assertEquals(1001, testKonto2.getKontonummer()); + assertEquals("Kai", testKonto2.getInhaber()); + + // Zum testen der Einzahlung muss erstmal auf jedes Konto was eingezahlt werden + testKonto1.einzahlen(500, "Testeinzahlung", "Einzahlung auf das Konto", "Robin"); + testKonto2.einzahlen(1000, "Testeinzahlung", "Einzahlung auf das Konto", "Kai"); + + assertEquals(500, testKonto1.getKontostand()); + assertEquals(1000, testKonto2.getKontostand()); + } + @Test + void geldAuszahlenTest() { + // Konto anlegen mit Kontonummer 1000, Auswahl 1 für Sparkonto + Konto testKonto1 = new Konto("Robin", 0); + + // Konto anlegen mit Kontonummer 1001, Auswahl 1 für Sparkonto + Konto testKonto2 = new Konto("Kai", 1); + + // Überprüfen der Konten + assertEquals(1000, testKonto1.getKontonummer()); + assertEquals("Robin", testKonto1.getInhaber()); + + assertEquals(1001, testKonto2.getKontonummer()); + assertEquals("Kai", testKonto2.getInhaber()); + + // Um die Auszahlung zu prüfen muss erst eingezahlt werden + // Zum testen der Einzahlung muss erstmal auf jedes Konto was eingezahlt werden + testKonto1.einzahlen(500, "Testeinzahlung", "Einzahlung auf das Konto", "Robin"); + testKonto2.einzahlen(1000, "Testeinzahlung", "Einzahlung auf das Konto", "Kai"); + + // Gleiches Spiel um die Auszahlung zu testen; erst auszahlen und dann prüfen ob + // jetzt die Differenz auf dem Konto ist + testKonto1.auszahlen(250, "Testauszahlung", "Auszahlen vom Konto", "Robin"); + testKonto2.auszahlen(750, "Testauszahlung", "Auszahlen vom Konto", "Robin"); + + assertEquals(250, testKonto1.getKontostand()); + assertEquals(250, testKonto2.getKontostand()); + + }*/ + + @AfterEach + public void stDeleteFile() { + String Banksystemname = "Testsystem-bank-data.ser"; + //boolean loeschen = false; + File file = new File(Banksystemname); + if (file.exists()) { + 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 001e321..187bca6 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 @@ -76,6 +76,7 @@ public class UI { 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); System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt."); @@ -128,7 +129,7 @@ public class UI { System.out.println("Noch keine Kontobewegungen."); } - private void überweisungBeauftragen() { + private void überweisungBeauftragen() throws Exception { System.out.print("Bitte die Kontonummer des Ausgangskontos der Überweisung eingeben: "); int startkonto = Integer.parseInt(sc.nextLine());