Java ATM模拟

前言

随着科技的进步,ATM(自动取款机)已经成为了我们日常生活中不可或缺的一部分。ATM机的出现极大地方便了人们的生活,使得我们能够更加方便地进行金融交易,如取款、存款、转账等等。然而,ATM机是如何工作的呢?在本文中,我们将探讨如何使用Java语言模拟ATM机的运行过程。

ATM机的工作原理

在深入了解如何模拟ATM机之前,我们首先需要了解ATM机的工作原理。ATM机主要包括以下几个部分:

  1. 读卡器:用于读取用户银行卡上的信息。
  2. 密码键盘:用于用户输入密码。
  3. 屏幕:用于显示交易信息和操作提示。
  4. 金额键盘:用于用户输入金额。
  5. 凭条打印机:用于打印交易凭条。
  6. 存取款口:用于存取现金。

ATM机的基本工作流程如下:

  1. 用户插入银行卡。
  2. ATM机通过读卡器读取银行卡上的信息。
  3. 用户输入密码。
  4. ATM机验证密码的正确性。
  5. 用户选择需要进行的操作,如取款、存款、转账等等。
  6. ATM机根据用户选择的操作类型进行相应的处理。
  7. ATM机更新用户的账户信息。
  8. ATM机输出交易结果。
  9. 用户取走交易凭条和现金。

使用Java模拟ATM机

为了模拟ATM机的运行过程,我们需要创建几个关键的类,如ATM类、Bank类、Card类等等。下面是这些类的详细代码示例:

Card类

public class Card {
    private String cardNumber; // 银行卡号
    private String pin; // 密码
    private double balance; // 余额

    public Card(String cardNumber, String pin, double balance) {
        this.cardNumber = cardNumber;
        this.pin = pin;
        this.balance = balance;
    }

    public String getCardNumber() {
        return cardNumber;
    }

    public void setCardNumber(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    public String getPin() {
        return pin;
    }

    public void setPin(String pin) {
        this.pin = pin;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}

Bank类

import java.util.HashMap;
import java.util.Map;

public class Bank {
    private Map<String, Card> cardMap; // 银行卡号到银行卡对象的映射

    public Bank() {
        cardMap = new HashMap<>();
    }

    public void addCard(Card card) {
        cardMap.put(card.getCardNumber(), card);
    }

    public Card getCard(String cardNumber) {
        return cardMap.get(cardNumber);
    }
}

ATM类

import java.util.Scanner;

public class ATM {
    private Bank bank;

    public ATM(Bank bank) {
        this.bank = bank;
    }

    public void run() {
        Scanner scanner = new Scanner(System.in);

        // 插入银行卡
        System.out.print("请插入银行卡:");
        String cardNumber = scanner.nextLine();
        Card card = bank.getCard(cardNumber);

        if (card == null) {
            System.out.println("银行卡不存在");
            return;
        }

        // 输入密码
        System.out.print("请输入密码:");
        String pin = scanner.nextLine();

        if (!card.getPin().equals(pin)) {
            System.out.println("密码错误");
            return;
        }

        // 选择操作
        System.out.println("请选择操作类型:");
        System.out.println("1. 取款");
        System.out.println("2. 存款");
        System.out.println("3. 查询余额");
        int choice = scanner.nextInt();

        switch (choice) {
            case 1:
                System.out.print("请输入取款金额:");
                double withdrawalAmount = scanner.nextDouble();
                if (withdrawalAmount > card.getBalance()) {
                    System.out.println("余额不足");
                    return;
                }
                card.setBalance(card.getBalance() - withdrawalAmount);
                System.out