【Java】简单银行案例实现

功能实现

此案例可以实现简单的,银行卡注册,登录,以及登陆后,实现存钱、取钱(可跨银行)、以及存取操作完成后的查询余额功能。

1.定义一个Bank类,需要定义银行卡类型,容量;

    public class Bank {
    private BankCard[]cards;
    private int size;
    //给定银行容量
    private final int INITCAPACITY;
    public Bank(){
        cards = new BankCard[10];
        size = 0;
        INITCAPACITY = 10;
    }
    }

2.定义一个bankCard类,定义id,密码(password),以及存、取的钱数;

    public class BankCard {
    private int id;
    private int passwd;
    private int money;
    public BankCard(int id,int passwd){
        this.id =id;
        this.passwd = passwd;
        this.money = 0;
    }
}

3.定义一个ATM类,这里我们定义两个银行,分别在此类中实现银行卡的注册、登录,以及登录成功后的、取、查询余额的功能;

public class ATM {
    private Bank bankGS;
    private Bank bankNH;

    public ATM() {
        bankGS = new Bank();
        bankNH = new Bank();
    }
    //此类实现登录,注册银行卡功能
    public void operator() {
    }
    //此类实现1.存钱 2.取钱 3.转账 4.查余额 5.退卡 功能
    private void loginSuccessOperator(BankCard card) {
    }

代码实现

    Bank类:

public class Bank {
    private BankCard[]cards;
    private int size;
    //给定银行容量
    private final int INITCAPACITY;
    public Bank(){
        cards = new BankCard[10];
        size = 0;
        INITCAPACITY = 10;
    }
    public BankCard[] getCards(){
        return cards;
    }
    //确保卡容量足够,若不够需要扩容;
    private void ensureCapacity(int capacity){
        if(capacity == cards.length){
            cards = Arrays.copyOf(cards,cards.length+(cards.length>>1));
        }
    }
    public void add(BankCard card){
        ensureCapacity(size);
        cards[size] = card;
        size++;
    }
    public int getSize(){
        return size;
    }
}

    bankCard类:

public class BankCard {
    private int id;
    private int passwd;
    private int money;
    public BankCard(int id,int passwd){
        this.id =id;
        this.passwd = passwd;
        this.money = 0;
    }

    public int getId() {
        return id;
    }
    public int getPasswd() {
        return passwd;
    }
    //定义 存钱 取钱
    public void saveMoney(int money){
        this.money+=money;
    }
    public void withdraw(int money){
        //取钱的数要大于初始数
        if(this.money >= money) {
            this.money -= money;
        }else{
            System.out.println("取钱失败");
        }
    }
    public int getMoney(){
        return money;
    }
}

     ATM类:

public class ATM {
    //定义两个银行 工商  农行
    private Bank bankGS;
    private Bank bankNH;

    public ATM() {
        bankGS = new Bank();
        bankNH = new Bank();
    }
    
    //搜索卡,若找到则返回卡
    private BankCard searchCard(Bank bank, int id, int passwd) {
        BankCard[] arr = bank.getCards();
        for (int i = 0; i < bank.getSize(); i++) {
            if (arr[i].getId() == id && arr[i].getPasswd() == passwd) {
                return arr[i];
            }
        }
        return null;
    }
    
    //登录(在两个银行分别实现登录)
    private BankCard login(String bankName, int id, int passwd) {
        if (bankName.equals("农业银行")) {
            return searchCard(bankNH, id, passwd);
        } else if (bankName.equals("工商银行")) {
            return searchCard(bankGS, id, passwd);
        }
        return null;
    }
    
    //实现注册功能
    private BankCard register(String bankName, int id, int passwd) {
        //是否之前以注册了这张卡,若存在则注册失败
        BankCard card = new BankCard(id, passwd);
        if (bankName.equals("农业银行")) {
            //这里需要用到搜索功能类,查找卡
            BankCard searchCard = searchCard(bankNH, id, passwd);
            if (searchCard != null) {
                System.out.println("注册失败");
                return null;
            }
            bankNH.add(card);
        }
        if (bankName.equals("工商银行")) {
            BankCard searchCard = searchCard(bankGS, id, passwd);
            if (searchCard != null) {
                System.out.println("注册失败");
                return null;
            }
            bankGS.add(card);
        }
        return card;
    }
    
    //操作(登录,注册)
    public void operator() {
        while (true) {
            System.out.println("1.登陆  2.注册  3.退出");
            Scanner scanner = new Scanner(System.in);
            int chioce = scanner.nextInt();
            //退出直接返回
            if (chioce == 3) {
                return;
            }
            System.out.println("请输入银行名:农业银行or工商银行");
            String bankName = scanner.next();
            System.out.println("请输入账号:");
            int id = scanner.nextInt();
            System.out.println("请输入密码:");
            int passwd = scanner.nextInt();
            switch (chioce) {
                case 1:
                    //登录
                    BankCard successCard = login(bankName, id, passwd);
                    if (successCard != null) {
                        //登录成功后的功能
                        loginSuccessOperator(successCard);
                    } else {
                        System.out.println("登陆失败");
                    }
                    break;
                case 2:
                    //注册
                    BankCard card = register(bankName, id, passwd);
                    if (card != null) {
                        System.out.println("注册成功");
                    } else {
                        System.out.println("注册失败");
                    }
                    break;
            }
        }
    }
    
    //登录成功后 实现存、取、转账、查余额功能
    private void loginSuccessOperator(BankCard card) {
        while (true) {
            System.out.println("1.存钱 2.取钱 3.转账 4.查余额 5.退卡");
            Scanner scanner = new Scanner(System.in);
            int chioce = scanner.nextInt();
            //退卡,直接返回
            if (chioce == 5) {
                return;
            }
            switch (chioce) {
                //存钱
                case 1:
                    System.out.println("输入存款金额:");
                    int money = scanner.nextInt();
                    card.saveMoney(money);
                    break;
                //取钱
                case 2:
                    System.out.println("输入取款金额:");
                    money = scanner.nextInt();
                    card.withdraw(money);
                    break;
                //转账
                case 3:
                    transfer(card);
                    break;
                //查询余额
                case 4:
                    System.out.println("当前余额:" + card.getMoney());
                    break;
            }
        }
    }
    
    //实现转账功能
    private void transfer(BankCard card) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入转账银行名:");
        String bankName = scanner.next();
        System.out.println("请输入转账用户id:");
        int id = scanner.nextInt();
        if (bankName.equals("农业银行")) {
            BankCard[] arr = bankNH.getCards();
            //获取转账用户的id,只有找到才实现转账功能
            for (int i = 0; i < bankNH.getSize(); i++) {
                if (arr[i].getId() == id) {
                    System.out.println("转账金额 :");
                    int money = scanner.nextInt();
                    //若转账金额足够,此卡钱减少(取钱),转账的卡钱增加(存钱)
                    if (money <= card.getMoney()) {
                        card.withdraw(money);
                        arr[i].saveMoney(money);
                    } else {
                        System.out.println("转账失败");
                    }
                }
            }
        }
        if (bankName.equals("工商银行")) {
            BankCard[] arr = bankGS.getCards();
            for (int i = 0; i < bankGS.getSize(); i++) {
                if (arr[i].getId() == id) {
                    System.out.println("转账金额:");
                    int money = scanner.nextInt();
                    if (money <= card.getMoney()) {
                        card.withdraw(money);
                        arr[i].saveMoney(money);
                    } else {
                        System.out.println("转账失败");
                    }
                }
            }
        }
    }
}

      测试代码:

public class TestDome {
    public static void main(String[] args) {
        ATM atm = new ATM();
        atm.operator();
    }
}

      运行结果:

这里我们注册了一个农业银行 id为111的卡,给其中存入1000,一个工商银行id为222的卡;111的卡转账580给222的卡 最后的查询余额结果(由于图太长,这里截取一部分)

农业银行 id为111的卡,给其中存入1000,转账580后的余额:

111卡转账后,登录222卡后查询余额 :

 

 

 

银行家算法是一种用于避免死锁的资源分配算法,它通过判断系统是否处于安全状态来决定是否分配资源。下面是一个简单银行家算法案例Java实现: ```java import java.util.Arrays; public class BankersAlgorithm { private int[][] max; // 最大需求矩阵 private int[][] allocation; // 已分配资源矩阵 private int[][] need; // 剩余需求矩阵 private int[] available; // 系统可用资源向量 private int numOfProcesses; // 进程数 private int numOfResources; // 资源种数 public BankersAlgorithm(int[][] max, int[][] allocation, int[] available) { this.max = max; this.allocation = allocation; this.available = available; this.numOfProcesses = allocation.length; this.numOfResources = available.length; // 初始化剩余需求矩阵 this.need = new int[numOfProcesses][numOfResources]; for (int i = 0; i < numOfProcesses; i++) { for (int j = 0; j < numOfResources; j++) { need[i][j] = max[i][j] - allocation[i][j]; } } } public boolean isSafe() { boolean[] finish = new boolean[numOfProcesses]; // 标记进程是否完成 int[] work = Arrays.copyOf(available, numOfResources); // 可用资源向量副本 boolean found; do { found = false; for (int i = 0; i < numOfProcesses; i++) { if (!finish[i] && isNeedLessOrEqual(need[i], work)) { for (int j = 0; j < numOfResources; j++) { work[j] += allocation[i][j]; } finish[i] = true; found = true; } } } while (found); for (boolean f : finish) { if (!f) { return false; // 存在未完成的进程,系统处于不安全状态 } } return true; // 所有进程完成,系统处于安全状态 } private boolean isNeedLessOrEqual(int[] need, int[] work) { for (int i = 0; i < numOfResources; i++) { if (need[i] > work[i]) { return false; } } return true; } public static void main(String[] args) { int[][] max = { {7, 5, 3}, {3, 2, 2}, {9, 0, 2}, {2, 2, 2}, {4, 3, 3} }; int[][] allocation = { {0, 1, 0}, {2, 0, 0}, {3, 0, 2}, {2, 1, 1}, {0, 0, 2} }; int[] available = {3, 3, 2}; BankersAlgorithm bankersAlgorithm = new BankersAlgorithm(max, allocation, available); boolean isSafe = bankersAlgorithm.isSafe(); System.out.println("Is the system safe? " + isSafe); } } ``` 在这个例子中,我们定义了一个`BankersAlgorithm`实现银行家算法。在构造函数中,我们接受三个输入参数:最大需求矩阵`max`、已分配资源矩阵`allocation`和系统可用资源向量`available`。然后,我们根据这些输入参数初始化剩余需求矩阵`need`。 接下来,我们实现了`isSafe()`方法来判断系统是否处于安全状态。我们使用了一个`finish`数组来标记进程是否完成,一个`work`数组来表示可用资源向量的副本。然后,我们使用一个循环来遍历所有进程,并检查其剩余需求是否小于等于可用资源。如果是,则将该进程标记为完成,并增加可用资源。重复这个过程直到找不到需要满足的进程。 最后,在`main()`方法中,我们提供了一个简单的示例来演示如何使用银行家算法。我们定义了一个最大需求矩阵`max`、已分配资源矩阵`allocation`和系统可用资源向量`available`。然后,我们创建一个`BankersAlgorithm`对象,并调用`isSafe()`方法来判断系统是否处于安全状态,并输出结果。 请注意,这只是一个简单的示例,实际使用时需要根据具体的需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值