JavaRush /Java Blog /Random-ID /Rehat kopi #201. Cara membuat aplikasi konsol perbankan d...

Rehat kopi #201. Cara membuat aplikasi konsol perbankan di Java

Dipublikasikan di grup Random-ID
Sumber: Medium Hari ini kami akan mengembangkan aplikasi Java sederhana untuk sistem perbankan. Ini akan membantu kita lebih memahami bagaimana konsep OOP digunakan dalam program Java. Rehat kopi #201.  Cara membuat aplikasi konsol perbankan di Java - 1Untuk memulainya, kita memerlukan lingkungan Java yang terinstal di komputer, sebaiknya Java 11. Selanjutnya, kita akan mulai dengan penjelasan rinci tentang fungsi aplikasi konsol. Fungsional:
  1. Buat sebuah akun;
  2. Masuk keluar;
  3. Tampilan 5 transaksi terakhir;
  4. Setoran tunai;
  5. Menampilkan informasi pengguna saat ini.
Konsep pemrograman berorientasi objek yang digunakan:
  1. Warisan;
  2. Polimorfisme;
  3. Enkapsulasi.

Pengembangan aplikasi

Mari buat proyek Java baru di Eclipse atau IntelliJ IDEA. Mari kita tentukan antarmuka baru yang disebut SavingsAccount .
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
Saya telah menerapkan antarmuka yang menampung metode deposit . Saya menyebut metode ini setiap kali saya menambahkan uang ke rekening giro saya. Konsep OOP yang digunakan disini adalah polimorfisme (metode dalam suatu antarmuka tidak memiliki isi). Implementasi metode ini dapat ditemukan di kelas Pelanggan dengan mengganti metode dengan nama dan parameter yang sama. Dengan cara ini Anda mengganti metode dari antarmuka induk di kelas anak. Kemudian kita membutuhkan klien untuk menambahkan uang ke rekening giro. Tapi pertama-tama, mari kita definisikan kelas Customer kita .
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 adalah pewarisan , karena kelas Pelanggan menerima properti dari kelas Person . Artinya, hampir semua atribut kelas Person diwarisi dan hubungan induk-anak terlihat dari Person ke Customer . Sekarang kita memerlukan konstruktor dengan semua atribut dari dua kelas dan menambahkan kata kunci superkonstruktor untuk menentukan atribut yang diwarisi. Saat mengimplementasikan antarmuka SavingAccount , kita harus mengganti metode deposit di kelas Pelanggan . Untuk melakukan hal ini, kami akan menulis implementasi metode di kelas ini. Selain itu, daftar transaksi diinisialisasi untuk menampilkan lima transaksi terakhir. Konstruktor memanggil metode addTransaction , yang menampilkan tanggal perubahan dan penyelesaian transaksi.
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
Sekarang mari kita bicara 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;
    }
Di kelas Person , kami menggunakan konsep enkapsulasi dengan menerapkan pengubah akses privat ke setiap atribut. Enkapsulasi di Java dapat didefinisikan sebagai mekanisme dimana metode yang beroperasi pada data ini digabungkan menjadi satu unit. Pada dasarnya, data dari kelas Person hanya tersedia di kelas ini, dan tidak di kelas atau paket lain. Dan terakhir, kelas utama kita, disebut Bank . Ini adalah kelas utama tempat kita menjalankan aplikasi dan berinteraksi dengan fungsionalitas 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 Pemindai untuk membaca keyboard. Dengan memasukkan objek Customer melalui definisinya, yang dikenal sebagai Bank , kita membuat objek baru bertipe Bank() . Setelah beberapa waktu, kami menampilkan menu start. Saat menggunakan nextLine , nomor yang ditambahkan dari keyboard dibaca. Di bawah ini kami memiliki konstruktor baru yang menyimpan peta kami , data klien. Map.put digunakan untuk menyimpan atau memperbarui data pelanggan. pelanggan = Pelanggan baru(Nama Depan, Nama Belakang, alamat, telepon, nama pengguna, kata sandi, Tanggal baru());
bank.customerMap.put(username, customer);
Jika ada koneksi, kita mendapatkan menu baru dengan opsi. Pendekatan yang sama bekerja dengan menggunakan fungsi aplikasi while dan switch to call. Tahap 1: Tambahkan uang ke rekening Anda saat ini. Langkah 2: Tampilkan 5 transaksi terakhir. Tahap 3: Kami mengeluarkan data klien dari kartu ke konsol. Tahap 4: Tutup menu. Kode sumber untuk program ini dapat ditemukan di sini . Saya harap contoh ini akan membantu Anda menjadi lebih akrab dengan penggunaan konsep OOP di Java.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION