JavaRush /Blog Jawa /Random-JV /Ngopi #201. Carane nggawe aplikasi console banking ing Ja...

Ngopi #201. Carane nggawe aplikasi console banking ing Jawa

Diterbitake ing grup
Sumber: Medium Dina iki kita bakal ngembangake aplikasi Java sing prasaja kanggo sistem perbankan. Iku bakal mbantu kita luwih ngerti carane konsep OOP digunakake ing program Jawa. Ngopi #201.  Carane nggawe aplikasi console banking ing Jawa - 1Kanggo miwiti, kita butuh lingkungan Java sing diinstal ing komputer, luwih becik Java 11. Sabanjure, kita bakal miwiti kanthi katrangan rinci babagan fungsi aplikasi konsol. Fungsional:
  1. Nggawe akun;
  2. Ketik metu;
  3. Tampilan 5 transaksi pungkasan;
  4. simpenan awis;
  5. Tampilake informasi pangguna saiki.
Konsep pemrograman berorientasi obyek sing digunakake:
  1. pusaka;
  2. Polimorfisme;
  3. Enkapsulasi.

Pangembangan aplikasi

Ayo nggawe proyek Java anyar ing Eclipse utawa IntelliJ IDEA. Ayo nemtokake antarmuka anyar sing diarani SavingsAccount .
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
Aku wis dipun ginakaken antarmuka sing sarwa dumadi cara simpenan . Aku nelpon cara iki saben-saben aku nambah dhuwit kanggo akun mriksa. Konsep OOP sing digunakake ing kene yaiku polimorfisme (metode ing antarmuka ora duwe awak). Implementasi metode iki bisa ditemokake ing kelas Pelanggan kanthi ngatasi metode kanthi jeneng lan paramèter sing padha. Kanthi cara iki sampeyan ngilangi cara saka antarmuka induk ing kelas anak. Banjur kita butuh klien kanggo nambah dhuwit menyang akun mriksa. Nanging pisanan, ayo nemtokake kelas Pelanggan 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 sing digunakake ing kene yaiku warisan , amarga kelas Pelanggan nampa properti saka kelas Person . Yaiku, meh kabeh atribut kelas Person diwarisake lan hubungan wong tuwa-anak katon saka Wong menyang Pelanggan . Saiki kita butuh konstruktor kanthi kabeh atribut saka rong kelas lan nambahake tembung kunci superkonstruktor kanggo nemtokake atribut sing diwarisake. Nalika ngleksanakake antarmuka SavingsAccount , kita kudu ngilangi cara simpenan ing kelas Pelanggan . Kanggo nindakake iki, kita bakal nulis implementasine metode ing kelas iki. Kajaba iku, dhaptar transaksi diwiwiti kanggo nampilake limang transaksi pungkasan. Konstruktor nelpon cara addTransaction , sing nampilake tanggal owah-owahan lan transaksi rampung.
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
Saiki ayo ngomong babagan wong tuwa kelas 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;
    }
Ing kelas Person , kita nggunakake konsep enkapsulasi kanthi nggunakake modifier akses pribadi kanggo saben atribut. Enkapsulasi ing Jawa bisa ditetepake minangka mekanisme sing cara sing digunakake ing data iki digabungake dadi siji unit. Ateges, data saka kelas Person mung kasedhiya ing kelas iki, lan ora ing kelas utawa paket liyane. Lan pungkasanipun, kelas utama kita, disebut Bank . Iki minangka kelas utama saka ngendi kita mbukak aplikasi lan sesambungan karo fungsi kabeh 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 !");
            }}}}
Nggunakake perpustakaan java.util , kita nelpon Scanner kanggo maca keyboard. Miturut casting obyek Customer liwat definisi, dikenal minangka Bank , kita nggawe obyek anyar saka jinis Bank () . Sawise sawetara wektu, kita nampilake menu wiwitan. Nalika nggunakake nextLine , nomer sing ditambahake saka keyboard diwaca. Ing ngisor iki kita duwe konstruktor anyar sing nyimpen peta kita , data klien. Map.put digunakake kanggo nyimpen utawa nganyari data pelanggan. customer = new Customer(firstName, LastName, address, phone, username, password, new Date());
bank.customerMap.put(username, customer);
Yen ana sambungan, kita njaluk menu anyar karo opsi. Pendekatan sing padha bisa digunakake kanthi nggunakake nalika lan ngalih menyang fungsi aplikasi telpon. Tahap 1: Tambah dhuwit menyang akun saiki. Langkah 2: Tampilake 5 transaksi pungkasan. Tahap 3: Kita ngasilake data klien saka kertu menyang konsol. Tahap 4: Nutup menu. Kode sumber kanggo program bisa ditemokaké kene . Muga-muga conto iki bisa mbantu sampeyan dadi luwih ngerti babagan panggunaan konsep OOP ing Jawa.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION