diff --git a/Bank-Beispiel/.classpath b/Bank-Beispiel/.classpath index 257ce1d..e4f163f 100644 --- a/Bank-Beispiel/.classpath +++ b/Bank-Beispiel/.classpath @@ -1,11 +1,7 @@ - - - - - - - - - - - + + + + + + + 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..8072877 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/Main.java @@ -9,5 +9,4 @@ public class Main { Banksystem bs = new Banksystem("Spaßkasse Mannheim"); UI ui = new UI(bs); } - } \ No newline at end of file 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 d9b1d77..fca9891 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 @@ -1,24 +1,70 @@ package de.hs_mannheim.informatik.bank.domain; import java.io.Serializable; +import java.util.Scanner; public class Girokonto extends Konto implements Serializable { - public Girokonto(String inhaber, int kontozähler) { - super(inhaber, kontozähler); + private long dispo = 0; + + public Girokonto(String inhaber, int kontozähler) { + super(inhaber, kontozähler); } - - public boolean überweise(Girokonto ziel, long betrag, String zweck) { + + public boolean überweise(Girokonto ziel, long betrag, String zweck) { + Scanner scan = new Scanner(System.in); if (super.getKontostand() - betrag >= 0) { - this.auszahlen(betrag, zweck, "Ãœberweisungsausgang", super.getInhaber()); - ziel.einzahlen(betrag, zweck, "Ãœberweisungseingang", super.getInhaber()); - + this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); + ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); return true; - } - + } return false; } + + public boolean überweiseDispo(long grenze, Girokonto ziel, long betrag, String zweck) { + erstelleDispo(grenze); + if (dispo - betrag >= 0) { + this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); + ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); + return true; + } else { + System.out.println("Immer noch zu wenig Geld"); + } + + return false; + } + + public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { + setStand(betrag); + + addPlusKontobewegung(betrag, zweck, art, auftraggeber); + } + + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (getStand() == 0) { + if (dispo > 0 && dispo >= betrag) { + dispo -= betrag; + addNegativeKontobewegung(betrag, zweck, art, auftraggeber); + return true; + } else { + return false; + } + } else { + setStand(-betrag); + addNegativeKontobewegung(betrag, zweck, art, auftraggeber); + return true; + } + } + + public boolean erstelleDispo(long grenze) { + this.dispo = grenze; + return true; + } + public long getDispo() { + return this.dispo; + } + @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..661c85d 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 @@ -10,8 +10,8 @@ public class Konto implements Serializable { private ArrayList kontobewegungen; - 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 +33,14 @@ public class Konto implements Serializable { public long getKontostand() { return stand; } + + public long getStand() { + return stand; + } + + public void setStand(long betrag) { + this.stand += betrag; + } public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { stand += betrag; @@ -63,4 +71,22 @@ public class Konto implements Serializable { return auflistung; } -} + public long getSaldo(int zahl) { + long saldo = 0; + + for (int x = 0; x < zahl; x++) { + Kontobewegung kb = kontobewegungen.get(x); + saldo += kb.getBetrag(); + } + return saldo; + } + + public void addPlusKontobewegung(long betrag, String zweck, String art, String auftraggeber) { + kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); + } + + public void addNegativeKontobewegung(long betrag, String zweck, String art, String auftraggeber) { + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + } + +} \ No newline at end of file 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..932a557 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 @@ -1,30 +1,29 @@ package de.hs_mannheim.informatik.bank.domain; import static org.junit.jupiter.api.Assertions.*; - import org.junit.jupiter.api.Test; class KontoTest { @Test - void testKontoBasics() { - Konto k = new Konto("Müller", 0); - assertEquals("Müller", k.getInhaber()); + void testKontoBasic() { + Konto k = new Konto("Müller", 0); + assertEquals("Müller", k.getInhaber()); assertEquals(1000, k.getKontonummer()); - assertEquals(0, k.getKontostand()); + assertEquals(0, k.getKontostand()); } - + @Test - void testKontoEinUndAuszahlung() { - Konto k = new Konto("Müller", 0); + void testKontoEinzahlenUndAuszahlung() { + Konto k = new Konto("Müller", 0); Konto k2 = new Konto("Mayer", 1); - + assertEquals("Mayer", k2.getInhaber()); assertNotEquals(k.getKontonummer(), k2.getKontonummer()); - + k2.einzahlen(100, "Test", "Einzahlung", "JUnit"); assertEquals(100, k2.getKontostand()); - + assertTrue(k2.auszahlen(50, "Test", "Auszahlung", "JUnit")); assertEquals(50, k2.getKontostand()); @@ -32,4 +31,56 @@ class KontoTest { assertEquals(50, k2.getKontostand()); } -} + @Test + void testeSaldo() { + Konto k = new Konto("Testsubjekt1", 1); + k.einzahlen(100, null, null, null); + k.einzahlen(100, null, null, null); + k.auszahlen(50, null, null, null); + + assertEquals(150, k.getSaldo(3)); + // Dieser Test überpfrüft die Saldo-Methode in der Kontoklasse + } + + @Test + void auszahlenTest1() { + Girokonto k = new Girokonto("Testsubjekt1", 2); + k.erstelleDispo(1000); + assertEquals(true, k.auszahlen(750, null, null, null)); + // Überprüfen: dispo wird etwas ausgezahlt und rest bleibt + } + + @Test + void auszahlenTooMuchTest() { + Girokonto k = new Girokonto("Testsubjekt1", 2); + k.erstelleDispo(1000); + k.auszahlen(1001, null, null, null); + assertEquals(false, k.auszahlen(1001, null, null, null)); + // es wird mehr ausgezahlt als im Dispo überhaupt verfügabr + } + + @Test + void überweiseFail() { + Girokonto k1 = new Girokonto("Testsubjekt1", 1); + Girokonto k2 = new Girokonto("Testsubjekt2", 1); + assertEquals(false, k1.überweise(k2, 100, null)); + // die Überweisung ist nicht erfolgreich + } + + @Test + void überweiseDispo() { + Girokonto k1 = new Girokonto("Testsubjekt1", 1); + Girokonto k2 = new Girokonto("Testsubjekt2", 1); + assertEquals(true, k1.überweiseDispo(101, k2, 100, null)); + // Dispo wird erhalten und danach wird überweisen + } + + @Test + void überweiseDispoRichtigerBetrag() { + Girokonto k1 = new Girokonto("Testsubjekt1", 1); + Girokonto k2 = new Girokonto("Testsubjekt2", 1); + k1.überweiseDispo(101, k2, 100, null); + assertEquals(100, k2.getKontostand()); + // Dispo wird aufgenommen und danach bleibt noch Rest übrig + } +} \ No newline at end of file diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java index d6b15dd..7956b7d 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java @@ -24,5 +24,10 @@ public class Kontobewegung implements Serializable { return "Kontobewegung [betrag=" + betrag + ", datum=" + datum + ", betreff=" + betreff + ", art=" + art + ", auftraggeber=" + auftraggeber + "]"; } + + //Aufgabe 7 + public long getBetrag() { + return this.betrag; + } } 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..3f71e1d 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 @@ -1,7 +1,6 @@ package de.hs_mannheim.informatik.bank.facade; import java.util.Collection; - import de.hs_mannheim.informatik.bank.domain.Bank; import de.hs_mannheim.informatik.bank.domain.Girokonto; import de.hs_mannheim.informatik.bank.domain.Konto; @@ -64,21 +63,36 @@ public class Banksystem { return konto.getKontobewegungen(); } - public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) { + public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) { 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); + return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck); } return false; } + + public boolean überweisungDispoBeauftragen(long dispo, int startkonto, int zielkonto, long betrag, String verwendungszweck) { + Konto start = bank.findeKonto(startkonto); + Konto ziel = bank.findeKonto(zielkonto); + + if (start instanceof Girokonto && ziel instanceof Girokonto) { + return ((Girokonto)start).überweiseDispo(dispo,(Girokonto)ziel, betrag, verwendungszweck); + } + return false; + } public long getKontostand(int kontonummer) { Konto konto = bank.findeKonto(kontonummer); return konto.getKontostand(); } + + public long getSaldo(int kontonummer, int zahl) { + Konto konto = bank.findeKonto(kontonummer); + return konto.getSaldo(zahl); + } -} +} \ No newline at end of file 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..3eea500 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 @@ -2,18 +2,69 @@ package de.hs_mannheim.informatik.bank.facade; 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.Test; class SystemTest { + String pfadDatei = "C:\\Users\\Fedot\\git\\Bank-Systeme\\Bank-Beispiel\\Testsystem-bank-data.ser"; + @Test void smokeTest() throws Exception { Banksystem bs = new Banksystem("Testsystem"); - + bs.kontoAnlegen("Testobjekt", 1); + assertNotNull(bs); - assertEquals(0, bs.getKontenliste().length); + assertEquals(1, bs.getKontenliste().length); assertEquals("Testsystem", bs.getBankname()); + delete(); } -} + // man soll nichts einzahlen und es soll funktionieren + @Test + void einzahlenTest1() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + int k1 = bs.kontoAnlegen("Testobjekt1", 1); + + assertEquals(0, bs.geldEinzahlen(k1, 0)); + delete(); + } + + // man zahlt 100 ein und es soll funktionieren + @Test + void einzahlenTest2() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + int k1 = bs.kontoAnlegen("Testobjekt1", 1); + + assertEquals(100, bs.geldEinzahlen(k1, 100)); + delete(); + } + + // 200 wird eingezahlt und 100 ausfgezahlt + @Test + void auszahlenTest1() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + int k2 = bs.kontoAnlegen("Testobjekt2", 1); + bs.geldEinzahlen(k2, 200); + + assertEquals(true, bs.geldAuszahlen(k2, 100)); + delete(); + } + + // es wird zu viell ausgezhalt und es soll fehlschlagen + @Test + void auszahlenTest2() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + int k2 = bs.kontoAnlegen("Testobjekt2", 1); + bs.geldEinzahlen(k2, 100); + + assertEquals(false, bs.geldAuszahlen(k2, 101)); + delete(); + } + + //Der Pfad in den Dateien wird gelöscht + public void delete() throws Exception { + File f = new File(pfadDatei); + f.delete(); + } +} \ No newline at end of file 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..09214d9 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 @@ -1,7 +1,6 @@ package de.hs_mannheim.informatik.bank.ui; import java.util.Scanner; - import de.hs_mannheim.informatik.bank.facade.Banksystem; public class UI { @@ -10,25 +9,28 @@ public class UI { public UI(Banksystem bs) { this.bs = bs; - hauptmenü(); + hauptmenü(); } - private void hauptmenü() { + private void hauptmenü() { System.out.println("Willkommen bei der " + bs.getBankname() + "!"); mainloop: 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("7 -> Anzahl Kontobewegungen ausgeben"); +// System.out.println("8 -> normale Überweisung"); +// System.out.println("9 -> Dispo Überweisung"); - System.out.println("9 -> Beenden"); + System.out.println("10 -> Beenden"); System.out.println(); System.out.print("> "); @@ -44,8 +46,11 @@ public class UI { case 3: geldEinzahlen(); break; case 4: geldAuszahlen(); break; case 5: kontoauszugDrucken(); break; - case 6: überweisungBeauftragen(); break; - case 9: break mainloop; + case 6: überweisungBeauftragen(); break; + case 7: getSaldo(); break; + case 8: + case 9: + case 10: break mainloop; } } catch (Exception e) { @@ -56,12 +61,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 +79,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,12 +88,12 @@ 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); @@ -98,10 +103,10 @@ public class UI { 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); @@ -111,13 +116,12 @@ public class UI { } 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,22 +132,32 @@ 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: "); String verwendungszweck = sc.nextLine(); - boolean erfolgreich = bs.überweisungBeauftragen(startkonto, zielkonto, (long)(betrag * 100), verwendungszweck); + 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."); + } + + private void getSaldo() { + System.out.print("Bitte die gewünschte Kontonummer für den Auszug eingeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + System.out.print("Bitte die gewünschte Anzahl von Kontobewegungen: "); + int anzahl = Integer.parseInt(sc.nextLine()); + + System.out.println(bs.getSaldo(kontonummer, anzahl)/100); } -} +} \ No newline at end of file