JavaRush /Blog Java /Random-MS /Coffee break #201. Bagaimana untuk mencipta aplikasi perb...

Coffee break #201. Bagaimana untuk mencipta aplikasi perbankan konsol dalam Java

Diterbitkan dalam kumpulan
Sumber: Medium Hari ini kami akan membangunkan aplikasi Java mudah untuk sistem perbankan. Ia akan membantu kami lebih memahami cara konsep OOP digunakan dalam program Java. Coffee break #201.  Cara membuat aplikasi perbankan konsol dalam Java - 1Sebagai permulaan, kita memerlukan persekitaran Java yang dipasang pada komputer, sebaik-baiknya Java 11. Seterusnya, kita akan mulakan dengan penerangan terperinci tentang fungsi aplikasi konsol. Berfungsi:
  1. Buat akaun;
  2. Masuk keluar;
  3. Paparan 5 transaksi terakhir;
  4. Deposit tunai;
  5. Paparkan maklumat pengguna semasa.
Konsep pengaturcaraan berorientasikan objek yang digunakan:
  1. Warisan;
  2. Polimorfisme;
  3. Enkapsulasi.

Pembangunan aplikasi

Mari buat projek Java baharu dalam Eclipse atau IntelliJ IDEA. Mari kita tentukan antara muka baharu yang dipanggil SavingsAccount .
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
Saya telah melaksanakan antara muka yang mengehoskan kaedah deposit . Saya memanggil kaedah ini setiap kali saya menambah wang ke akaun semak saya. Konsep OOP yang digunakan di sini ialah polimorfisme (kaedah dalam antara muka tidak mempunyai badan). Pelaksanaan kaedah ini boleh didapati dalam kelas Pelanggan dengan mengatasi kaedah dengan nama dan parameter yang sama. Dengan cara ini anda mengatasi kaedah daripada antara muka induk dalam kelas anak. Kemudian kami memerlukan pelanggan untuk menambah wang ke akaun cek. Tetapi pertama, mari kita tentukan kelas Pelanggan kami .
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;
    }
Konsep OOP yang digunakan di sini ialah warisan , kerana kelas Pelanggan menerima sifat daripada kelas Orang . Iaitu, hampir semua atribut kelas Orang diwarisi dan hubungan ibu bapa-anak kelihatan daripada Orang kepada Pelanggan . Sekarang kita memerlukan pembina dengan semua atribut kedua-dua kelas dan menambah kata kunci superkonstruktor untuk menentukan atribut yang diwarisi. Apabila melaksanakan antara muka SavingsAccount , kami mesti mengatasi kaedah deposit dalam kelas Pelanggan . Untuk melakukan ini, kami akan menulis pelaksanaan kaedah dalam kelas ini. Selain itu, senarai transaksi dimulakan untuk memaparkan lima transaksi terakhir. Pembina memanggil kaedah addTransaction , yang memaparkan tarikh perubahan dan transaksi selesai.
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
Sekarang mari kita bercakap tentang kelas induk Person .
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;
    }
Dalam kelas Orang , kami menggunakan konsep enkapsulasi dengan menggunakan pengubah akses peribadi pada setiap atribut. Enkapsulasi dalam Java boleh ditakrifkan sebagai mekanisme di mana kaedah yang beroperasi pada data ini digabungkan menjadi satu unit. Pada asasnya, data daripada kelas Person hanya tersedia dalam kelas ini dan bukan dalam kelas atau pakej lain. Dan akhirnya, kelas utama kami, yang dipanggil Bank . Ini adalah kelas utama dari mana kami menjalankan aplikasi dan berinteraksi dengan fungsi semua kelas.
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 !");
            }}}}
Menggunakan perpustakaan java.util , kami memanggil Pengimbas untuk membaca papan kekunci. Dengan menghantar objek Pelanggan melalui definisinya, dikenali sebagai Bank , kami mencipta objek baharu jenis Bank() . Selepas beberapa lama, kami memaparkan menu mula. Apabila menggunakan nextLine , nombor yang ditambahkan daripada papan kekunci dibaca. Di bawah ini kami mempunyai pembina baharu yang menyimpan peta kami , data pelanggan. Map.put digunakan untuk menyimpan atau mengemas kini data pelanggan. pelanggan = Pelanggan baharu(Nama Pertama, Nama Akhir, alamat, telefon, nama pengguna, kata laluan, Tarikh baharu());
bank.customerMap.put(username, customer);
Jika ada sambungan, kami mendapat menu baharu dengan pilihan. Pendekatan yang sama berfungsi dengan menggunakan while dan beralih ke fungsi aplikasi panggilan. Peringkat 1: Tambahkan wang ke akaun semasa anda. Langkah 2: Paparkan 5 transaksi terakhir. Peringkat 3: Kami mengeluarkan data pelanggan daripada kad ke konsol. Peringkat 4: Tutup menu. Kod sumber untuk program ini boleh didapati di sini . Saya harap contoh ini akan membantu anda menjadi lebih biasa dengan penggunaan konsep OOP dalam Java.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION