Änderungen bzgl. Tests / Auszahlen / Überweisen

robinschumann 2022-10-24 20:13:49 +02:00
parent 666fd4909a
commit 4e19661d34
6 changed files with 214 additions and 15 deletions

View File

@ -3,14 +3,28 @@ package de.hs_mannheim.informatik.bank.domain;
import java.io.Serializable; import java.io.Serializable;
public class Girokonto extends Konto implements Serializable { public class Girokonto extends Konto implements Serializable {
private long dispo = -5000;
public Girokonto(String inhaber, int kontozähler) { public Girokonto(String inhaber, int kontozähler) {
super(inhaber, 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) { public boolean überweise(Girokonto ziel, long betrag, String zweck) {
if (super.getKontostand() - betrag >= 0) { if (super.getKontostand() - betrag >= dispo) {
this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); this.giroAuszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber());
ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber());
return true; return true;

View File

@ -5,10 +5,10 @@ import java.util.ArrayList;
public class Konto implements Serializable { public class Konto implements Serializable {
private int nummer; private int nummer;
private long stand = 0; protected long stand = 0;
private String inhaber; private String inhaber;
private ArrayList<Kontobewegung> kontobewegungen; protected ArrayList<Kontobewegung> kontobewegungen;
public Konto(String inhaber, int kontozähler) { public Konto(String inhaber, int kontozähler) {
nummer = 1000 + kontozähler; nummer = 1000 + kontozähler;
@ -40,7 +40,7 @@ public class Konto implements Serializable {
kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); 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) { if (stand - betrag >= 0) {
stand -= betrag; stand -= betrag;
@ -52,6 +52,7 @@ public class Konto implements Serializable {
return false; return false;
} }
public String[] getKontobewegungen() { public String[] getKontobewegungen() {
String[] auflistung = new String[kontobewegungen.size()]; String[] auflistung = new String[kontobewegungen.size()];

View File

@ -25,10 +25,10 @@ class KontoTest {
k2.einzahlen(100, "Test", "Einzahlung", "JUnit"); k2.einzahlen(100, "Test", "Einzahlung", "JUnit");
assertEquals(100, k2.getKontostand()); assertEquals(100, k2.getKontostand());
assertTrue(k2.auszahlen(50, "Test", "Auszahlung", "JUnit")); assertTrue(k2.sparkontoAuszahlen(50, "Test", "Auszahlung", "JUnit"));
assertEquals(50, k2.getKontostand()); assertEquals(50, k2.getKontostand());
assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); assertFalse(k2.sparkontoAuszahlen(500, "Test", "Auszahlung", "JUnit"));
assertEquals(50, k2.getKontostand()); assertEquals(50, k2.getKontostand());
} }

View File

@ -50,12 +50,20 @@ public class Banksystem {
return konto.getKontostand(); 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 { public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception {
Konto konto = bank.findeKonto(kontonummer); 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()); Persistenz.speichereBankDaten(this.bank, bank.getName());
return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); return funktioniert;
} }
public String[] erstelleKontoauszug(int kontonummer) { public String[] erstelleKontoauszug(int kontonummer) {
@ -64,12 +72,16 @@ public class Banksystem {
return konto.getKontobewegungen(); 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 start = bank.findeKonto(startkonto);
Konto ziel = bank.findeKonto(zielkonto); Konto ziel = bank.findeKonto(zielkonto);
if (start instanceof Girokonto && ziel instanceof Girokonto) { 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; return false;

View File

@ -1,19 +1,190 @@
package de.hs_mannheim.informatik.bank.facade; 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.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; 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; import org.junit.jupiter.api.Test;
class SystemTest { class SystemTest {
@Test @Test
void smokeTest() throws Exception { void smokeTest() throws Exception {
Banksystem bs = new Banksystem("Testsystem"); Banksystem bs = new Banksystem("Testsystem");
assertNotNull(bs); assertNotNull(bs);
assertEquals(0, bs.getKontenliste().length); assertEquals(0, bs.getKontenliste().length);
assertEquals("Testsystem", bs.getBankname()); 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();
} }
} }
}

View File

@ -77,6 +77,7 @@ public class UI {
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 auswahl = Integer.parseInt(sc.nextLine());
int kontonummer = bs.kontoAnlegen(name, auswahl); int kontonummer = bs.kontoAnlegen(name, auswahl);
System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt."); System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt.");
} }
@ -128,7 +129,7 @@ public class UI {
System.out.println("Noch keine Kontobewegungen."); 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: "); System.out.print("Bitte die Kontonummer des Ausgangskontos der Überweisung eingeben: ");
int startkonto = Integer.parseInt(sc.nextLine()); int startkonto = Integer.parseInt(sc.nextLine());