Compare commits

...

14 Commits
main ... Meins

Author SHA1 Message Date
Marc Ziegler adf7075e5a Verbesserungen 2022-10-25 16:43:01 +02:00
Marc Ziegler dbe480be32 testat ende 2022-10-25 14:55:24 +02:00
Marc Ziegler 897ce510a2 Testataufgaben gemacht 2022-10-25 14:48:42 +02:00
Marc Ziegler a3b4c3a2e9 Alle Ü's und Ö's und andere erneuert 2022-10-24 14:57:03 +02:00
Marc Ziegler 1f148d72ef test 2022-10-24 14:45:48 +02:00
Marc Ziegler ceeac73da9 schönheitsänderungen 2022-10-24 12:13:02 +02:00
Marc Ziegler e0d91f6ca3 nothing big 2022-10-24 10:30:35 +02:00
Marc Ziegler 7b7b3b8d42 test von der Bank vervollständigt
geheimnisprinzip auf Girokonto und die Attribute rausgenommen
2022-10-24 10:27:26 +02:00
Marc Ziegler 383d627558 hinzufügen der Girokontoklasse und der Überweißen Methode 2022-10-20 14:28:51 +02:00
Marc Ziegler 301e12ade5 Speicher Funktion hinzugefügt. Sämtliche Sachen mit der speicherung
befinden sich in der Datenbank Klasse. Gespeichert wird die bank Klasse
2022-10-11 14:43:49 +02:00
Marc Ziegler 287496085d Eingabe und Ausgabe des Kontostandes erfolgen nun mit Fließkommazahlen 2022-10-11 12:14:26 +02:00
Marc Ziegler dc87d101c2 kleine Änderungen 2022-10-11 12:01:01 +02:00
Marc Ziegler 607be738f4 Methoden zum Überweißen und auszahlen hinzugefügt,
neu Klasse Kontoauszug welcher die Auszüge speichert, neue Klasse
Aktivität welche die einzelnen Aktivitäten darstellt welche dann in den
Kontoausszug gespeichert wird
2022-10-11 12:00:28 +02:00
Marc Ziegler 03d0126de4 Hinzufügen der Möglichkeit zum Geld einzahlen und dem ablesen des
kontostands.

erstellen von Junit test für die neu erstellten Methoden in der Konto
und Banksystem klasse
2022-10-10 12:44:37 +02:00
12 changed files with 514 additions and 45 deletions

View File

@ -6,5 +6,6 @@
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@ -5,8 +5,8 @@ import de.hs_mannheim.informatik.bank.ui.UI;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) throws Exception {
Banksystem bs = new Banksystem("Spaßkasse Mannheim"); Banksystem bs = new Banksystem("Spaßkasse Mannheim");
UI ui = new UI(bs); UI ui = new UI(bs);
} }

View File

@ -1,18 +1,30 @@
package de.hs_mannheim.informatik.bank.domain; package de.hs_mannheim.informatik.bank.domain;
import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
public class Bank { 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;
public Bank(String name) { public Bank(String name) {
this.name = name; this.name = name;
this.kontozähler = -1;
} }
public void addKonto(Konto 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); konten.put(k.getKontonummer(), k);
return k.getKontonummer();
} }
public String getName() { public String getName() {
@ -23,4 +35,11 @@ public class Bank {
return konten.values(); return konten.values();
} }
public Konto findeKonto(int kontonummer) {
return konten.get(kontonummer);
}
public long getSaldo(int Kontonummer) {
return konten.get(Kontonummer).getSaldo();
}
} }

View File

@ -0,0 +1,48 @@
package de.hs_mannheim.informatik.bank.domain;
import java.io.Serializable;
public class Girokonto extends Konto implements Serializable {
private int Dispo=500;
public Girokonto(String inhaber, int kontozähler) {
super(inhaber, kontozähler);
}
public boolean Überweise(Girokonto ziel, long betrag, String zweck) {
if (this.getKontostand() - betrag >= -Dispo) {
this.auszahlen(betrag, zweck, "Überweisungsausgang", super.getInhaber());
ziel.einzahlen(betrag, zweck, "Überweisungseingang", super.getInhaber());
return true;
}
return false;
}
@Override
public String toString() {
return "Giro-" + super.toString();
}
public int getDispo() {
return Dispo;
}
public void setDispo(int dispo) {
Dispo = dispo;
}
@Override
public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) {
if (super.stand - betrag >= -Dispo) {
super.stand-=betrag;
super.addkontoBewegung(betrag*-1, zweck, art, auftraggeber);
return true;
}
return false;
}
}

View File

