JavaRush /Java Blog /Random-TL /Coffee break #201. Paano lumikha ng isang console banking...

Coffee break #201. Paano lumikha ng isang console banking application sa Java

Nai-publish sa grupo
Source: Medium Ngayon ay bubuo kami ng isang simpleng Java application para sa isang banking system. Makakatulong ito sa amin na mas maunawaan kung paano ginagamit ang mga konsepto ng OOP sa mga programang Java. Coffee break #201.  Paano lumikha ng isang console banking application sa Java - 1Upang magsimula, kakailanganin namin ang isang Java environment na naka-install sa computer, mas mabuti ang Java 11. Susunod, magsisimula kami sa isang detalyadong paglalarawan ng mga function ng console application. Functional:
  1. Gumawa ng account;
  2. Ipasok ang exit;
  3. Pagpapakita ng huling 5 transaksyon;
  4. Deposito ng pera;
  5. Ipakita ang kasalukuyang impormasyon ng user.
Ang mga konsepto ng programming na nakatuon sa object ay ginamit:
  1. Mana;
  2. Polymorphism;
  3. Encapsulation.

Pag-unlad ng aplikasyon

Gumawa tayo ng bagong proyekto ng Java sa Eclipse o IntelliJ IDEA. Tukuyin natin ang isang bagong interface na tinatawag na SavingsAccount .
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
Nagpatupad ako ng interface na nagho-host ng paraan ng pagdedeposito . Tinatawag ko ang paraang ito sa tuwing nagdaragdag ako ng pera sa aking checking account. Ang konsepto ng OOP na ginamit dito ay polymorphism (mga pamamaraan sa isang interface ay walang katawan). Ang pagpapatupad ng paraang ito ay makikita sa klase ng Customer sa pamamagitan ng pag-override sa isang paraan na may parehong pangalan at mga parameter. Sa ganitong paraan, na-override mo ang isang paraan mula sa interface ng magulang sa klase ng bata. Pagkatapos ay kailangan namin ng isang kliyente upang magdagdag ng pera sa checking account. Ngunit una, tukuyin natin ang aming klase ng Customer .
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;
    }
Ang konsepto ng OOP na ginamit dito ay pamana , dahil ang klase ng Customer ay tumatanggap ng mga katangian mula sa klase ng Tao . Ibig sabihin, halos lahat ng katangian ng klase ng Tao ay minana at ang relasyon ng magulang-anak ay makikita mula sa Tao sa Customer . Ngayon kailangan namin ng isang constructor na may lahat ng mga katangian ng dalawang klase at pagdaragdag ng isang superconstructor na keyword upang tukuyin ang minanang mga katangian. Kapag nagpapatupad ng interface ng SavingsAccount , dapat nating i-override ang paraan ng pagdedeposito sa klase ng Customer . Upang gawin ito, magsusulat kami ng isang pagpapatupad ng pamamaraan sa klase na ito. Bukod pa rito, ang listahan ng transaksyon ay sinisimulan upang ipakita ang huling limang transaksyon. Tinatawag ng tagabuo ang paraan ng addTransaction , na nagpapakita ng petsa ng mga pagbabago at mga nakumpletong transaksyon.
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
Ngayon ay pag-usapan natin ang parent class na 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;
    }
Sa klase ng Tao , ginamit namin ang konsepto ng encapsulation sa pamamagitan ng paglalapat ng private access modifier sa bawat attribute. Ang Encapsulation sa Java ay maaaring tukuyin bilang ang mekanismo kung saan ang mga pamamaraan na gumagana sa data na ito ay pinagsama sa isang yunit. Sa pangkalahatan, ang data mula sa klase ng Tao ay magagamit lamang sa klase na ito, at hindi sa ibang mga klase o pakete. At sa wakas, ang aming pangunahing klase, na tinatawag na Bank . Ito ang pangunahing klase kung saan namin pinapatakbo ang application at nakikipag-ugnayan sa functionality ng lahat ng klase.
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 !");
            }}}}
Gamit ang java.util library , tinatawagan namin ang Scanner para basahin ang keyboard. Sa pamamagitan ng pag-cast ng object ng Customer sa pamamagitan ng kahulugan nito, na kilala bilang Bank , lumikha kami ng bagong object ng uri Bank() . Pagkaraan ng ilang oras, ipinapakita namin ang start menu. Kapag gumagamit ng nextLine , binabasa ang numerong idinagdag mula sa keyboard. Sa ibaba ay mayroon kaming bagong constructor na nagse-save sa aming mapa , ang data ng kliyente. Ginagamit ang Map.put para i-save o i-update ang data ng customer. customer = bagong Customer(firstName, lastName, address, telepono, username, password, bagong Petsa());
bank.customerMap.put(username, customer);
Kung may koneksyon, makakakuha kami ng bagong menu na may mga opsyon. Gumagana ang parehong diskarte sa pamamagitan ng paggamit habang at lumipat sa paggana ng application na tawagan. Stage 1: Magdagdag ng pera sa iyong kasalukuyang account. Hakbang 2: Ipakita ang huling 5 transaksyon. Stage 3: Inilalabas namin ang data ng kliyente mula sa card patungo sa console. Stage 4: Isara ang menu. Ang source code para sa programa ay matatagpuan dito . Umaasa ako na ang halimbawang ito ay makakatulong sa iyo na maging mas pamilyar sa paggamit ng mga konsepto ng OOP sa Java.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION