main
Drees 2022-10-25 14:43:24 +02:00
parent e33cc74f3e
commit 184e8922c0
13 changed files with 272 additions and 48 deletions

View File

@ -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

View File

@ -6,7 +6,7 @@ import de.hs_mannheim.informatik.bank.ui.UI;
public class Main { public class Main {
public static void main(String[] args) throws Exception { 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); UI ui = new UI(bs);
} }

View File

@ -7,20 +7,20 @@ import java.util.HashMap;
public class Bank implements Serializable { public class Bank implements Serializable {
private String name; private String name;
private HashMap<Integer, Konto> konten = new HashMap<>(); private HashMap<Integer, Konto> konten = new HashMap<>();
private int kontozähler; private int kontozähler;
public Bank(String name) { public Bank(String name) {
this.name = name; this.name = name;
this.kontozähler = -1; this.kontozähler = -1;
} }
public int addKonto(String name, int auswahl) { public int addKonto(String name, int auswahl) {
Konto k; Konto k;
if (auswahl == 1) if (auswahl == 1)
k = new Konto(name, ++kontozähler); k = new Konto(name, ++kontozähler);
else else
k = new Girokonto(name, ++kontozähler); k = new Girokonto(name, ++kontozähler);
konten.put(k.getKontonummer(), k); konten.put(k.getKontonummer(), k);

View File

@ -4,14 +4,16 @@ import java.io.Serializable;
public class Girokonto extends Konto implements Serializable { public class Girokonto extends Konto implements Serializable {
public Girokonto(String inhaber, int kontozähler) { private long dispositionsKredit=-1000;
super(inhaber, kontozähler);
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) {
if (super.getKontostand() - betrag >= 0) { if (super.getKontostand() - betrag >= dispositionsKredit) {
this.auszahlen(betrag, zweck, "Ãœberweisungsausgang", super.getInhaber()); this.auszahlenGiro(betrag, zweck, "Überweisungsausgang", super.getInhaber());
ziel.einzahlen(betrag, zweck, "Ãœberweisungseingang", super.getInhaber()); ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber());
return true; return true;
} }
@ -19,9 +21,13 @@ public class Girokonto extends Konto implements Serializable {
return false; return false;
} }
@Override @Override
public String toString() { public String toString() {
return "Giro-" + super.toString(); return "Giro-" + super.toString();
} }
} }

View File

@ -7,11 +7,14 @@ public class Konto implements Serializable {
private int nummer; private int nummer;
private long stand = 0; private long stand = 0;
private String inhaber; private String inhaber;
private long dispositionsKredit=-1000;
private ArrayList<Kontobewegung> kontobewegungen; private ArrayList<Kontobewegung> 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.inhaber = inhaber;
this.kontobewegungen = new ArrayList<>(); this.kontobewegungen = new ArrayList<>();
@ -34,6 +37,10 @@ public class Konto implements Serializable {
return stand; return stand;
} }
public void setKontostand(long stand) {
this.stand = stand;
}
public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { public void einzahlen(long betrag, String zweck, String art, String auftraggeber) {
stand += betrag; stand += betrag;
@ -41,6 +48,7 @@ public class Konto implements Serializable {
} }
public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) {
if (stand - betrag >= 0) { if (stand - betrag >= 0) {
stand -= betrag; stand -= betrag;
@ -52,6 +60,20 @@ public class Konto implements Serializable {
return false; 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() { public String[] getKontobewegungen() {
String[] auflistung = new String[kontobewegungen.size()]; String[] auflistung = new String[kontobewegungen.size()];
@ -63,4 +85,17 @@ public class Konto implements Serializable {
return auflistung; 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;
}
} }

View File

@ -8,15 +8,15 @@ class KontoTest {
@Test @Test
void testKontoBasics() { void testKontoBasics() {
Konto k = new Konto("Müller", 0); Konto k = new Konto("Müller", 0);
assertEquals("Müller", k.getInhaber()); assertEquals("Müller", k.getInhaber());
assertEquals(1000, k.getKontonummer()); assertEquals(1000, k.getKontonummer());
assertEquals(0, k.getKontostand()); assertEquals(0, k.getKontostand());
} }
@Test @Test
void testKontoEinUndAuszahlung() { void testKontoEinUndAuszahlung() {
Konto k = new Konto("Müller", 0); Konto k = new Konto("Müller", 0);
Konto k2 = new Konto("Mayer", 1); Konto k2 = new Konto("Mayer", 1);
assertEquals("Mayer", k2.getInhaber()); assertEquals("Mayer", k2.getInhaber());
@ -32,4 +32,16 @@ class KontoTest {
assertEquals(50, k2.getKontostand()); 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());
}
} }

View File

@ -9,6 +9,7 @@ import de.hs_mannheim.informatik.bank.infrastructure.Persistenz;
public class Banksystem { public class Banksystem {
private Bank bank; private Bank bank;
static int counter = 0;
public Banksystem(String bankname) throws Exception { public Banksystem(String bankname) throws Exception {
if (Persistenz.sindDatenGespeichert(bankname)) if (Persistenz.sindDatenGespeichert(bankname))
@ -53,11 +54,15 @@ public class Banksystem {
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);
Persistenz.speichereBankDaten(this.bank, bank.getName()); if(konto instanceof Girokonto) {
return konto.auszahlenGiro(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber());
return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber()); }
else
return konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber());
} }
public String[] erstelleKontoauszug(int kontonummer) { public String[] erstelleKontoauszug(int kontonummer) {
Konto konto = bank.findeKonto(kontonummer); Konto konto = bank.findeKonto(kontonummer);
@ -69,16 +74,24 @@ public class Banksystem {
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); return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck);
} }
return false; return false;
} }
public long getKontostand(int kontonummer) { public long getKontostand(int kontonummer) {
Konto konto = bank.findeKonto(kontonummer); Konto konto = bank.findeKonto(kontonummer);
return konto.getKontostand(); return konto.getKontostand();
} }
public long berechneSaldo(int Kontonummer, long betrag) {
Konto konto = bank.findeKonto(Kontonummer);
long neuerSaldo = konto.berechneSaldo(betrag);
return neuerSaldo;
}
} }

View File

@ -1,12 +1,23 @@
package de.hs_mannheim.informatik.bank.facade; 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.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.io.File;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import de.hs_mannheim.informatik.bank.domain.Bank;
import de.hs_mannheim.informatik.bank.infrastructure.Persistenz;
class SystemTest { class SystemTest {
String Testdatei="TestName";
@Test @Test
void smokeTest() throws Exception { void smokeTest() throws Exception {
Banksystem bs = new Banksystem("Testsystem"); Banksystem bs = new Banksystem("Testsystem");
@ -16,4 +27,111 @@ class SystemTest {
assertEquals("Testsystem", bs.getBankname()); 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();
}
}
} }

View File

@ -27,4 +27,8 @@ public class Persistenz {
return bank; 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();
}
} }

View File

@ -7,6 +7,7 @@ import de.hs_mannheim.informatik.bank.facade.Banksystem;
public class UI { public class UI {
private Banksystem bs; private Banksystem bs;
Scanner sc = new Scanner(System.in); Scanner sc = new Scanner(System.in);
static int counter =0;
public UI(Banksystem bs) { public UI(Banksystem bs) {
this.bs = bs; this.bs = bs;
@ -20,14 +21,13 @@ public class UI {
while (true) { while (true) {
System.out.println(); System.out.println();
System.out.println("--------"); System.out.println("--------");
System.out.println("Hauptmenü"); System.out.println("Hauptmenü");
System.out.println("1 -> Konten anzeigen"); System.out.println("1 -> Konten anzeigen");
System.out.println("2 -> Konto anlegen"); System.out.println("2 -> Konto anlegen");
System.out.println("3 -> Geld einzahlen"); System.out.println("3 -> Geld einzahlen");
System.out.println("4 -> Geld auszahlen"); System.out.println("4 -> Geld auszahlen");
System.out.println("5 -> Kontoauszug drucken"); 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("9 -> Beenden");
System.out.println(); System.out.println();
@ -38,13 +38,11 @@ public class UI {
try { try {
switch(input) { switch(input) {
case 1: kontenAnzeigen(); break; case 1: kontenAnzeigen(); break;
case 2: case 2: kontoAnlegen(); break;
kontoAnlegen();
break;
case 3: geldEinzahlen(); break; case 3: geldEinzahlen(); break;
case 4: geldAuszahlen(); break; case 4: geldAuszahlen(); break;
case 5: kontoauszugDrucken(); break; case 5: kontoauszugDrucken(); break;
case 6: überweisungBeauftragen(); break; case 6: ÜberweisungBeauftragen(); break;
case 9: break mainloop; case 9: break mainloop;
} }
@ -56,12 +54,12 @@ public class UI {
System.out.println("Auf Wiedersehen!"); System.out.println("Auf Wiedersehen!");
} // hauptmenü } // hauptmenü
private void kontenAnzeigen() { private void kontenAnzeigen() {
String[] konten = bs.getKontenliste(); String[] konten = bs.getKontenliste();
if (konten.length > 0) { 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) { for (String s : konten) {
System.out.println(s); System.out.println(s);
} }
@ -74,7 +72,7 @@ public class UI {
System.out.println("Bitte den Namen des Kontoinhabers angeben: "); System.out.println("Bitte den Namen des Kontoinhabers angeben: ");
String name = sc.nextLine(); 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 auswahl = Integer.parseInt(sc.nextLine());
int kontonummer = bs.kontoAnlegen(name, auswahl); int kontonummer = bs.kontoAnlegen(name, auswahl);
@ -83,41 +81,60 @@ public class UI {
private void geldEinzahlen() throws Exception { private void geldEinzahlen() throws Exception {
System.out.println("Geld einzahlen"); 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()); 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()); double betrag = Double.parseDouble(sc.nextLine());
long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100); 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)); System.out.printf("Einzahlung erfolgreich, neuer Kontostand = %.2f Euro", (neuerKontostand / 100.0));
} }
private void geldAuszahlen() throws Exception { private void geldAuszahlen() throws Exception {
System.out.println("Geld auszahlen"); 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()); 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()); double betrag = Double.parseDouble(sc.nextLine());
boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long)betrag * 100); 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("Auszahlung" + ((!erfolgreich)? " nicht" : "" )+ " erfolgreich. ");
System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0)); System.out.printf("Neuer Kontostand = %.2f Euro.", (bs.getKontostand(kontonummer) / 100.0));
} }
private void kontoauszugDrucken() { 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()); int kontonummer = Integer.parseInt(sc.nextLine());
System.out.println(); System.out.println();
// in echt auf einem Drucker // 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); String[] kontobewegungen = bs.erstelleKontoauszug(kontonummer);
if (kontobewegungen.length > 0) if (kontobewegungen.length > 0)
@ -128,14 +145,14 @@ public class UI {
System.out.println("Noch keine Kontobewegungen."); System.out.println("Noch keine Kontobewegungen.");
} }
private void überweisungBeauftragen() { private void ÜberweisungBeauftragen() {
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());
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()); 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()); double betrag = Double.parseDouble(sc.nextLine());
System.out.print("Bitte den Verwendungszweck eingeben: "); System.out.print("Bitte den Verwendungszweck eingeben: ");
@ -143,7 +160,7 @@ public class UI {
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.");
} }
} }

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="Bank-Beispiel/src"/> <classpathentry kind="src" path="Bank-Beispiel/src"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/> <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>