JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 201. So erstellen Sie eine Konsolenbankan...

Kaffeepause Nr. 201. So erstellen Sie eine Konsolenbankanwendung in Java

Veröffentlicht in der Gruppe Random-DE
Quelle: Medium Heute werden wir eine einfache Java-Anwendung für ein Bankensystem entwickeln. Es wird uns helfen, besser zu verstehen, wie OOP-Konzepte in Java-Programmen verwendet werden. Kaffeepause Nr. 201.  So erstellen Sie eine Konsolenbankanwendung in Java – 1Zunächst benötigen wir eine auf dem Computer installierte Java-Umgebung, vorzugsweise Java 11. Als nächstes beginnen wir mit einer detaillierten Beschreibung der Funktionen der Konsolenanwendung. Funktionell:
  1. Ein Konto erstellen;
  2. Eingang Ausgang;
  3. Anzeige der letzten 5 Transaktionen;
  4. Bareinzahlung;
  5. Aktuelle Benutzerinformationen anzeigen.
Verwendete objektorientierte Programmierkonzepte:
  1. Nachlass;
  2. Polymorphismus;
  3. Verkapselung.

Anwendungsentwicklung

Lassen Sie uns ein neues Java-Projekt in Eclipse oder IntelliJ IDEA erstellen. Definieren wir eine neue Schnittstelle namens SavingsAccount .
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
Ich habe eine Schnittstelle implementiert, die die Einzahlungsmethode hostet . Ich rufe diese Methode jedes Mal auf, wenn ich Geld auf mein Girokonto einzahle. Das hier verwendete OOP-Konzept ist Polymorphismus (Methoden in einer Schnittstelle haben keinen Körper). Die Implementierung dieser Methode kann in der Klasse „Customer“ gefunden werden , indem eine Methode mit demselben Namen und denselben Parametern überschrieben wird. Auf diese Weise überschreiben Sie eine Methode der übergeordneten Schnittstelle in der untergeordneten Klasse. Dann brauchen wir einen Kunden, der Geld auf das Girokonto einzahlt. Aber zuerst definieren wir unsere Customer- Klasse .
public class Customer extends Person implements SavingsAccount {

    private String username;

    private String password;

    private double balance;

    private ArrayList<String> transactions = new ArrayList<>(5);

    public Customer(String firstName, String lastName, String address, String phone, String username, String password, double balance, ArrayList<String> transactions, Date date) {
        super(firstName, lastName, address, phone);
        this.username = username;
        this.password = password;
        this.balance = balance;
        addTransaction(String.format("Initial deposit - " + NumberFormat.getCurrencyInstance().format(balance) + " as on " + "%1$tD" + " at " + "%1$tT.", date));
    }

    private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }

//Getter Setter

    public ArrayList<String> getTransactions() {
        return transactions;
    }

    @Override
    public void deposit(double amount, Date date) {

        balance += amount;
        addTransaction(String.format(NumberFormat.getCurrencyInstance().format(amount) + " credited to your account. Balance - " + NumberFormat.getCurrencyInstance().format(balance) + " as on " + "%1$tD" + " at " + "%1$tT.", date));
    }

    @Override
    public String toString() {
        return "Customer{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", balance=" + balance +
                ", transactions=" + transactions +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Customer customer = (Customer) o;

        if (Double.compare(customer.getBalance(), getBalance()) != 0) return false;
        if (getUsername() != null ? !getUsername().equals(customer.getUsername()) : customer.getUsername() != null)
            return false;
        if (getPassword() != null ? !getPassword().equals(customer.getPassword()) : customer.getPassword() != null)
            return false;
        return getTransactions() != null ? getTransactions().equals(customer.getTransactions()) : customer.getTransactions() == null;
    }

    @Override
    public int hashCode() {
        int result;
        long temp;
        result = getUsername() != null ? getUsername().hashCode() : 0;
        result = 31 * result + (getPassword() != null ? getPassword().hashCode() : 0);
        temp = Double.doubleToLongBits(getBalance());
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        result = 31 * result + (getTransactions() != null ? getTransactions().hashCode() : 0);
        return result;
    }
Das hier verwendete OOP-Konzept ist Vererbung , da die Customer- Klasse Eigenschaften von der Person- Klasse erhält . Das heißt, fast alle Attribute der Person- Klasse werden vererbt und Eltern-Kind-Beziehungen sind von Person bis Customer sichtbar . Jetzt benötigen wir einen Konstruktor mit allen Attributen der beiden Klassen und das Hinzufügen eines Superkonstruktor-Schlüsselworts, um die geerbten Attribute anzugeben. Bei der Implementierung der SavingsAccount- Schnittstelle müssen wir die Deposit- Methode in der Customer- Klasse überschreiben . Dazu schreiben wir eine Implementierung der Methode in dieser Klasse. Darüber hinaus wird die Transaktionsliste initialisiert, um die letzten fünf Transaktionen anzuzeigen. Der Konstruktor ruft die Methode addTransaction auf , die das Datum der Änderungen und abgeschlossenen Transaktionen anzeigt.
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
Lassen Sie uns nun über die übergeordnete Klasse Person sprechen .
public class Person {

    private String firstName;

    private String lastName;

    private String address;

    private String phone;

    public Person() {}

    public Person(String firstName, String lastName, String address, String phone) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
        this.phone = phone;
    }

//Getters Setters

 @Override
    public String toString() {
        return "Person{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", address='" + address + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (getFirstName() != null ? !getFirstName().equals(person.getFirstName()) : person.getFirstName() != null)
            return false;
        if (getLastName() != null ? !getLastName().equals(person.getLastName()) : person.getLastName() != null)
            return false;
        if (getAddress() != null ? !getAddress().equals(person.getAddress()) : person.getAddress() != null)
            return false;
        return getPhone() != null ? getPhone().equals(person.getPhone()) : person.getPhone() == null;
    }

    @Override
    public int hashCode() {
        int result = getFirstName() != null ? getFirstName().hashCode() : 0;
        result = 31 * result + (getLastName() != null ? getLastName().hashCode() : 0);
        result = 31 * result + (getAddress() != null ? getAddress().hashCode() : 0);
        result = 31 * result + (getPhone() != null ? getPhone().hashCode() : 0);
        return result;
    }
In der Person- Klasse haben wir das Konzept der Kapselung verwendet, indem wir den privaten Zugriffsmodifikator auf jedes Attribut angewendet haben. Kapselung kann in Java als der Mechanismus definiert werden, durch den Methoden, die mit diesen Daten arbeiten, zu einer einzigen Einheit zusammengefasst werden. Im Wesentlichen sind Daten aus der Person-Klasse nur in dieser Klasse verfügbar und nicht in anderen Klassen oder Paketen. Und schließlich unsere Hauptklasse namens Bank . Dies ist die Hauptklasse, von der aus wir die Anwendung ausführen und mit der Funktionalität aller Klassen interagieren.
public class Bank {

    private static double amount = 0;
    Map<String, Customer> customerMap;

