From d89f4f8b4ae9ef2523b2a5fc902ad5dfeaf820f7 Mon Sep 17 00:00:00 2001 From: alexanderhariri <102290528+alexanderhariri@users.noreply.github.com> Date: Tue, 25 Oct 2022 14:19:46 +0200 Subject: [PATCH] Stand vom 25.10.2022 --- .../Sparkasse Mannheim-bank-data.ser | Bin 0 -> 919 bytes .../de/hs_mannheim/informatik/bank/Main.java | 6 +- .../informatik/bank/domain/Bank.java | 32 ++- .../informatik/bank/domain/BankTest.java | 17 -- .../informatik/bank/domain/GiroKontoTest.java | 30 +++ .../informatik/bank/domain/Girokonto.java | 43 ++++ .../informatik/bank/domain/Konto.java | 113 ++++----- .../informatik/bank/domain/KontoTest.java | 32 +-- .../informatik/bank/domain/Kontobewegung.java | 31 +++ .../informatik/bank/facade/Banksystem.java | 110 +++++---- .../bank/facade/BanksystemTest.java | 19 -- .../informatik/bank/facade/SystemTest.java | 60 +++++ .../bank/infrastructure/Persistenz.java | 30 +++ .../de/hs_mannheim/informatik/bank/ui/UI.java | 216 ++++++++++-------- 14 files changed, 482 insertions(+), 257 deletions(-) create mode 100644 Bank-Beispiel/Sparkasse Mannheim-bank-data.ser delete mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/BankTest.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GiroKontoTest.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java delete mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/BanksystemTest.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java create mode 100644 Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java diff --git a/Bank-Beispiel/Sparkasse Mannheim-bank-data.ser b/Bank-Beispiel/Sparkasse Mannheim-bank-data.ser new file mode 100644 index 0000000000000000000000000000000000000000..b835b8aba819338d9c58271ccca48da8426ddbec GIT binary patch literal 919 zcmb7D&ubGw6n@#wHf@^P*w}(#BwiIaq8FhDt!Pc!tspswpy*3?vOCT0Y@D5KwmAp^ ze}Pwv78E>)r-FZj3VQLPClL>#qP=+V)Po+JS=Xk=y0G)}z3;v6dvDf%fDv*yXcN;7 zulUHAOQ>&B)(W_fg0{^jvbJdlK2m0$lIz2-S~o`@*1l+<*P+l3mQ!qPx(nEuwjj&UCjut^UV6x!YC~|!oawj&@{@_|R(_`PGgCh!_u=`= zsjF{w&}Jd;1!&LWq6l~$Muf{r=mwr0cTSvC08r=-%dsf`%odo6W7cI}4&f7@A3xdb z-#)HErVhq3dJ%~^6qBHd-MPqb5`JrawLE(7(_IZfWu|XPutQiL5?yPWzN^& zI%pP*C&8PfOPq)~suq*mYB9q(u2?h_iQ@W((hOkucQWO(?*$ZRJQ7P_!Yei8lv7E) zG$_gzK-_;wU?14u+aUaC9ut zk&BdF0i%{WbjW~lPT7%GD>X4}6p=59Y@>Y|1xb5Mu@#U%Ls<`9PfDcR#so|aPAceE z8jCJ^f^bP>*MPmkahLj;`HNz&u6jeYTjs`i;pv+=R6wfp07ia&RGU%)t%g0x konten = new HashMap<>(); - + private int kontozaehler; + public Bank(String name) { this.name = name; + this.kontozaehler = -1; } + + public int addKonto(String name, int auswahl) { + Konto k; + long dispo = 1000; + if (auswahl == 1) + k = new Konto(name, ++kontozaehler); + else + + k = new Girokonto(name, ++kontozaehler, 1000); + + konten.put(k.getKontonummer(), k); + + return k.getKontonummer(); + } + public String getName() { return name; } - - public void addKonto(Konto k) { - konten.put(k.getKontonummer(), k); - } - - public Collection getKontenliste() { return konten.values(); } + public Konto findeKonto(int kontonummer) { + return konten.get(kontonummer); + } + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/BankTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/BankTest.java deleted file mode 100644 index 85a584b..0000000 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/BankTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.hs_mannheim.informatik.bank.domain; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -import de.hs_mannheim.informatik.bank.facade.Banksystem; - -class BankTest { - - @Test - void test() { - Bank bank = new Bank("Sparkasse Mannheim"); - assertEquals("Sparkasse Mannheim", bank.getName()); - } - -} diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GiroKontoTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GiroKontoTest.java new file mode 100644 index 0000000..6c9a763 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GiroKontoTest.java @@ -0,0 +1,30 @@ +package de.hs_mannheim.informatik.bank.domain; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.Test; + +public class GiroKontoTest { + + @Test + public void testeDispo() { + Girokonto giro = new Girokonto("Test", 0, 1000); + + assertEquals("Test", giro.getInhaber()); + + giro.einzahlen(100, "Test", "Einzahlung", "JUnit"); + assertEquals(100, giro.getKontostand()); + + assertTrue(giro.auszahlen(150, "Test", "Auszahlung", "JUnit")); + assertEquals(-50, giro.getKontostand()); + + assertTrue(giro.auszahlen(500, "Test", "Auszahlung", "JUnit")); + assertEquals(-550, giro.getKontostand()); + + assertFalse(giro.auszahlen(500, "Test", "Auszahlung", "JUnit")); + assertEquals(-550, giro.getKontostand()); + } + } + 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 new file mode 100644 index 0000000..92484f7 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Girokonto.java @@ -0,0 +1,43 @@ +package de.hs_mannheim.informatik.bank.domain; + +import java.io.Serializable; + +public class Girokonto extends Konto implements Serializable { + + + private long dispo = 1000; + public Girokonto(String inhaber, int kontozähler, long dispo) { + super(inhaber, kontozähler); + this.dispo = dispo; + } + + public boolean überweise(Girokonto ziel, long betrag, String zweck) { + if (super.getKontostand() - betrag >= -dispo) { + this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber()); + ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber()); + + return true; + } + return false; + } + + @Override + public boolean auszahlen(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; + } + + + @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 891dd58..f8d897b 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 @@ -1,69 +1,74 @@ -package de.hs_mannheim.informatik.bank.domain; + package de.hs_mannheim.informatik.bank.domain; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; +import java.io.Serializable; import java.util.ArrayList; -public class Konto { - private static int kontozähler; +public class Konto implements Serializable { private int nummer; + protected long stand = 0; private String inhaber; - private long stand = 0; - private long betrag; - int zahl; - int counter = 0; - public ArrayList beträge = new ArrayList(1000); - public ArrayList datumsEinträge = new ArrayList(1000); - - public Konto(String inhaber) { - nummer = 1000 + kontozähler++; + private long saldo; + protected ArrayList kontobewegungen; + + public Konto(String inhaber, int kontozähler) { + nummer = 1000 + kontozähler; this.inhaber = inhaber; + + this.kontobewegungen = new ArrayList<>(); } - public String getInhaber() { - return inhaber; - } - public int getKontonummer() { return nummer; } - public long zeigeStand() { - return this.stand; - } - - public void zahleEinBetrag(long betrag) { - this.stand = this.stand + betrag; - this.betrag = betrag; - DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); - datumsEinträge.add(dateFormat.format(LocalDateTime.now())); - - beträge.add(betrag); - } - - - public int hochzählen() { - return counter = counter + zahl++; - } - - public ArrayList getDatum() { - return datumsEinträge; - } - - public String zahleAus(long auszahlung) { - if (this.stand == 0) { - return "Sie haben aktuell kein Geld auf dem Konto"; - } - if (this.stand >= auszahlung) { - long neuerStand = this.stand = this.stand - auszahlung; - return "Sie haben " + auszahlung + " Euro abgehoben. Sie haben noch ein Guthaben von " + neuerStand + " Euro"; - } else { - return "Sie haben nur ein Guthaben von " + this.stand; - } - } - + @Override public String toString() { - return " Inhaber: " + inhaber + " Kontonummer: " + nummer + " Kontostand: " + stand + " Euro"; - + return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; } + + public String getInhaber() { + return inhaber; + } + + public long getKontostand() { + return stand; + } + + public void einzahlen(long betrag, String zweck, String art, String auftraggeber) { + stand += betrag; + + kontobewegungen.add(new Kontobewegung(betrag, zweck, art, auftraggeber)); + } + + public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) { + if (stand - betrag >= 0) { + stand -= betrag; + + kontobewegungen.add(new Kontobewegung(betrag * -1, zweck, art, auftraggeber)); + + return true; + } + + return false; + } + + + + public String[] getKontobewegungen() { + String[] auflistung = new String[kontobewegungen.size()]; + + int i = 0; + for (Kontobewegung kb : kontobewegungen) { + auflistung[i++] = kb.toString(); + } + + return auflistung; + } + +public long getSaldo() { + for (int i = 0; i < kontobewegungen.size() ; i++) { + saldo = saldo + kontobewegungen.get(i).getBetrag(); + } + return saldo; +} } 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 ad80098..04e96ae 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 @@ -7,27 +7,29 @@ import org.junit.jupiter.api.Test; class KontoTest { @Test - void testKonto() { - Konto k = new Konto("Müller"); - assertEquals("Müller", k.getInhaber()); + void testKontoBasics() { + Konto k = new Konto("Müller", 0); + assertEquals("Müller", k.getInhaber()); assertEquals(1000, k.getKontonummer()); - k.zahleEinBetrag(1500); - assertEquals(1500, k.zeigeStand()); - k.zahleAus(500); - assertEquals(1000, k.zeigeStand()); - assertEquals(" Inhaber: Müller Kontonummer: 1000 Kontostand: 1000 Euro", k.toString()); + assertEquals(0, k.getKontostand()); + } + @Test + void testKontoEinUndAuszahlung() { + Konto k = new Konto("Müller", 0); + Konto k2 = new Konto("Mayer", 1); - Konto k2 = new Konto("Mayer"); assertEquals("Mayer", k2.getInhaber()); - k2.zahleEinBetrag(2000); - assertEquals(1001, k2.getKontonummer()); - assertEquals(2000, k2.zeigeStand()); - k2.zahleAus(700); - assertEquals(1300, k2.zeigeStand()); - assertEquals(" Inhaber: Mayer Kontonummer: 1001 Kontostand: 1300 Euro", k2.toString()); + 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()); + + assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit")); + assertEquals(50, k2.getKontostand()); } } 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 new file mode 100644 index 0000000..b827155 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontobewegung.java @@ -0,0 +1,31 @@ +package de.hs_mannheim.informatik.bank.domain; + +import java.io.Serializable; +import java.util.Date; + +public class Kontobewegung implements Serializable { + private long betrag; + private Date datum; + private String betreff; + private String art; + private String auftraggeber; + + public Kontobewegung(long betrag, String betreff, String art, String auftraggeber) { + this.betrag = betrag; + this.betreff = betreff; + this.art = art; + this.auftraggeber = auftraggeber; + + this.datum = new Date(); + } + + @Override + public String toString() { + return "Kontobewegung [betrag=" + betrag + ", datum=" + datum + ", betreff=" + betreff + ", art=" + art + + ", auftraggeber=" + auftraggeber + "]"; + } + + public long getBetrag() { + return 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 4067661..81dca7e 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,71 +1,39 @@ 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; +import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; public class Banksystem { private Bank bank; - private Konto selKonto; - int newCounter; - public Banksystem(String bankname) { - this.bank = new Bank(bankname); + public Banksystem(String bankname) throws Exception { + if (Persistenz.sindDatenGespeichert(bankname)) + this.bank = (Bank) Persistenz.ladeBankDaten(bankname); + else + this.bank = new Bank(bankname); } - public String auszahlen(long auszahlung) { - if (selKonto != null) { - return selKonto.zahleAus(auszahlung); - } else - return "Fehlerhafter Zustand"; - } - - public void auszug() { - System.out.println("Kontoauszug: "); - System.out.println(); - System.out.println(selKonto.toString()); - System.out.println(); - for (int i = 0; i < selKonto.beträge.size(); i++) { - System.out.println(" " +selKonto.datumsEinträge.get(i) + " -------> Einzahlung: " + selKonto.beträge.get(i)); - System.out.println(); - } - } - - public int kontoAnlegen(String name) { - Konto k = new Konto(name); - bank.addKonto(k); - return k.getKontonummer(); - } - - public boolean kontoAuswählen(int kn) { - this.selKonto = null; - for (Konto k : bank.getKontenliste()) { - if (kn == k.getKontonummer()) { - this.selKonto = k; - } - } - return selKonto != null; - } - - public void zahleEin(long betrag) { - if (selKonto != null) { - selKonto.zahleEinBetrag(betrag); - selKonto.getDatum(); - newCounter = selKonto.hochzählen(); - System.out.println("Sie haben " + betrag + " Euro eingezahlt."); - } else { - System.out.println("Fehlerhafter Zustand"); - } + public int kontoAnlegen(String name, int auswahl) throws Exception { + int kontonummer = bank.addKonto(name, auswahl); + + Persistenz.speichereBankDaten(this.bank, bank.getName()); + return kontonummer; } public String[] getKontenliste() { Collection konten = bank.getKontenliste(); String[] liste = new String[konten.size()]; + int i = 0; for (Konto k : konten) { - liste[i++] = k.toString(); + liste[i++] = k.toString(); } + return liste; } @@ -73,7 +41,49 @@ public class Banksystem { return bank.getName(); } - public void stand() { - System.out.println("Der Kontostand beträgt: " + selKonto.zeigeStand() + " Euro"); + public long geldEinzahlen(int kontonummer, long betrag) throws Exception { + Konto konto = bank.findeKonto(kontonummer); + konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber()); + + Persistenz.speichereBankDaten(this.bank, bank.getName()); + + return konto.getKontostand(); } + + 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()); + } + + public String[] erstelleKontoauszug(int kontonummer) { + Konto konto = bank.findeKonto(kontonummer); + + return konto.getKontobewegungen(); + } + + 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 false; + } + + public long getKontostand(int kontonummer) { + Konto konto = bank.findeKonto(kontonummer); + + return konto.getKontostand(); + } + + public long saldostand(int kontonummer) { + Konto konto = bank.findeKonto(kontonummer); + return konto.getSaldo(); + } + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/BanksystemTest.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/BanksystemTest.java deleted file mode 100644 index b1ea941..0000000 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/BanksystemTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.hs_mannheim.informatik.bank.facade; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -import de.hs_mannheim.informatik.bank.domain.Bank; -import de.hs_mannheim.informatik.bank.domain.Konto; - -class BanksystemTest { - private Konto selKonto; - @Test - void test() { -Banksystem bs = new Banksystem("Sparkasse Mannheim"); - -assertEquals(selKonto.zahleAus(1000), bs.auszahlen(1000)); - } - -} 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 new file mode 100644 index 0000000..739feb9 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java @@ -0,0 +1,60 @@ +package de.hs_mannheim.informatik.bank.facade; + +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 java.util.Arrays; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import de.hs_mannheim.informatik.bank.domain.Bank; +import de.hs_mannheim.informatik.bank.infrastructure.Persistenz; + +class SystemTest { + + void clearAll() { + File file = new File("C:\\test\\Bank-System\\Bank-Beispiel\\Testsystem-bank-data.ser"); + file.delete(); + } + + @Test + void smokeTest() throws Exception { + clearAll(); + Banksystem bs = new Banksystem("Testsystem"); + + assertNotNull(bs); + assertEquals(0, bs.getKontenliste().length); + assertEquals("Testsystem", bs.getBankname()); + } + + @Test + void testeEinzahlen() throws Exception { + clearAll(); + Banksystem bs = new Banksystem("Testsystem"); + + int kontonummer = bs.kontoAnlegen("testKonto", 2); + + assertEquals(10, bs.geldEinzahlen(kontonummer, 10)); + + } + + @Test + void persistenz() throws Exception { + clearAll(); + Banksystem bs = new Banksystem("Testsystem"); + + int kontonummer = bs.kontoAnlegen("testKonto", 2); + + assertEquals(10, bs.geldEinzahlen(kontonummer, 10)); + assertTrue(Persistenz.sindDatenGespeichert("Testsystem")); + + + } + + + } + + 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 new file mode 100644 index 0000000..5d08e48 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/infrastructure/Persistenz.java @@ -0,0 +1,30 @@ +package de.hs_mannheim.informatik.bank.infrastructure; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +public class Persistenz { + private static final String BANK_DATEI = "-bank-data.ser"; + + public static boolean sindDatenGespeichert(String name) { + return new File(name + BANK_DATEI).exists(); + } + + public static void speichereBankDaten(Object bank, String name) throws Exception { + ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(name + BANK_DATEI)); + oos.writeObject(bank); + oos.close(); + } + + public static Object ladeBankDaten(String name) throws Exception { + ObjectInputStream ois = new ObjectInputStream(new FileInputStream(name + BANK_DATEI)); + Object bank = ois.readObject(); + ois.close(); + + return bank; + } + +} 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 6bdb96b..991f66d 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 @@ -6,7 +6,6 @@ import de.hs_mannheim.informatik.bank.facade.Banksystem; public class UI { private Banksystem bs; - private boolean kontoSelektiert; Scanner sc = new Scanner(System.in); public UI(Banksystem bs) { @@ -14,115 +13,148 @@ public class UI { hauptmenü(); } - public void reset() { - this.kontoSelektiert = false; - } + private void hauptmenü() { + System.out.println("Willkommen bei der " + bs.getBankname() + "!"); - public void hauptmenü() { - System.out.println("Willkommen bei der " + bs.getBankname()); - reset(); - mainloop: while (true) { - - if (!kontoSelektiert) { + mainloop: + while (true) { + System.out.println(); + System.out.println("--------"); System.out.println("Hauptmenü"); - System.out.println("1 -> Konto anzeigen"); + System.out.println("1 -> Konten anzeigen"); System.out.println("2 -> Konto anlegen"); - System.out.println("3 -> Konto auswählen"); - } else { - System.out.println("4 -> Geld einzahlen"); - System.out.println("5 -> Kontostand"); - System.out.println("6 -> Geld auszahlen"); - System.out.println("7 -> Kontoauszug"); - System.out.println("8 -> Hauptmenü"); + 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("7 -> Saldo anzeigen"); + System.out.println("9 -> Beenden"); + System.out.println(); + System.out.print("> "); + int input = Integer.parseInt(sc.nextLine()); + System.out.println(); + + try { + switch(input) { + case 1: kontenAnzeigen(); break; + case 2: + kontoAnlegen(); + break; + case 3: geldEinzahlen(); break; + case 4: geldAuszahlen(); break; + case 5: kontoauszugDrucken(); break; + case 6: überweisungBeauftragen(); break; + case 7: saldoAnzeigen(); break; + case 9: break mainloop; + } + + } catch (Exception e) { + System.err.println(e.getLocalizedMessage()); + } + System.out.println(); } - System.out.println("9 -> beenden"); + System.out.println("Auf Wiedersehen!"); - int input = Integer.parseInt(sc.nextLine()); - - switch (input) { - case 1: - kontenAnzeigen(); - break; - case 2: - kontoAnlegen(); - break; - case 3: - kontoAuswählen(); - break; - case 4: - einzahlen(); - break; - case 5: - kontoStand(); - break; - case 6: - zahleAus(); - break; - case 7: - kontoAuszug(); - break; - case 8: - hauptmenü(); - case 9: - break mainloop; - - } - } + } + private void saldoAnzeigen() { + System.out.println("Kontonummer angeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + long aktuellerSaldo = bs.saldostand(kontonummer); + System.out.println("Saldo: " + aktuellerSaldo/100); + } - private void kontoAuszug() { - bs.auszug(); - } - private void zahleAus() { - System.out.println("Welchen Betrag möchten Sie abheben?"); - long auszahlung = Long.parseLong(sc.nextLine()); - System.out.println(bs.auszahlen(auszahlung)); - } - - private void kontoStand() { - bs.stand(); - } - - private void einzahlen() { - System.out.println("Wieviel wollen Sie einzahlen?"); - long euro = Long.parseLong(sc.nextLine()); - bs.zahleEin(euro); - } - - private void kontoAuswählen() { - kontenAnzeigen(); - System.out.println(); - System.out.println("Wählen Sie die Kontonummer aus"); - int auswahl = Integer.parseInt(sc.nextLine()); - kontoSelektiert = bs.kontoAuswählen(auswahl); - } - - private void kontoAnlegen() { - System.out.println(("Wie lautet der Name des Kontoinhaber?:")); - String inhaber = sc.nextLine(); - - int neuesKonto = bs.kontoAnlegen(inhaber); - System.out.println("Konto mit der Kontonummer " + neuesKonto + " wurde angelegt."); - } - - private void kontenAnzeigen() { - + private void kontenAnzeigen() { String[] konten = bs.getKontenliste(); - if (konten.length > 0) { - - System.out.println("Folgende Konten sind angelegt: "); - System.out.println(); + System.out.println("Folgende Konten sind aktuell verfügbar:"); for (String s : konten) { System.out.println(s); } } else { - System.out.println("Aktuell sind keine Konten angelegt."); + System.out.println("Bisher keine Konten angelegt."); } } + + private void kontoAnlegen() throws Exception { + 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?"); + int auswahl = Integer.parseInt(sc.nextLine()); + + int kontonummer = bs.kontoAnlegen(name, auswahl); + System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt."); + } + + private void geldEinzahlen() throws Exception { + System.out.println("Geld einzahlen"); + System.out.print("Bitte die gewünschte Kontonummer eingeben: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + // optional prüfen, ob Konto existiert + + System.out.print("Bitte den gewünschten Betrag eingeben: "); + double betrag = Double.parseDouble(sc.nextLine()); + + long neuerKontostand = bs.geldEinzahlen(kontonummer, (long)betrag * 100); + + 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: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + System.out.print("Bitte den gewünschten Betrag eingeben: "); + double betrag = Double.parseDouble(sc.nextLine()); + + boolean erfolgreich = bs.geldAuszahlen(kontonummer, (long)betrag * 100); + + 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: "); + int kontonummer = Integer.parseInt(sc.nextLine()); + + System.out.println(); + + // in echt auf einem Drucker + System.out.println("Auszug für Konto " + kontonummer); + String[] kontobewegungen = bs.erstelleKontoauszug(kontonummer); + + if (kontobewegungen.length > 0) + for (String kb : kontobewegungen) { + System.out.println(kb); + } + else + System.out.println("Noch keine Kontobewegungen."); + } + + 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: "); + int zielkonto = Integer.parseInt(sc.nextLine()); + + 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); + + System.out.println("Ãœberweisung" + ( (!erfolgreich) ? " nicht" : "") + " erfolgreich ausgeführt."); + } + }