@ -1,15 +1,21 @@
package de.hs_mannheim.informatik.bank.domain; package de.hs_mannheim.informatik.bank.domain;
public class Konto { import java.io.Serializable;
private static int kontozähler = 0; import java.util.ArrayList;
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 long Saldo=0;
public Konto(String inhaber) { private ArrayList<Kontobewegung> kontobewegungen;
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<>();
} }
public int getKontonummer() { public int getKontonummer() {
@ -21,4 +27,70 @@ public class Konto {
return "Konto [nummer=" + nummer + ", inhaber=" + inhaber + "]"; 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;
addkontoBewegung(betrag, zweck, art, auftraggeber);
}
public boolean auszahlen(long betrag, String zweck, String art, String auftraggeber) {
if (stand - betrag >= 0) {
stand -= betrag;
addkontoBewegung(betrag * -1, zweck, art, auftraggeber);
return true;
}
return false;
}
public void setStand(long Betrag) {
this.stand=Betrag;
}
public String[] getKontobewegungen() {
String[] auflistung = new String[kontobewegungen.size()];
int i = 0;
for (Kontobewegung kb : kontobewegungen) {
auflistung[i++] = kb.toString();
}
return auflistung;
}
public void addkontoBewegung(long Betrag,String Zweck,String Art, String Auftraggeber) {
kontobewegungen.add(new Kontobewegung(Betrag , Zweck, Art, Auftraggeber));
}
public long getSaldo() {
if(kontobewegungen.size()>=10) {
this.Saldo=0;
for(int i=1;i<11;i++) {
Saldo+=kontobewegungen.get(kontobewegungen.size()-i).getBetrag();
//System.out.println(i);
}
return Saldo;
}
else {
this.Saldo=0;
for(int i=1;i<kontobewegungen.size();i++) {
if(kontobewegungen.size()-i>=0) {
Saldo+=kontobewegungen.get(kontobewegungen.size()-i).getBetrag();
//System.out.println(kontobewegungen.size());
}
else {
break;
}
}
return Saldo;
}
}
} }

View File

@ -0,0 +1,69 @@
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());
assertEquals(1000, k.getKontonummer());
assertEquals(0, k.getKontostand());
}
@Test
void testKontoEinUndAuszahlung() {
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());
assertFalse(k2.auszahlen(500, "Test", "Auszahlung", "JUnit"));
assertEquals(50, k2.getKontostand());
}
@Test
void testGiroDespo(){
Girokonto Gk1=new Girokonto("Marc",0);
Girokonto Gk2=new Girokonto("Marc",1);
Gk1.einzahlen(5000, "Test", "vorOrt", "ich");
Gk2.einzahlen(50000, "Test", "vorOrt", "ich");
assertEquals(true,Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich"));
assertEquals(true,Gk2.auszahlen(10000, "none of youre buisness", "vor Ort", "Ich"));
assertEquals(false,Gk1.Überweise(Gk2, 40500, "weil ich es kann"));
}
@Test
void testSaldo() {
Girokonto Gk1=new Girokonto("Marc",0);
Gk1.einzahlen(50000, "Test", "vorOrt", "ich");
Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich");
Gk1.einzahlen(50000, "Test", "vorOrt", "ich");
Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich");
Gk1.einzahlen(5000, "Test", "vorOrt", "ich");
Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich");
Gk1.einzahlen(5000, "Test", "vorOrt", "ich");
Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich");
Gk1.einzahlen(5000, "Test", "vorOrt", "ich");
Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich");
Gk1.einzahlen(5000, "Test", "vorOrt", "ich");
Gk1.auszahlen(5500, "none of youre buisness", "vor Ort", "Ich");
assertEquals(42500,Gk1.getSaldo());
assertEquals(87000,Gk1.getKontostand());
}
}

View File

@ -0,0 +1,30 @@
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;
}
}

View File

@ -3,20 +3,26 @@ package de.hs_mannheim.informatik.bank.facade;
import java.util.Collection; import java.util.Collection;
import de.hs_mannheim.informatik.bank.domain.Bank; 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.domain.Konto;
import de.hs_mannheim.informatik.bank.infrastructure.Persistenz;
public class Banksystem { public class Banksystem {
private Bank bank; private Bank bank;
public Banksystem(String bankname) { public Banksystem(String bankname) throws Exception {
if (Persistenz.sindDatenGespeichert(bankname))
this.bank = (Bank) Persistenz.ladeBankDaten(bankname);
else
this.bank = new Bank(bankname); this.bank = new Bank(bankname);
} }
public int kontoAnlegen(String name) { public int kontoAnlegen(String name, int auswahl) throws Exception {
Konto k = new Konto(name); int kontonummer = bank.addKonto(name, auswahl);
bank.addKonto(k);
return k.getKontonummer(); Persistenz.speichereBankDaten(this.bank, bank.getName());
return kontonummer;
} }
public String[] getKontenliste() { public String[] getKontenliste() {
@ -34,4 +40,49 @@ public class Banksystem {
public String getBankname() { public String getBankname() {
return bank.getName(); return bank.getName();
} }
//________________________________________________________________________________________________________------------
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 getSaldo(int kontonummer) {
return bank.getSaldo(kontonummer);
}
} }

View File

@ -0,0 +1,59 @@
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.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.junit.After;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
class SystemTest {
@Test
void smokeTest() throws Exception {
Banksystem bs = new Banksystem("Testbanksystem");
assertNotNull(bs);
assertEquals(0, bs.getKontenliste().length);
assertEquals("Testbanksystem", bs.getBankname());
}
@Test
void auszahlenTest() throws Exception {
Banksystem bs = new Banksystem("Testsystem");
int kn1=bs.kontoAnlegen("Marc", 1);
int kn2=bs.kontoAnlegen("Marc", 2);
int kn3=bs.kontoAnlegen("Marc", 1);
assertEquals(1000,bs.geldEinzahlen(kn1, 1000));
assertEquals(500,bs.geldEinzahlen(kn2, 500));
assertEquals(0,bs.geldEinzahlen(kn3, 0));
assertEquals(true,bs.geldAuszahlen(kn1, 666));
assertEquals(true,bs.geldAuszahlen(kn2, 999));
assertEquals(false,bs.geldAuszahlen(kn3, 1000));
assertEquals(89501,bs.geldEinzahlen(kn2, 90000));
int kn4=bs.kontoAnlegen("Marc", 2);
assertEquals(true,bs.ÜberweisungBeauftragen(kn2, kn4, 50000, "Spielschulden"));
assertEquals(false,bs.ÜberweisungBeauftragen(kn1, kn2, 1000, "Test"));
assertEquals(false,bs.ÜberweisungBeauftragen(kn2, kn3, 1000, "Test"));
assertEquals(true,bs.ÜberweisungBeauftragen(kn4, kn2, 50500, "test"));
//File fp=new File("C:\\Users\\Marc Ziegler\\git\\Bank-System_2121847\\Bank-Beispiel\\Testsystem-bank-data.ser");
//File fp=new File("Testsystem-bank-data.ser");
File fp=new File("C:/Users/Marc Ziegler/git/Bank-System_2121847/Bank-Beispiel/Testsystem-bank-data.ser");
fp.delete();
}
}

View File

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

View File

@ -10,19 +10,24 @@ public class UI {
public UI(Banksystem bs) { public UI(Banksystem bs) {
this.bs = bs; this.bs = bs;
hauptmenü(); hauptmenü();
} }
private void hauptmenü() { private void hauptmenü() {
System.out.println("Willkommen bei der " + bs.getBankname() + "!"); System.out.println("Willkommen bei der " + bs.getBankname() + "!");
mainloop: mainloop:
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("4 -> Geld auszahlen");
System.out.println("5 -> Kontoauszug drucken");
System.out.println("6 -> Überweisung beauftragen");
System.out.println("7 -> Saldo Anschauen");
System.out.println("9 -> Beenden"); System.out.println("9 -> Beenden");
System.out.println(); System.out.println();
@ -30,21 +35,32 @@ public class UI {
int input = Integer.parseInt(sc.nextLine()); int input = Integer.parseInt(sc.nextLine());
System.out.println(); System.out.println();
try {
switch(input) { switch(input) {
case 1: kontenAnzeigen(); break; case 1: kontenAnzeigen(); break;
case 2: kontoAnlegen(); break; case 2: kontoAnlegen();break;
case 3: geldEinzahlen(); break;
case 4: geldAuszahlen(); break;
case 5: kontoauszugDrucken(); break;
case 6: ÜberweisungBeauftragen(); break;
case 7: getSaldo();break;
case 9: break mainloop; case 9: break mainloop;
} }
} catch (Exception e) {
System.err.println(e.getLocalizedMessage());
}
System.out.println();
} }
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);
} }
@ -53,12 +69,86 @@ public class UI {
} }
} }
private void kontoAnlegen() { private void kontoAnlegen() throws Exception {
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();
int kontonummer = bs.kontoAnlegen(name); 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."); 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.");
}
public void getSaldo() {
System.out.println("Bitte geben Sie ihre kontonummer an");
int Kontonummer = sc.nextInt();
System.out.println("ihr Saldo bei ihren letzten 10 Tätigkeiten beträgt: "+bs.getSaldo(Kontonummer));
}
} }