Compare commits

..

1 Commits

Author SHA1 Message Date
Oliver Hummel 506e832323 Änderungsvorschläge für den Umgang mit Exceptions aus der Übung.
Ohne Gewähr, bitte selbst darüber nachdenken, was sinnvoll ist und
welche Konsequenzen das hat?
2022-11-08 20:09:05 +01:00
4 changed files with 65 additions and 29 deletions

View File

@ -73,4 +73,10 @@ public class Konto implements Serializable {
return saldo;
}
public void rollback() {
Kontobewegung kbw = kontobewegungen.get(kontobewegungen.size()-1);
stand += kbw.getBetrag() *-1;
kontobewegungen.remove(kontobewegungen.size()-1);
}
}

View File

@ -1,5 +1,6 @@
package de.hs_mannheim.informatik.bank.facade;
import java.io.IOException;
import java.util.Collection;
import de.hs_mannheim.informatik.bank.domain.Bank;
@ -10,14 +11,21 @@ import de.hs_mannheim.informatik.bank.infrastructure.Persistenz;
public class Banksystem {
private Bank bank;
public Banksystem(String bankname) throws Exception {
public Banksystem(String bankname) {
if (Persistenz.sindDatenGespeichert(bankname))
try {
this.bank = (Bank) Persistenz.ladeBankDaten(bankname);
else
return;
} catch (ClassNotFoundException | IOException e) {
// Hier loggen wir die Exception und starten einfach mit einem leeren System.
System.err.println("Persistierte Daten konnten nicht geladen werden.");
}
this.bank = new Bank(bankname);
}
public int kontoAnlegen(String name, int auswahl) throws Exception {
public int kontoAnlegen(String name, int auswahl) throws IOException {
int kontonummer = bank.addKonto(name, auswahl);
Persistenz.speichereBankDaten(this.bank, bank.getName());
@ -41,16 +49,21 @@ public class Banksystem {
return bank.getName();
}
public long geldEinzahlen(int kontonummer, long betrag) throws Exception {
public long geldEinzahlen(int kontonummer, long betrag) throws IOException {
Konto konto = bank.findeKonto(kontonummer);
konto.einzahlen(betrag, "Einzahlung am Schalter", "Einzahlung", konto.getInhaber());
try {
Persistenz.speichereBankDaten(this.bank, bank.getName());
} catch (IOException ioe) {
konto.rollback();
throw ioe;
}
return konto.getKontostand();
}
public boolean geldAuszahlen(int kontonummer, long betrag) throws Exception {
public boolean geldAuszahlen(int kontonummer, long betrag) throws IOException {
Konto konto = bank.findeKonto(kontonummer);
boolean erg = konto.auszahlen(betrag, "Auszahlung am Schalter", "Auszahlung", konto.getInhaber());

View File

@ -3,6 +3,7 @@ package de.hs_mannheim.informatik.bank.infrastructure;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
@ -13,13 +14,13 @@ public class Persistenz {
return new File(name + BANK_DATEI).exists();
}
public static void speichereBankDaten(Object bank, String name) throws Exception {
public static void speichereBankDaten(Object bank, String name) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(name + BANK_DATEI));
oos.writeObject(bank);
oos.close();
}
public static Object ladeBankDaten(String name) throws Exception {
public static Object ladeBankDaten(String name) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(name + BANK_DATEI));
Object bank = ois.readObject();
ois.close();

View File

@ -1,5 +1,6 @@
package de.hs_mannheim.informatik.bank.ui;
import java.io.IOException;
import java.util.Scanner;
import de.hs_mannheim.informatik.bank.facade.Banksystem;
@ -49,7 +50,6 @@ public class UI {
case 7: saldoAbfragen(); break;
case 9: break mainloop;
}
} catch (Exception e) {
System.err.println(e.getLocalizedMessage());
}
@ -72,7 +72,7 @@ public class UI {
}
}
private void kontoAnlegen() throws Exception {
private void kontoAnlegen() throws IOException {
System.out.println("Bitte den Namen des Kontoinhabers angeben: ");
String name = sc.nextLine();
@ -83,22 +83,38 @@ public class UI {
System.out.println("Konto mit der Nummer " + kontonummer + " neu angelegt.");
}
private void geldEinzahlen() throws Exception {
private void geldEinzahlen() throws IOException {
int kontonummer = 0;
double betrag = 0;
boolean ok = false;
do {
System.out.println("Geld einzahlen");
System.out.print("Bitte die gewünschte Kontonummer eingeben: ");
int kontonummer = Integer.parseInt(sc.nextLine());
try {
kontonummer = Integer.parseInt(sc.nextLine());
// optional prüfen, ob Konto existiert
} catch (NumberFormatException nfe) {
System.err.println("Kontonummer muss eine Zahl sein, bitte Eingabe wiederholen!");
continue;
}
System.out.print("Bitte den gewünschten Betrag eingeben: ");
double betrag = Double.parseDouble(sc.nextLine());
try {
betrag = Double.parseDouble(sc.nextLine());
} catch (NumberFormatException nfe) {
System.err.println("Betrag muss eine Kommazahl sein, bitte Eingabe wiederholen!");
}
} while(!ok);
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 {
private void geldAuszahlen() throws IOException {
System.out.println("Geld auszahlen");
System.out.print("Bitte die gewünschte Kontonummer eingeben: ");
int kontonummer = Integer.parseInt(sc.nextLine());