    Bank() {
        customerMap = new HashMap<String, Customer>();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        Customer customer;
        Bank bank = new Bank();
        int choice;
        outer:
        while (true) {

            System.out.println("\n-------------------");
            System.out.println("BANK    OF     JAVA");
            System.out.println("-------------------\n");
            System.out.println("1. Registrar cont.");
            System.out.println("2. Login.");
            System.out.println("3. Exit.");
            System.out.print("\nEnter your choice : ");
            choice = sc.nextInt();
            sc.nextLine();
            switch (choice) {
                case 1:
                    System.out.print("Enter First Name : ");
                    String firstName = sc.nextLine();
                    System.out.print("Enter Last Name : ");
                    String lastName = sc.nextLine();
                    System.out.print("Enter Address : ");
                    String address = sc.nextLine();
                    System.out.print("Enter contact number : ");
                    String phone = sc.nextLine();
                    System.out.println("Set Username : ");
                    String username = sc.next();
                    while (bank.customerMap.containsKey(username)) {
                        System.out.println("Username already exists. Set again : ");
                        username = sc.next();
                    }
                    System.out.println("Set a password:");
                    String password = sc.next();
                    sc.nextLine();

                    customer = new Customer(firstName, lastName, address, phone, username, password, new Date());
                    bank.customerMap.put(username, customer);
                    break;

                case 2:
                    System.out.println("Enter username : ");
                    username = sc.next();
                    sc.nextLine();
                    System.out.println("Enter password : ");
                    password = sc.next();
                    sc.nextLine();
                    if (bank.customerMap.containsKey(username)) {
                        customer = bank.customerMap.get(username);
                        if (customer.getPassword().equals(password)) {
                            while (true) {
                                System.out.println("\n-------------------");
                                System.out.println("W  E  L  C  O  M  E");
                                System.out.println("-------------------\n");
                                System.out.println("1. Deposit.");
                                System.out.println("2. Transfer.");
                                System.out.println("3. Last 5 transactions.");
                                System.out.println("4. User information.");
                                System.out.println("5. Log out.");
                                System.out.print("\nEnter your choice : ");
                                choice = sc.nextInt();
                                sc.nextLine();
                                switch (choice) {
                                    case 1:
                                        System.out.print("Enter amount : ");
                                        while (!sc.hasNextDouble()) {
                                            System.out.println("Invalid amount. Enter again :");
                                            sc.nextLine();
                                        }
                                        amount = sc.nextDouble();
                                        sc.nextLine();
                                        customer.deposit(amount, new Date());
                                        break;

                                    case 2:
                                        System.out.print("Enter beneficiary username : ");
                                        username = sc.next();
                                        sc.nextLine();
                                        System.out.println("Enter amount : ");
                                        while (!sc.hasNextDouble()) {
                                            System.out.println("Invalid amount. Enter again :");
                                            sc.nextLine();
                                        }
                                        amount = sc.nextDouble();
                                        sc.nextLine();
                                        if (amount > 300) {
                                            System.out.println("Transfer limit exceeded. Contact bank manager.");
                                            break;
                                        }
                                        if (bank.customerMap.containsKey(username)) {
                                            Customer payee = bank.customerMap.get(username); //Todo: check
                                            payee.deposit(amount, new Date());
                                            customer.withdraw(amount, new Date());
                                        } else {
                                            System.out.println("Username doesn't exist.");
                                        }
                                        break;

                                    case 3:
                                        for (String transactions : customer.getTransactions()) {
                                            System.out.println(transactions);
                                        }
                                        break;

                                    case 4:
                                        System.out.println("Titularul de cont cu numele: " + customer.getFirstName());
                                        System.out.println("Titularul de cont cu prenumele : " + customer.getLastName());
                                        System.out.println("Titularul de cont cu numele de utilizator : " + customer.getUsername());
                                        System.out.println("Titularul de cont cu addresa : " + customer.getAddress());
                                        System.out.println("Titularul de cont cu numarul de telefon : " + customer.getPhone());
                                        break;
                                    case 5:
                                        continue outer;
                                    default:
                                        System.out.println("Wrong choice !");
                                }
                            }
                        } else {
                            System.out.println("Wrong username/password.");
                        }
                    } else {
                        System.out.println("Wrong username/password.");
                    }
                    break;

                case 3:
                    System.out.println("\nThank you for choosing Bank Of Java.");
                    System.exit(1);
                    break;
                default:
                    System.out.println("Wrong choice !");
            }}}}
Mit der Bibliothek java.util rufen wir Scanner auf , um die Tastatur zu lesen. Indem wir das Customer- Objekt durch seine Definition, bekannt als Bank , umwandeln , erstellen wir ein neues Objekt vom Typ Bank() . Nach einiger Zeit zeigen wir das Startmenü an. Bei Verwendung von nextLine wird die über die Tastatur hinzugefügte Zahl gelesen. Unten haben wir einen neuen Konstruktor, der unsere Karte , die Client-Daten, speichert . Map.put wird zum Speichern oder Aktualisieren von Kundendaten verwendet. Kunde = neuer Kunde (Vorname, Nachname, Adresse, Telefon, Benutzername, Passwort, neues Datum());
bank.customerMap.put(username, customer);
Wenn eine Verbindung besteht, erhalten wir ein neues Menü mit Optionen. Der gleiche Ansatz funktioniert durch die Verwendung von while und switch , um die Anwendungsfunktionalität aufzurufen. Stufe 1: Fügen Sie Geld auf Ihr Girokonto hinzu. Schritt 2: Die letzten 5 Transaktionen anzeigen. Stufe 3: Wir geben die Client-Daten von der Karte an die Konsole aus. Stufe 4: Schließen Sie das Menü. Den Quellcode des Programms finden Sie hier . Ich hoffe, dieses Beispiel wird Ihnen helfen, sich mit der Verwendung von OOP-Konzepten in Java vertrauter zu machen.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION