JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #201. วิธีสร้างแอปพลิเคชันคอนโซลธนาคารใน Java

คอฟฟี่เบรค #201. วิธีสร้างแอปพลิเคชันคอนโซลธนาคารใน Java

เผยแพร่ในกลุ่ม
ที่มา: สื่อ วันนี้เราจะพัฒนาแอปพลิเคชัน Java อย่างง่ายสำหรับระบบธนาคาร มันจะช่วยให้เราเข้าใจได้ดีขึ้นว่าแนวคิด OOP ถูกนำมาใช้ในโปรแกรม Java อย่างไร คอฟฟี่เบรค #201.  วิธีสร้างแอปพลิเคชันคอนโซลธนาคารใน Java - 1ขั้นแรกเราจะต้องติดตั้งสภาพแวดล้อม Java บนคอมพิวเตอร์โดยเฉพาะ Java 11 ต่อไปเราจะเริ่มต้นด้วยคำอธิบายโดยละเอียดเกี่ยวกับฟังก์ชันของแอปพลิเคชันคอนโซล การทำงาน:
  1. สร้างบัญชี;
  2. เข้าออก;
  3. แสดงธุรกรรม 5 รายการล่าสุด
  4. เงินฝากเงินสด;
  5. แสดงข้อมูลผู้ใช้ปัจจุบัน
แนวคิดการเขียนโปรแกรมเชิงวัตถุที่ใช้:
  1. มรดก;
  2. ความแตกต่าง;
  3. การห่อหุ้ม

การพัฒนาโปรแกรมประยุกต์

มาสร้างโปรเจ็กต์ Java ใหม่ใน Eclipse หรือ IntelliJ IDEA มากำหนดอินเทอร์เฟซใหม่ที่เรียกว่า SavingsAccount
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
ฉันได้ใช้อินเทอร์เฟซที่โฮสต์วิธีการฝากเงิน ฉันเรียกวิธีนี้ทุกครั้งที่ฉันเติมเงินเข้าบัญชีเงินฝากของฉัน แนวคิด OOP ที่ใช้ในที่นี้คือความหลากหลาย (วิธีการในอินเทอร์เฟซไม่มีเนื้อหา) การใช้งานเมธอดนี้สามารถพบได้ใน คลาส ลูกค้าโดยการแทนที่เมธอดที่มีชื่อและพารามิเตอร์เดียวกัน วิธีนี้คุณจะแทนที่วิธีการจากอินเทอร์เฟซหลักในคลาสลูก จากนั้นเราต้องการให้ลูกค้าเพิ่มเงินเข้าบัญชีเช็ค แต่ก่อนอื่น มากำหนด คลาส 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;
    }
แนวคิด OOP ที่ใช้ในที่นี้คือการสืบทอดเนื่องจาก คลาส Customerได้รับคุณสมบัติจาก คลาส Person นั่นคือ แอ็ตทริบิวต์เกือบทั้งหมดของ คลาส Person ได้รับการสืบทอด และความสัมพันธ์ ระหว่างพ่อแม่และลูกสามารถมองเห็นได้จากPersonถึงCustomer ตอนนี้เราต้องการ Constructor ที่มีคุณลักษณะทั้งหมดของทั้งสองคลาส และเพิ่มคีย์เวิร์ด Superconstructor เพื่อระบุคุณลักษณะที่สืบทอดมา เมื่อใช้งาน อินเทอร์เฟซSavingsAccount เราต้องแทนที่ วิธี การฝากเงินใน คลาส ลูกค้า เพื่อที่จะทำสิ่งนี้ เราจะเขียนการนำเมธอดไปใช้งานในคลาสนี้ นอกจากนี้ รายการธุรกรรมจะเตรียมใช้งานเพื่อแสดงธุรกรรมห้าครั้งล่าสุด Constructor เรียก เมธอด addTransactionซึ่งแสดงวันที่ของการเปลี่ยนแปลงและธุรกรรมที่เสร็จสมบูรณ์
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
ตอนนี้เรามาพูดถึงคลาสผู้ปกครอง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;
    }
ใน คลาส Personเราใช้แนวคิดของการห่อหุ้ม โดยใช้ ตัวแก้ไขการเข้าถึงส่วนตัวกับแต่ละแอตทริบิวต์ การห่อหุ้มใน Java สามารถกำหนดได้ว่าเป็นกลไกที่วิธีการทำงานกับข้อมูลนี้ถูกรวมเข้าเป็นหน่วยเดียว โดยพื้นฐานแล้ว ข้อมูลจากคลาส Person มีเฉพาะในคลาสนี้เท่านั้น และไม่มีในคลาสหรือแพ็คเกจอื่น และสุดท้าย ชั้นเรียนหลักของเรา เรียกว่าBank นี่คือคลาสหลักที่เราเรียกใช้แอปพลิเคชันและโต้ตอบกับฟังก์ชันการทำงานของคลาสทั้งหมด
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 !");
            }}}}
การใช้ ไลบรารี java.utilเราเรียกScannerเพื่ออ่านคีย์บอร์ด ด้วยการแคสต์ ออบเจ็กต์Customerผ่านคำจำกัดความที่เรียกว่าBankเราจะสร้างออบเจ็กต์ใหม่ประเภทBank( ) หลังจากนั้นครู่หนึ่งเราจะแสดงเมนูเริ่มต้น เมื่อใช้nextLineหมายเลขที่เพิ่มจากแป้นพิมพ์จะถูกอ่าน ด้านล่างนี้เรามีตัวสร้างใหม่ที่บันทึกแผนที่ ของเรา ซึ่งเป็นข้อมูลลูกค้า Map.putใช้เพื่อบันทึกหรืออัปเดตข้อมูลลูกค้า ลูกค้า = ลูกค้าใหม่ (ชื่อ, นามสกุล, ที่อยู่, โทรศัพท์, ชื่อผู้ใช้, รหัสผ่าน, วันที่ใหม่ ());
bank.customerMap.put(username, customer);
หากมีการเชื่อมต่อเราจะได้เมนูใหม่พร้อมตัวเลือก วิธีการเดียวกันนี้ใช้งานได้โดยใช้whileและสลับไปใช้ฟังก์ชันการทำงานของแอปพลิเคชันการโทร ขั้นตอนที่ 1: เพิ่มเงินในบัญชีปัจจุบันของคุณ ขั้นตอนที่ 2: แสดง 5 รายการล่าสุด ขั้นตอนที่ 3: เราส่งออกข้อมูลไคลเอนต์จากการ์ดไปยังคอนโซล ขั้นตอนที่ 4: ปิดเมนู ซอร์สโค้ดของโปรแกรมสามารถพบได้ที่นี่ ฉันหวังว่าตัวอย่างนี้จะช่วยให้คุณคุ้นเคยกับการใช้แนวคิด OOP ใน Java มากขึ้น
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION