Hallo Forum,
Habe nun eure Verbesserungsvorschläge vom letzten Mal versucht umzusetzen. Ich würde mich nun über weitere Kritik/Verbesserungsvorschläge/etc. freuen.
Zum Programm:
Es soll eine Bank sein die über eine Gui den Benutzer ein Konto anlegen , sich darin einloggen, Geld darauf abheben/einzahlen und Geld überweisen lässt.
Hier die Klassen des Programms:
main-Klasse:
die Account-Klasse:
die AccountManager-Klasse:
die Gui-Klasse:
die InputChecker-Klasse:
die SaveLoad-Klasse:
Mfg
thelegend27
Habe nun eure Verbesserungsvorschläge vom letzten Mal versucht umzusetzen. Ich würde mich nun über weitere Kritik/Verbesserungsvorschläge/etc. freuen.
Zum Programm:
Es soll eine Bank sein die über eine Gui den Benutzer ein Konto anlegen , sich darin einloggen, Geld darauf abheben/einzahlen und Geld überweisen lässt.
Hier die Klassen des Programms:
main-Klasse:
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package finalgui2;
/**
*
* @author Ahmet
*/
public class FinalGUI2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Gui gui = new Gui();
gui.setVisible(true);
}
}
die Account-Klasse:
Java:
package finalgui2;
import java.io.Serializable;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Ahmet
*/
public class Account implements Serializable{
private final String iban;
private final String pin;
private final String user;
private double balance;
Account(String ibn, String pn, String usr) {
iban = ibn;
pin = pn;
user = usr;
balance = 0;
}
public String getIban() {
return iban;
}
public String getPin() {
return pin;
}
public String getUser() {
return user;
}
public double getBalance() {
return balance;
}
public void deposit(double value) {
balance += value;
}
public void withdraw(double value) {
balance -= value;
}
public void transfer(Account reciever, double value) {
this.withdraw(value);
reciever.deposit(value);
}
}
Java:
package finalgui2;
import java.io.Serializable;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Ahmet
*/
public class AccountManager {
public static AccountManager accMan = new AccountManager();
private int regIndex;
private int currAccount;
private final ArrayList<Account> accounts;
private boolean added;
AccountManager() {
if (SaveLoad.sl.checkFiles()) {
if (SaveLoad.sl.loadAccounts() == null) {
accounts = new ArrayList<>();
} else {
accounts = SaveLoad.sl.loadAccounts();
}
if (SaveLoad.sl.loadRegIndex() == -2) {
regIndex = -1;
} else {
regIndex = SaveLoad.sl.loadRegIndex();
}
regIndex = SaveLoad.sl.loadRegIndex();
} else {
accounts = new ArrayList<>();
regIndex = -1;
}
}
public boolean getAdded(){
return added;
}
public boolean addAccount(String usr) {
added = true;
boolean runned = false;
if (!InputChecker.inCheck.checkForNumb(usr)) {
String ibn, pin;
if ((accounts.isEmpty()) || (findAccount(usr) < 0)) {
ibn = String.valueOf((int) (Math.random() * (9999 - 1000) + 1000));
pin = String.valueOf((int) (Math.random() * (9999 - 1000) + 1000));
} else {
do {
ibn = String.valueOf((int) (Math.random() * (9999 - 1000) + 1000));
} while ((ibn.equals(accounts.get(findAccount(ibn)).getIban())));
pin = String.valueOf((int) (Math.random() * (9999 - 1000) + 1000));
}
Account acc = new Account(ibn, pin, usr);
accounts.add(acc);
regIndex++;
runned = true;
}
return runned;
}
public int findAccount(String iban) {
int foundIndex = -1;
for (Account acc : accounts) {
if (acc.getIban().equals(iban)) {
foundIndex = accounts.indexOf(acc);
}
}
if (!(foundIndex >= 0)) {
foundIndex = -1;
}
return foundIndex;
}
public String getIban(int indx) {
return accounts.get(indx).getIban();
}
public String getPin(int indx) {
return accounts.get(indx).getPin();
}
public int getRegIndex() {
return regIndex;
}
public int tryLogin(String iban, String pin) {
int indx = findAccount(iban);
int state = 0;
if (indx > -1) {
if (accounts.get(indx).getIban().equals(iban) && accounts.get(indx).getPin().equals(pin)) {
currAccount = indx;
state = 1;
} else if (!(accounts.get(indx).getPin().equals(pin))) {
state = 3;
}
} else if (indx <= -1) {
state = 2;
}
return state;
}
public String getBalance() {
return Double.toString(accounts.get(currAccount).getBalance());
}
public ArrayList getAccounts() {
return accounts;
}
public boolean deposit(String value) {
boolean sucess;
if (InputChecker.inCheck.checkDouble(value)) {
accounts.get(currAccount).deposit(Double.parseDouble(value));
sucess = true;
} else {
sucess = false;
}
return sucess;
}
public boolean withdraw(String value) {
boolean sucess;
if (InputChecker.inCheck.checkDouble(value)) {
accounts.get(currAccount).withdraw(Double.parseDouble(value));
sucess = true;
} else {
sucess = false;
}
return sucess;
}
public boolean tryTransfer(String reciever, String value) {
boolean transSucess = false;
int transIndx = findAccount(reciever);
if (InputChecker.inCheck.checkTransfer(reciever, value)) {
if (transIndx > -1) {
transSucess = true;
accounts.get(currAccount).transfer(accounts.get(transIndx), Double.parseDouble(value));
}
}
return transSucess;
}
}
Java:
package finalgui2;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
class Gui extends JFrame implements ActionListener {
JPanel homePan;
JButton close;
JLabel homeHeader;
JButton login;
JButton register;
JPanel registerPan;
JButton leaveReg;
JLabel registerHeader;
JTextField nameIn;
JButton tryRegister;
JPanel loginPan;
JButton leaveLog;
JLabel loginHeader;
JLabel ibanPrompt;
JTextField ibanIn;
JLabel pinPrompt;
JTextField pinIn;
JButton tryLogin;
JPanel loggedInPan;
JButton leaveLogged;
JLabel loggedHeader;
JButton openCheck;
JButton openWithdraw;
JButton openDeposit;
JButton openTransfer;
JPanel checkPan;
JButton leaveCheck;
JLabel checkHeader;
JTextField balanceOut;
JPanel withdrawPan;
JButton leaveWithdraw;
JLabel withdrawPrompt;
JTextField withdrawIn;
JButton tryWithdraw;
JPanel depositPan;
JButton leaveDeposit;
JLabel depositHeader;
JTextField depositIn;
JButton tryDeposit;
JPanel transferPan;
JButton leaveTransfer;
JLabel transferHeader;
JLabel transIbanPrompt;
JTextField transIbanIn;
JLabel transAmountPrompt;
JTextField transAmount;
JButton tryTransfer;
JPanel mainPan;
Gui() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Die Bank");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setSize(screenSize);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (AccountManager.accMan.getAdded()) {
SaveLoad.sl.save();
}
}
});
close = new JButton("Beenden");
close.addActionListener(this);
close.setActionCommand("close");
homeHeader = new JLabel("Wilkommen in der Bank");
login = new JButton("Einloggen");
login.addActionListener(this);
login.setActionCommand("login");
register = new JButton("Registrieren");
register.addActionListener(this);
register.setActionCommand("register");
homePan = new JPanel();
homePan.add(close);
homePan.add(homeHeader);
homePan.add(login);
homePan.add(register);
homePan.setVisible(true);
leaveReg = new JButton("<=");
leaveReg.addActionListener(this);
leaveReg.setActionCommand("leaveReg");
registerHeader = new JLabel("Geben sie Ihren Namen ein, um sich zu registrieren");
nameIn = new JTextField(15);
tryRegister = new JButton("registrieren");
tryRegister.addActionListener(this);
tryRegister.setActionCommand("tryRegister");
registerPan = new JPanel();
registerPan.add(leaveReg);
registerPan.add(registerHeader);
registerPan.add(nameIn);
registerPan.add(tryRegister);
registerPan.setVisible(false);
leaveLog = new JButton("<=");
leaveLog.addActionListener(this);
leaveLog.setActionCommand("leaveLog");
loginHeader = new JLabel("Geben Sie ihre Kontonummer und PIN ein um sich anzumelden");
ibanPrompt = new JLabel("Kontonummer:");
ibanIn = new JTextField(6);
pinPrompt = new JLabel("PIN: ");
pinIn = new JTextField(6);
tryLogin = new JButton("einloggen");
tryLogin.addActionListener(this);
tryLogin.setActionCommand("tryLogin");
loginPan = new JPanel();
loginPan.add(leaveLog);
loginPan.add(loginHeader);
loginPan.add(ibanPrompt);
loginPan.add(ibanIn);
loginPan.add(pinPrompt);
loginPan.add(pinIn);
loginPan.add(tryLogin);
loginPan.setVisible(false);
leaveLogged = new JButton("<=");
leaveLogged.addActionListener(this);
leaveLogged.setActionCommand("leaveLogged");
loggedHeader = new JLabel("Wilkommen");
openCheck = new JButton("Kontostand einsehen");
openCheck.addActionListener(this);
openCheck.setActionCommand("openCheck");
openWithdraw = new JButton("Betrag abheben");
openWithdraw.addActionListener(this);
openWithdraw.setActionCommand("openWithdraw");
openDeposit = new JButton("Betrag einzahlen");
openDeposit.addActionListener(this);
openDeposit.setActionCommand("openDeposit");
openTransfer = new JButton("Betrag überweisen");
openTransfer.addActionListener(this);
openTransfer.setActionCommand("openTransfer");
loggedInPan = new JPanel();
loggedInPan.add(leaveLogged);
loggedInPan.add(loggedHeader);
loggedInPan.add(openCheck);
loggedInPan.add(openWithdraw);
loggedInPan.add(openDeposit);
loggedInPan.add(openTransfer);
loggedInPan.setVisible(false);
leaveCheck = new JButton("<=");
leaveCheck.addActionListener(this);
leaveCheck.setActionCommand("leaveCheck");
checkHeader = new JLabel("Ihr Kontostand beträgt: ");
balanceOut = new JTextField(15);
balanceOut.setEditable(false);
checkPan = new JPanel();
checkPan.add(leaveCheck);
checkPan.add(checkHeader);
checkPan.add(balanceOut);
checkPan.setVisible(false);
leaveWithdraw = new JButton("<=");
leaveWithdraw.addActionListener(this);
leaveWithdraw.setActionCommand("leaveWithdraw");
withdrawPrompt = new JLabel("Geben Sie den Betrag an den Sie abheben möchten!");
withdrawIn = new JTextField(10);
tryWithdraw = new JButton("abheben");
tryWithdraw.addActionListener(this);
tryWithdraw.setActionCommand("tryWithdraw");
withdrawPan = new JPanel();
withdrawPan.add(leaveWithdraw);
withdrawPan.add(withdrawPrompt);
withdrawPan.add(withdrawIn);
withdrawPan.add(tryWithdraw);
withdrawPan.setVisible(false);
leaveDeposit = new JButton("<=");
leaveDeposit.addActionListener(this);
leaveDeposit.setActionCommand("leaveDeposit");
depositHeader = new JLabel("Geben Sie den Betrag an, den Sie einzahlen möchten!");
depositIn = new JTextField(10);
tryDeposit = new JButton("einzahlen");
tryDeposit.addActionListener(this);
tryDeposit.setActionCommand("tryDeposit");
depositPan = new JPanel();
depositPan.add(leaveDeposit);
depositPan.add(depositHeader);
depositPan.add(depositIn);
depositPan.add(tryDeposit);
depositPan.setVisible(false);
leaveTransfer = new JButton("<=");
leaveTransfer.addActionListener(this);
leaveTransfer.setActionCommand("leaveTransfer");
transferHeader = new JLabel("Geben sie den Empfänger und den Betrag der Überweisung an!");
transIbanPrompt = new JLabel("Kontonummer des Empfängers: ");
transIbanIn = new JTextField(6);
transAmountPrompt = new JLabel("Betrag: ");
transAmount = new JTextField(6);
tryTransfer = new JButton("überweisen");
tryTransfer.addActionListener(this);
tryTransfer.setActionCommand("tryTransfer");
transferPan = new JPanel();
transferPan.add(leaveTransfer);
transferPan.add(transferHeader);
transferPan.add(transIbanPrompt);
transferPan.add(transIbanIn);
transferPan.add(transAmountPrompt);
transferPan.add(transAmount);
transferPan.add(tryTransfer);
transferPan.setVisible(false);
mainPan = new JPanel();
mainPan.add(homePan);
mainPan.add(registerPan);
mainPan.add(loginPan);
mainPan.add(loggedInPan);
mainPan.add(checkPan);
mainPan.add(withdrawPan);
mainPan.add(depositPan);
mainPan.add(transferPan);
add(mainPan);
}
public void actionPerformed(ActionEvent evt) {
/*
homeScreen
*/
if (evt.getActionCommand().equals("close")) {
if (AccountManager.accMan.getAdded()) {
SaveLoad.sl.save();
}
System.exit(0);
} else if (evt.getActionCommand().equals("register")) {
homePan.setVisible(false);
registerPan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("login")) {
homePan.setVisible(false);
loginPan.setVisible(true);
validate();
/*
loggedIn
*/
} else if (evt.getActionCommand().equals("openCheck")) {
loggedInPan.setVisible(false);
checkPan.setVisible(true);
balanceOut.setText(AccountManager.accMan.getBalance());
validate();
} else if (evt.getActionCommand().equals("openWithdraw")) {
loggedInPan.setVisible(false);
withdrawPan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("openDeposit")) {
loggedInPan.setVisible(false);
depositPan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("openTransfer")) {
loggedInPan.setVisible(false);
transferPan.setVisible(true);
validate();
/*
try-Buttons
*/
} else if (evt.getActionCommand().equals("tryRegister")) {
if (AccountManager.accMan.addAccount(nameIn.getText())) {
JOptionPane.showOptionDialog(null, "Ihre Kontonummer lautet: " + AccountManager.accMan.getIban(AccountManager.accMan.getRegIndex()) + "\n"
+ " Ihre PIN lautet: " + AccountManager.accMan.getPin(AccountManager.accMan.getRegIndex()),
"Registration erfolgreich", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
} else if (evt.getActionCommand().equals("tryLogin")) {
int state = AccountManager.accMan.tryLogin(ibanIn.getText().trim(), pinIn.getText().trim());
switch (state) {
case 0:
JOptionPane.showOptionDialog(null, "Bug",
"Bug", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
break;
case 1:
loginPan.setVisible(false);
loggedInPan.setVisible(true);
validate();
break;
case 2:
JOptionPane.showOptionDialog(null, "Das Konto auf das Sie zugreifen wollen konnte nicht gefunden werden!",
"Konto nicht gefunden", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
break;
default:
JOptionPane.showOptionDialog(null, "Der PIN-Code stimmt nicht mit der Kontonummer überein!",
"PIN-Code falsch", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
break;
}
} else if (evt.getActionCommand().equals("tryWithdraw")) {
if (AccountManager.accMan.withdraw(withdrawIn.getText().trim())) {
JOptionPane.showOptionDialog(null, "Der Betrag wurde erfolgreich abgehoben",
"Auszahlung erfolgreich", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
withdrawIn.setText("");
validate();
}
} else if (evt.getActionCommand().equals("tryDeposit")) {
if (AccountManager.accMan.deposit(depositIn.getText().trim())) {
JOptionPane.showOptionDialog(null, "Der Betrag wurde erfolgreich eingezahlt",
"Einzahlung erfolgreich", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
depositIn.setText("");
validate();
}
} else if (evt.getActionCommand().equals("tryTransfer")) {
if (AccountManager.accMan.tryTransfer(transIbanIn.getText().trim(), transAmount.getText().trim())) {
JOptionPane.showOptionDialog(null, "Überweisung erfolgriech!!", "Überweisung erfolgreich!", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
transIbanIn.setText("");
transAmount.setText("");
}
} /*
leave-Buttons
*/ else if (evt.getActionCommand().equals("leaveReg")) {
if (evt.getActionCommand().equals("leaveReg")) {
registerPan.setVisible(false);
}
homePan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("leaveLog")) {
loginPan.setVisible(false);
homePan.setVisible(true);
} else if (evt.getActionCommand().equals("leaveLogged")) {
loggedInPan.setVisible(false);
homePan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("leaveCheck")) {
checkPan.setVisible(false);
loggedInPan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("leaveWithdraw")) {
withdrawPan.setVisible(false);
loggedInPan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("leaveDeposit")) {
depositPan.setVisible(false);
loggedInPan.setVisible(true);
validate();
} else if (evt.getActionCommand().equals("leaveTransfer")) {
transferPan.setVisible(false);
loggedInPan.setVisible(true);
validate();
}
}
}
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package finalgui2;
import javax.swing.JOptionPane;
/**
*
* @author Ahmet
*/
public class InputChecker {
public static InputChecker inCheck = new InputChecker();
public boolean checkForNumb(String toCheck) {
boolean contains = false;
char[] numbers = {'0', '1', '2', '3', '4', '5', '6', '8', '9'};
for (int i = 0; i < numbers.length; i++) {
if (toCheck.contains(Character.toString(numbers[i]))) {
contains = true;
JOptionPane.showOptionDialog(null, "Ihr Name darf keine Zahlen enthalten", "Eingabe ungültig", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
break;
}
}
return contains;
}
public boolean checkDouble(String numb) {
boolean isNumb = true;
try {
Double.parseDouble(numb);
} catch (Exception e) {
isNumb = false;
JOptionPane.showOptionDialog(null, "Eingabe ungültig", "Eingabe ungültig", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
return isNumb;
}
public boolean checkTransfer(String reciever, String value) {
boolean correctData = true;
if (AccountManager.accMan.findAccount(reciever) < 0) {
correctData = false;
JOptionPane.showOptionDialog(null, "Empfängerkonto nicht gefunden", "Eingabe ungültig", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
if (checkDouble(value) == false) {
correctData = false;
}
return correctData;
}
}
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package finalgui2;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
*
* @author Ahmet
*/
public class SaveLoad {
final private String accountsDirect = "finalgui2_accounts.ser";
final private String regIndexDirect = "regIndex.ser";
static SaveLoad sl = new SaveLoad();
public void save() {
ObjectOutputStream oos = null;
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(accountsDirect));
oos = new ObjectOutputStream(fos);
oos.writeObject(AccountManager.accMan.getAccounts());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
}
try {
fos = new FileOutputStream(new File(regIndexDirect));
oos = new ObjectOutputStream(fos);
oos.writeInt(AccountManager.accMan.getRegIndex());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
}
}
public ArrayList loadAccounts() {
ArrayList<Account> accounts = null;
try {
FileInputStream fin = new FileInputStream(accountsDirect);
ObjectInputStream ois = new ObjectInputStream(fin);
accounts = (ArrayList) ois.readObject();
ois.close();
fin.close();
} catch (Exception e) {
}
return accounts;
}
public int loadRegIndex() {
int regIndex = -2;
try {
FileInputStream fis = new FileInputStream(regIndexDirect);
ObjectInputStream ois = new ObjectInputStream(fis);
{
regIndex = (int) ois.readInt();
ois.close();
fis.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return regIndex;
}
public boolean checkFiles() {
boolean found = true;
try {
FileInputStream fin = new FileInputStream(accountsDirect);
ObjectInputStream ois = new ObjectInputStream(fin);
ois.close();
fin.close();
} catch (FileNotFoundException fnf) {
found = false;
} catch (Exception e) {
}
try {
FileInputStream fin = new FileInputStream(regIndexDirect);
ObjectInputStream ois = new ObjectInputStream(fin);
ois.close();
fin.close();
} catch (FileNotFoundException fnf) {
found = false;
} catch (Exception e) {
}
return found;
}
}
thelegend27