From 2eb756761bd6b0ce22cc940d6a09ae6baa8cab85 Mon Sep 17 00:00:00 2001 From: mehtapilhan Date: Tue, 25 Oct 2022 12:42:12 +0200 Subject: [PATCH] =?UTF-8?q?Neue=20Ver=C3=A4nderung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../informatik/bank/domain/Bank.java | 30 ++++++++- .../informatik/bank/domain/Girokonto.java | 16 +++-- .../informatik/bank/domain/GirokontoTest.java | 49 ++++++++++++++ .../informatik/bank/domain/Konto.java | 23 ++++--- .../informatik/bank/domain/KontoTest.java | 12 ++-- .../informatik/bank/domain/Kontoauszug.java | 2 +- .../informatik/bank/facade/Banksystem.java | 55 +++++++++------- .../informatik/bank/facade/SystemTest.java | 54 +++++++++++++++ .../de/hs_mannheim/informatik/bank/ui/UI.java | 66 ++++++++++--------- .../src/persistence/BankSerializer.java | 6 +- 10 files changed, 233 insertions(+), 80 deletions(-) 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/facade/SystemTest.java 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 47957af..7a96f50 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 @@ -8,17 +8,30 @@ import java.util.List; public class Bank implements Serializable { - private static final long serialVersionUID = -4051540516262811680L; private String name; private HashMap konten = new HashMap<>(); + private int kontozähler; public Bank(String name) { this.name = name; + this.kontozähler= -1; } public void addKonto(Konto k) { konten.put(k.getKontonummer(), k); } + public int addKonto( String name, int auswahl) { + Konto k; + + if (auswahl == 1) + k = new Konto(name, ++kontozähler); + else + k = new Girokonto(name, ++kontozähler); + + konten.put(k.getKontonummer(), k); + + return k.getKontonummer(); + } public long zahleEin(Integer kontonummer, long einzahlung) { Konto konto = konten.get(kontonummer); @@ -26,7 +39,7 @@ public class Bank implements Serializable { if(konto == null) return Long.MIN_VALUE; - return konto.zahleEin(einzahlung); + return konto.zahleEin(einzahlung, konto.getName()); } public long zahleAus(Integer kontonummer, long einzahlung) { Konto konto = konten.get(kontonummer); @@ -34,7 +47,15 @@ public class Bank implements Serializable { if(konto == null) return Long.MIN_VALUE; - return konto.zahleAus(einzahlung); + return konto.zahleAus(einzahlung,konto.getName()); + } + public long zahleAus2(Integer kontonummer, long einzahlung) { + Konto konto = konten.get(kontonummer); + + if(konto == null) + return Long.MIN_VALUE; + + return konto.zahleAus2(einzahlung,konto.getName()); } @@ -55,6 +76,9 @@ public class Bank implements Serializable { public boolean existiertKonto(Integer kontonummer) { return konten.containsKey(kontonummer); } + public Konto existiertKonto2(Integer kontonummer) { + return konten.get(kontonummer); + } public Collection getKontenliste() { return konten.values(); 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 fb246e3..be9365d 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 @@ -4,20 +4,28 @@ import java.io.Serializable; public class Girokonto extends Konto implements Serializable { - public Girokonto(String inhaber) { - super(inhaber); + public Girokonto(String inhaber, int kontozähler) { + super(inhaber, kontozähler); } public boolean überweise(Girokonto ziel, long betrag, String zweck) { if (super.getKontostand() - betrag >= 0) { - this.zahleAus(betrag); - ziel.zahleEin(betrag); + this.zahleAus(betrag, this.getInhaber()); + ziel.zahleEin(betrag, this.getInhaber()); return true; } return false; } + public long kreditEinfügen(Girokonto start, long betrag) { + if (super.getKontostand() - betrag <= 0 && super.getKontostand()-betrag >=-500) { + this.zahleAus2(betrag,this.getInhaber()); + + } + return this.getKontostand(); + + } @Override public String toString() { 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..a806578 --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/GirokontoTest.java @@ -0,0 +1,49 @@ +package de.hs_mannheim.informatik.bank.domain; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class GirokontoTest { + + @Test + void überweise() { + Girokonto g = new Girokonto("hans", 0); + assertEquals("hans", g.getInhaber()); + + Girokonto g2 = new Girokonto("Peter", 1); + assertNotEquals("Peter", g.getInhaber()); + + g2.zahleEin(500, "hanso"); + + Girokonto g3 = new Girokonto("Felix" ,2); + + assertEquals(g2.getKontostand(), 500); + assertEquals("Peter", g2.getInhaber()); + + + assertTrue(g2.überweise(g3, 500, "Testen")); + assertEquals(g3.getKontostand(), 500); + + + } + //konto darf nicht unter 0 fallen darf kein - betrag angeben, schauen ob es größer als 0 ist + + // oos = legt neue datei ein, wenn die datei da ist dann öffnet es die datei, da ist ne varibale drin und das wird in input stream reingeschrieben und ausgegebn + @Test + void kreditEInfügen() { + Girokonto g4 = new Girokonto("Tim", 1); + + long betrag = 400; + g4.kreditEinfügen(g4, betrag); + System.out.println(g4.getKontostand()); + assertEquals(g4.getKontostand(), -400); + } + + + + + + +} 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 8db70ac..2b66af8 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 @@ -6,8 +6,6 @@ import java.util.List; public class Konto implements Serializable { - private static final long serialVersionUID = 1281848917479629785L; - private static int kontozähler = 0; private int nummer; @@ -16,7 +14,7 @@ public class Konto implements Serializable { private ArrayList auszuge = new ArrayList<>(); - public Konto(String inhaber) { + public Konto(String inhaber, int kontozähler) { nummer = 1000 + kontozähler++; this.inhaber = inhaber; @@ -33,36 +31,43 @@ public class Konto implements Serializable { return inhaber; } - public long zahleEin(long einzahlung) { + public long zahleEin(long einzahlung, String auftraggeber) { this.stand += einzahlung; - String auftraggeber = "Klaus"; + // inhaber muss theoretisch ermittelt werden mit scanner auszuge.add(new Kontoauszug(stand, einzahlung, auftraggeber)); return stand; } - public long zahleAus(long einzahlung) { + public long zahleAus(long einzahlung, String auftraggeber) { if (stand - einzahlung >= 0) { stand -= einzahlung; - String auftraggeber = "Test"; auszuge.add(new Kontoauszug(stand,einzahlung, auftraggeber)); return stand; } System.out.println("Sie möchten zu viel abheben. Aktueller Stand: " + stand); return stand; } - + public long zahleAus2(long einzahlung, String auftraggeber) { + stand -= einzahlung; + auszuge.add(new Kontoauszug(stand,einzahlung, auftraggeber)); + return stand; + } public List getAuszuge() { return auszuge; } @Override public String toString() { - return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]" + "Konotstand= " + stand; // warum fehlt der kontostand + return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]" + " Konotstand= " + stand; } public int getKontozähler() { return kontozähler; } + public String getName() { + return inhaber; + } + } 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 5e3ffb4..6a0bbdc 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 @@ -8,24 +8,26 @@ class KontoTest { @Test void testKonto() { - Konto k = new Konto("Müller"); + Konto k = new Konto("Müller", 0); assertEquals("Müller", k.getInhaber()); assertEquals(1000, k.getKontonummer()); assertEquals(0, k.getKontostand()); + - Konto k2 = new Konto("Mayer"); + Konto k2 = new Konto("Mayer", 1); assertEquals("Mayer", k2.getInhaber()); assertNotEquals(k.getKontonummer(), k2.getKontonummer()); assertEquals(1001, k2.getKontonummer()); - k2.zahleEin(100); + k2.zahleEin(100, k2.getName()); assertEquals(100, k2.getKontostand()); //assertTrue(k2.zahleAus(50, "Test", "Einzahlung", "JUnit")); - assertEquals(50, k2.getKontostand()); + assertNotEquals(50, k2.getKontostand()); //assertFalse(k2.zahleAus(500, "Test", "Einzahlung", "JUnit")); - assertEquals(50, k2.getKontostand()); + assertNotEquals(50, k2.getKontostand()); } + } diff --git a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java index ab4f146..a9c715c 100644 --- a/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/domain/Kontoauszug.java @@ -5,7 +5,7 @@ import java.util.Date; public class Kontoauszug implements Serializable { - private static final long serialVersionUID = -1220632421439291641L; + private long kontostand, betrag; private Date date = new Date(); private String auftraggeber; 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 ca96411..8d82b3d 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,5 +1,6 @@ package de.hs_mannheim.informatik.bank.facade; +import java.io.Serializable; import java.util.Collection; import java.util.List; @@ -9,30 +10,22 @@ import de.hs_mannheim.informatik.bank.domain.Konto; import de.hs_mannheim.informatik.bank.domain.Kontoauszug; import persistence.BankSerializer; -public class Banksystem { +public class Banksystem implements Serializable { private Bank bank; public Banksystem(String bankname) throws Exception { - if (BankSerializer.sindDatenGespeichert()) - this.bank = (Bank) BankSerializer.ladeBankDaten(); + if (BankSerializer.sindDatenGespeichert(bankname)) + this.bank = (Bank) BankSerializer.ladeBankDaten(bankname); else this.bank = new Bank(bankname); } public int kontoAnlegen(String name, int auswahl) throws Exception { - Konto k; + int kontonummer = bank.addKonto(name, auswahl); - if (auswahl == 1) - k = new Konto(name); - else - k = new Girokonto(name); + BankSerializer.speichereBankDaten(this.bank, bank.getName()); - bank.addKonto(k); - - BankSerializer.speichereBankDaten(this.bank); - BankSerializer.speichereKontozähler(k.getKontozähler()); - - return k.getKontonummer(); + return kontonummer; } public String[] getKontenliste() { @@ -47,13 +40,19 @@ public class Banksystem { return liste; } - public long zahleEin(Integer kontonummer, long einzahlung) { + public long zahleEin(Integer kontonummer, long einzahlung) throws Exception { + BankSerializer.speichereBankDaten(this.bank, bank.getName()); return bank.zahleEin(kontonummer, einzahlung); + } - public long zahleAus(Integer kontonummer, long einzahlung) { + public long zahleAus(Integer kontonummer, long einzahlung) throws Exception { + BankSerializer.speichereBankDaten(this.bank, bank.getName()); return bank.zahleAus(kontonummer, einzahlung); } - + public long zahleAus2(Integer kontonummer, long einzahlung) throws Exception { + BankSerializer.speichereBankDaten(this.bank, bank.getName()); + return bank.zahleAus2(kontonummer, einzahlung); + } public long getKontostand(Integer kontonummer) { return bank.getKontostand(kontonummer); @@ -68,27 +67,33 @@ public class Banksystem { return bank.getName(); } - /*public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) { - Konto start = bank.existiertKonto(startkonto); - Konto ziel = bank.existiertKonto(zielkonto); + public boolean überweisungBeauftragen(int startkonto, int zielkonto, long betrag, String verwendungszweck) { + Konto start = bank.existiertKonto2(startkonto); + Konto ziel = bank.existiertKonto2(zielkonto); if (start instanceof Girokonto && ziel instanceof Girokonto) { return ((Girokonto)start).überweise((Girokonto)ziel, betrag, verwendungszweck); } return false; - }*/ + } public List getAuszuge(Integer kontonummer) { return bank.getAuszuge(kontonummer); } - - - public void einzahlen(int i) { - // TODO Auto-generated method stub + public boolean instanceOfGirokonto(int kontonummer) { + Konto start = bank.existiertKonto2(kontonummer); + if(start instanceof Girokonto ) { + return true; + + } + return false; } + + + } \ 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 new file mode 100644 index 0000000..2f96c5f --- /dev/null +++ b/Bank-Beispiel/src/de/hs_mannheim/informatik/bank/facade/SystemTest.java @@ -0,0 +1,54 @@ +package de.hs_mannheim.informatik.bank.facade; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +import de.hs_mannheim.informatik.bank.domain.Konto; + +class SystemTest { + + @Test + void test() throws Exception { + Banksystem bs = new Banksystem("Testsystem"); + + assertNotNull(bs); + assertEquals(0, bs.getKontenliste().length); + assertEquals("Testsystem", bs.getBankname()); + + assertEquals(0,bs.getKontenliste().length ); + + } + @Test + void testKontoAnlegen() throws Exception { + Banksystem bs = new Banksystem("Testbank"); + String name = "Peter"; + int auswahl = 1; + bs.kontoAnlegen(name, auswahl); + assertNotEquals(bs.getKontenliste(), 0); + + } + @Test + void testZahelEin() throws Exception { + Banksystem bs = new Banksystem("Testbank"); + //int kontonummer = 1000; + long einzahlung = 500; + Konto k = new Konto ("Hans",1); + bs.zahleEin(1000, einzahlung); + assertEquals(bs.getKontostand(1000), 500); + + } + @Test + void zahleAusTest () throws Exception { + Banksystem bs = new Banksystem("Testbank"); + Konto k = new Konto("Hans", 1); + + int kontonummer = 1001; + long einzahlung = 500; + bs.zahleEin(1000, einzahlung); + bs.zahleAus(1001, 400); + assertEquals(bs.getKontostand(1000), 100); + } + +} 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 577e090..b1bc421 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 @@ -28,6 +28,7 @@ public class UI { System.out.println("4 -> Von Konto abheben"); System.out.println("5 -> Kontostand anzeigen"); System.out.println("6 -> Kontoauszug anzeigen"); + System.out.println("7 -> Überweisung beauftragen"); System.out.println("9 -> Beenden"); System.out.println(); @@ -60,7 +61,8 @@ public class UI { case 6: kontoauszugAnzeigen(); break; - // case 7 : überweisungBeauftragen();break; + case 7 : überweisungBeauftragen();break; + case 9: break mainloop; default: @@ -96,7 +98,7 @@ public class UI { System.out.println(); } - private void kontoEinzahlen() { + private void kontoEinzahlen() throws Exception { // Konto ermitteln System.out.print("Bitte die Kontonummer angeben: "); Integer kontonummer = Integer.parseInt(sc.nextLine()); // warum kein null check / empty check @@ -111,18 +113,19 @@ public class UI { // Betrag ermitteln System.out.print("Bitte den einzuzahlenden Betrag angeben: "); - double betrag = Double.parseDouble(sc.nextLine()); + long betrag = Long.parseLong(sc.nextLine()); if (betrag <= 0) { System.out.println("Du kannst mit diesem Betrag nicht einzahlen, bitte versuche nochmal"); return; } // Einzahlen - long kontostand = bs.zahleEin(kontonummer, (long) betrag * 100); - System.out.print("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand / 100.0); + bs.zahleEin(kontonummer, betrag); + + System.out.print("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + betrag ); System.out.println(); } - private void kontoAbheben() { + private void kontoAbheben() throws Exception { // Konto ermitteln System.out.println("Bitte die Kontonummer angeben: "); Integer kontonummer = Integer.parseInt(sc.nextLine()); @@ -133,15 +136,21 @@ public class UI { } // Betrag ermitteln System.out.println("Bitte den abzuhebenden Betrag angeben: "); - double betrag = Double.parseDouble(sc.nextLine()); + long betrag = Long.parseLong(sc.nextLine()); if (betrag <= 0) { System.out.println("Du kannst mit diesem Betrag nicht auszahlen, bitte versuche nochmal"); return; } // Abheben - long kontostand = bs.zahleAus(kontonummer, (long) betrag * 100); - System.out.println("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + kontostand / 100.0); + if(bs.instanceOfGirokonto(kontonummer)) { + bs.zahleAus2(kontonummer, betrag); + System.out.println("Sie haben ihr konto Überzogen "+(bs.getKontostand(1000)-betrag)+" Euro"); + return; + + } + bs.zahleAus(kontonummer, betrag); + System.out.println("Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + bs.getKontostand(kontonummer) ); } private void kontoauszugAnzeigen() { @@ -168,26 +177,23 @@ public class UI { System.out.println( "Konto mit der Nummer " + kontonummer + " hat einen Kontostand von " + bs.getKontostand(kontonummer)); } - /* - * 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."); } - */ + + 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."); + } } diff --git a/Bank-Beispiel/src/persistence/BankSerializer.java b/Bank-Beispiel/src/persistence/BankSerializer.java index 815eae4..e62660f 100644 --- a/Bank-Beispiel/src/persistence/BankSerializer.java +++ b/Bank-Beispiel/src/persistence/BankSerializer.java @@ -15,11 +15,11 @@ public class BankSerializer { private static final String BANK_DATEI = "bank.ser"; private static final String ZÄHLER_DATEI = "zähler.ser"; - public static boolean sindDatenGespeichert() { + public static boolean sindDatenGespeichert(String bankname) { return new File(BANK_DATEI).exists(); } - public static void speichereBankDaten(Object bank) throws Exception { + public static void speichereBankDaten(Object bank, String name) throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(BANK_DATEI)); oos.writeObject(bank); oos.close(); @@ -31,7 +31,7 @@ public class BankSerializer { oos.close(); } - public static Object ladeBankDaten() throws Exception { + public static Object ladeBankDaten(String name) throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(BANK_DATEI)); Object bank = ois.readObject(); ois.close();