Verbesserungsvorschläge

Diskutiere Verbesserungsvorschläge im Allgemeine Java-Themen Forum; Hallo Forum, Habe nun eure Verbesserungsvorschläge vom letzten Mal versucht umzusetzen. Ich würde mich nun über weitere...

  1. thelegend27
    thelegend27 Neues Mitglied
    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:
    Show Spoiler
    Code (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:
    Show Spoiler
    Code (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);
        }

    }
     

    die AccountManager-Klasse:
    Show Spoiler
    Code (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;
        }
    }
     

    die Gui-Klasse:
    Show Spoiler
    Code (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();
            }
        }
    }
     

    die InputChecker-Klasse:
    Show Spoiler
    Code (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;

        }
    }
     

    die SaveLoad-Klasse:
    Show Spoiler
    Code (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;
        }

    }
     

    Mfg
    thelegend27
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. mrBrown
    mrBrown Bekanntes Mitglied
    Nur ganz kurz:

    Zur GUI:
    Ich finde die GUI-Klasse deutlich zu groß, da kann man sicher mehrere einzelne raus machen ;)
    Außerdem würde ich nicht JFrame extenden, sondern nur nutzen.

    Zu Account:
    Den Kontostand würde ich nicht als double (generell eine schlechte Idee wegen Rundungsfehlern, wenn dann Integer und in Centbeträgen oder gleich BigDecimal nutzen), sondern als Menge von Transaktionen speichern.
    Aus allen Transaktionen zusammen ergibt sich dann der Kontostand.
     
    thelegend27 gefällt das.
  4. thelegend27
    thelegend27 Neues Mitglied
    Will jetzt nicht frech klingen aber ist das alles? Hätte mir ehrlich gesagt mehr Sachen erwartet.
     
  5. mrBrown
    mrBrown Bekanntes Mitglied
    Das war nur das auf den ersten Blick, wenn du mehr willst: gerne, dauert dann nur nen Moment :p
     
  6. thelegend27
    thelegend27 Neues Mitglied
    Kein Problem nimm dir soviel Zeit wie du brauchst:)
     
  7. mrBrown
    mrBrown Bekanntes Mitglied
    Zu Account hatte ich ja schon was gesagt

    AccountManager:
    • public static AccountManager accMan = new AccountManager();: Singelton Patten würde ich vermeiden. Besser ists, einmal eine Instanz zu erstellen, und die an die nötigen Stellen weiterzuleiten
    • private int currAccount würde ich vermeiden. AccountManager ist ja in etwa das Äquivalent zu einer Bank - kennt eine Bank genau einen aktuellen Account? ;) Besser wäre es, wenn die GUI über den aktuellen Account bescheid weiß, und nicht der AccountManager ;)
    • private int regIndex: das gleiche wie drüber ;) Das registrieren kann doch einfach den neuen Account zurückgeben.
    • AccountManager(): Einen Konstruktor, der direkt Dinge aus Dateien lädt, würde ich vermeiden. Besser wäre es, wenn der Konstruktor einfach einen neuen (leeren) AccountManager erstellt, und das Laden und Speichern gibt es zusätzlich als Möglichkeit - würde ich dann aber so umsetzten, das das Laden einen AccountManager lädt und zurückgibt, und nicht vom AccountManager aus.
    • In addAccount: auf den runned-Boolean würde ich verzichten - stattdessen einfach den Account zurückgeben (und für einen nicht-erstellten entweder null oder besser eine Exception).
    • In addAccount: Die IBANs könntest du statt zufällig erstellt einfach hochzählen - und das ganze uU in einen IbanGenerator auslagern ;)
    • findAccount: warum gibt das denn umständlich den Index und nicht den Account zurück? Das würde das an vielen Stellen deutlich leichter machen ;)
    • getIban und getPin wären dann überflüssig
    • Zu tryLogin:
      • Was ist denn dieser ominöse state? Wenn du den brauchst, würde ich dafür einen Enum nutzen
      • Ich würde das eher einen Account zurückgeben lassen, und wenn keiner gefunden wird, eine Exception schmeißen (oder in Richtung funktional und Either gehen)
    • deposit würde ich einen Account und den Betrag übergeben, statt nur den Betrag. Betrag würde ich als Zahl übergeben, und das Parsen in der Gui machen
    • Für withdraw gilt das gleiche
    • Für tryTransfer auch. Beide beteiligten Accounts und Betrag als Argument übergeben, und wenn was schiefgeht Exception


    Reicht das fürs Erste? :p :D

    Die Benennung der Methoden etc und den reinen Stil finde ich zum Großteil gar nicht mal so schlecht ;)
     
  8. AndiE
    AndiE Mitglied
    Ich habe mir den Code mal angesehen, und meine, dass die Aussagen von mrBrown es im wesentlichen sagen. Ich würde mir wünschen, dass du zuerst die Gui-Klasse teilst.
     
  9. thelegend27
    thelegend27 Neues Mitglied
    Danke sehr fürs Feedback ! Werde versuchen es umzusetzen

    Darf ich fragen wieso man das vermeiden sollte? Außerdem: Wie gebe ich eine Instanz weiter? Dachte das geht nur auf die Weise.

    Mfg
    thelegend27
     
  10. AndiE
    AndiE Mitglied
    Ich würde vielleicht dieses Vorgehen empfehlen:
    Code (Java):
    public class Bank{

    public Bank(){ //Konstruktor

    }

    public main(){
    Anzeige anz= new Anzeige(); // GUI
    AcoountMamager acm= new Accountmanager();
    acm.init();
    anz.start(acm);
    }

    }
    Außerdem würde ich für ein Frame verschieden Klassen Pane anlegen. Wobei ich "Frame f =new frame()," schreiben würde, und nicht von Frame erben. Das ist zwar etwas mehr Schreibarbeit, macht den Code aber nachvollziehbarer, finde ich. Mit den Pane-Klassen hast du die ActionListener da drin. Günstig wären noch Controller-Klassen, deren Methoden von den actionPerformed-Methoden aufgerufen werden. Dann hast du die Anzeige und die Verarbeitung getrennt. Das macht den Code wartbarer und übersichtlicher.
     
    thelegend27 gefällt das.
  11. mrBrown
    mrBrown Bekanntes Mitglied
    Warum nicht viel einfacher sorum:
    Code (Text):
    public main(){
      AcoountMamager acm= new Accountmanager();
      Anzeige anz= new Anzeige(acm); // GUI
    }
    Außerhalb von nem Framework würd ich soweit möglich auf irgendwelche init/start/whatever verzichten
     
    thelegend27 gefällt das.
Die Seite wird geladen...

Verbesserungsvorschläge - Ähnliche Themen

Verbesserungsvorschläge
Verbesserungsvorschläge im Forum Allgemeine Java-Themen
einfache Stoppuhr -Verbesserungsvorschläge
einfache Stoppuhr -Verbesserungsvorschläge im Forum AWT, Swing, JavaFX & SWT
Verbesserungsvorschläge?! Kleines AWT Programm
Verbesserungsvorschläge?! Kleines AWT Programm im Forum AWT, Swing, JavaFX & SWT
first project - Verbesserungsvorschläge am Code
first project - Verbesserungsvorschläge am Code im Forum Java Basics - Anfänger-Themen
Zahl Pi probabilistisch berechnen (Kritik/Verbesserungsvorschläge)
Zahl Pi probabilistisch berechnen (Kritik/Verbesserungsvorschläge) im Forum Java Basics - Anfänger-Themen
Thema: Verbesserungsvorschläge