使用面向对象的方式模拟TOM使用ATM进行存取款的操作

工商ATM自动存取款机功能如下:

插入银行卡显示主界面:
输入密码
退出取卡
密码输入3次冻结改银行卡,改卡将无法继续使用
输入正确显示菜单:
查看余额
取款
存款

查看余额显示当前银行卡的现金数额
取款要求输入取款金额,额度最小50,单笔取款金额不能超过2000元,如果现金不够则提示余额不足;取款成功打印取款凭条
存款要求输入存款金额,额度最小为50,如果该ATM的存款总额度达到了50W元则提示无法继续存款。存款成功打印存款凭条

注:如果插入银行卡不是工商卡则每笔取款交易根据金额收取3%的手续费
public class Human
{
// 姓名
String name;
// 银行卡
BankCard bankCard;

}

import java.math.BigInteger;
public class BankCard
{
//卡号
BigInteger bankCardNum;
//金额
int money;
//密码
int PassWord;
//是否是工商卡 false=不是 true=是
boolean isGSBank;
//是否被冻结 false=没有 true=被冻结
boolean isFro;
}
package homework1225;

import java.util.Date;
import java.util.Scanner;

public class Atm
{
//
BankCard bankCard;
//
Human human;
// 银行存款金额
int cash;
// 键盘录入对象
Scanner input = new Scanner(System.in);

    /*
     * ATM的方法
     */
    // 插卡
    public void pushCard(BankCard bankCard, Human human)
        {
            // 判断是否被冻结
            if (bankCard.isFro == false)
                {
                    System.out.println("--------欢迎光临工商银行ATM系统----------");
                    System.out.println("请选择操作:");
                    System.out.println("1、输入密码      2、退出取卡");
                    System.out.println("温馨提示:密码输入3次冻结改银行卡,改卡将无法继续使用!!!");
                    int chose = input.nextInt();
                    switch (chose)
                        {
                        case 1:
                            // 调用密码验证的方法
                            passWord(bankCard, human);
                            break;
                        case 2:
                            // 调用退出方法
                            exitCard();
                            break;
                        default:
                            System.out.println("输入的指令有误");
                            break;
                        }
                } else
                {
                    System.out.println("对不起,您的卡被冻结,请联系发卡银行!");
                }
        }

    // 显示的菜单
    public void trueMenu(BankCard bankCard, Human human)
        {
            while (true)
                {
                    System.out.println("1、查看余额      2、取款        3、存款        4、退出");
                    System.out.println("------------------------------------------");
                    int chose = input.nextInt();
                    switch (chose)
                        {
                        /*
                         * 查看余额
                         */
                        case 1:
                            // 调用查看余额的方法
                            balance(bankCard, human);
                            break;
                        /*
                         * 取款
                         */
                        case 2:
                            // 需要判断银行卡是否是工商卡
                            if (bankCard.isGSBank == true)
                                {
                                    // 定义一个变量接受 取款方法返回的 取款总数
                                    int get = getMoney(bankCard, human);
                                    // 带入3个参数 使用打印凭证的方法
                                    printGetData(bankCard, human, get);
                                } else
                                {
                                    System.out.println("温馨提醒:你的卡为非本行卡,取款将收取3%的手续费!!!");
                                    System.out.println("1、继续        2、返回");
                                    int chose1 = input.nextInt();
                                    if (chose1 == 1)
                                        {
                                            int get = getMoneyFalse(bankCard, human);
                                            printGetData(bankCard, human, get);
                                        } else if (chose1 == 2)
                                        {
                                            break;
                                        }
                                }
                            break;
                        /*
                         * 存款
                         */
                        case 3:
                            if (bankCard.isGSBank == true)
                                {
                                    int get = saveMoney(bankCard, human);
                                    printSaveData(bankCard, human, get);
                                } else
                                {
                                    System.out.println("很抱歉,非本行卡无法进行存款操作!");
                                }
                            break;
                        case 4:
                            exitCard();
                            break;
                        default:
                            System.out.println("操作指令错误!");
                            break;
                        }
                }
        }

    // 验证密码
    public void passWord(BankCard bankCard, Human human)
        {
            // 顶一个变量接受 错误的次数
            int count = 0;
            while (count < 3)
                {
                    System.out.println("请输入密码:");
                    int pswd = input.nextInt();
                    if (bankCard.PassWord == pswd)
                        {
                            System.out.println("密码输入正确!请选择继续操作:");
                            trueMenu(bankCard, human);
                        } else
                        {
                            count++;
                            System.out.println("您输入的密码有误,请重新输入!");
                        }
                }

            System.out.println("您输入的密码错误次数超过3次,此卡将被冻结!");
            bankCard.isFro = true;
            exitCard();
        }

    // 退出取卡
    public void exitCard()
        {
            System.out.println("操作结束,请取卡!");
            System.exit(0);
        }

    // 打印取款凭条的方法
    public void printGetData(BankCard bankCard, Human human, int get)
        {
            // 是否打印凭条
            System.out.println("是否打印凭条?Y/N");
            String choose = input.next();
            if (choose.equals("y"))
                {
                    System.out.println("*******打印凭条信息如下:***********");
                    // 打印用户名:
                    System.out.println("账户名:" + human.name);
                    // 打印卡号信息
                    System.out.println("账户卡号:" + bankCard.bankCardNum);
                    // 根据不同的银行卡
                    if (bankCard.isGSBank == true)
                        {
                            // 打印取款金额
                            System.out.println("本次取款金额为:" + get);
                        } else
                        {
                            // 打印取款金额
                            System.out.println("本次取款金额为:" + get);
                        }
                    // 打印操作的时间
                    @SuppressWarnings("deprecation")
                    String time = new Date().toLocaleString();
                    System.out.println("操作时间为:" + time);
                    System.out.println("********************************************");
                } else
                {
                    trueMenu(bankCard, human);
                }
        }

    // 打印存款凭条的方法
    public void printSaveData(BankCard bankCard, Human human, int get)
        {
            // 是否打印凭条
            System.out.println("是否打印凭条?Y/N");
            String choose = input.next();
            if (choose.equals("y"))
                {
                    System.out.println("*******打印凭条信息如下:******************");
                    // 打印用户名:
                    System.out.println("账户名:" + human.name);
                    // 打印卡号信息
                    System.out.println("账户卡号:" + bankCard.bankCardNum);
                    // 打印取款金额
                    System.out.println("本次存款金额为:" + get);
                    // 打印操作的时间
                    @SuppressWarnings("deprecation")
                    String time = new Date().toLocaleString();
                    System.out.println("操作时间为:" + time);
                    System.out.println("********************************************");
                } else
                {
                    trueMenu(bankCard, human);
                }
        }

    /**
     * 取款
     * 
     * @param bankCard
     */
    // 本行卡取款方法
    public int getMoney(BankCard bankCard, Human human)
        {
            // 定义一个变量 用来返回 每次交易 的总额
            int sumMoney = 0;
            while (true)
                {
                    System.out.println("请输入取款金额(50--2000):");
                    // 定义一个取款金额变量
                    int getNum = input.nextInt();
                    // 判断 取款金额是否大于 账户余额
                    if (getNum <= bankCard.money)
                        {
                            // 判断ATM剩余金额
                            if (cash > getNum)
                                {
                                    // 判断单笔金额是否大于2000
                                    if (getNum <= 2000)
                                        {
                                            // 判断单笔金额是否小于50
                                            if (getNum >= 50)
                                                {
                                                    // 计算账户剩余余额
                                                    bankCard.money -= getNum;
                                                    sumMoney += getNum;
                                                    // 计算ATM剩余金额
                                                    cash -= getNum;
                                                    // 取款结束 显示账户余额
                                                    balance(bankCard, human);
                                                    System.out.println("恭喜你存款成功!\n1、继续取款        2、返回");
                                                    int chose = input.nextInt();
                                                    if (chose == 1)
                                                        {
                                                            continue;
                                                        } else if (chose == 2)
                                                        {
                                                            break;
                                                        }
                                                } else
                                                {
                                                    System.out.println("对不起,单笔金额不能低于50!请重新输入:");
                                                }
                                        } else
                                        {
                                            System.out.println("对不起,单笔金额不能超过2000!请重新输入:");
                                        }
                                } else
                                {
                                    System.out.println("对不起,ATM余额不足!");
                                    break;
                                }
                        } else
                        {
                            System.out.println("您的账户不足以支付本次取款!");
                            break;
                        }
                }
            return sumMoney;
        }

    // 定义一个非本行卡的取款计算方法
    public int getMoneyFalse(BankCard bankCard, Human human)
        {
            int sumMoney = 0;
            while (true)
                {
                    System.out.println("请输入取款金额(50--2000):");
                    // 定义一个取款金额变量
                    int getNum = input.nextInt();
                    // 判断 取款金额是否大于 账户余额
                    if (getNum <= bankCard.money)
                        {
                            // 判断ATM剩余金额
                            if (cash > getNum)
                                {
                                    // 判断单笔金额是否大于2000
                                    if (getNum <= 2000)
                                        {
                                            // 判断单笔金额是否小于50
                                            if (getNum >= 50)
                                                {
                                                    // 计算账户剩余余额
                                                    bankCard.money -= (getNum + getNum * 0.03);
                                                    // 计算ATM剩余金额
                                                    cash -= getNum;
                                                    // 取款结束
                                                    sumMoney += getNum;
                                                    // 显示账户余额
                                                    balance(bankCard, human);
                                                    System.out.println("恭喜你存款成功!\n1、继续取款        2、返回");
                                                    int chose1 = input.nextInt();
                                                    if (chose1 == 1)
                                                        {
                                                            continue;
                                                        } else if (chose1 == 2)
                                                        {
                                                            break;
                                                        }
                                                } else
                                                {
                                                    System.out.println("对不起,单笔金额不能低于50!请重新输入:");
                                                }
                                        } else
                                        {
                                            System.out.println("对不起,单笔金额不能超过2000!请重新输入:");
                                        }
                                } else
                                {
                                    System.out.println("对不起,ATM余额不足!");
                                    break;
                                }
                        } else
                        {
                            System.out.println("您的账户不足以支付本次取款!");
                            break;
                        }
                }
            return sumMoney;
        }

    /**
     * 存款
     * 
     * @param bankCard
     * @param human
     * @return
     */
    public int saveMoney(BankCard bankCard, Human human)
        {
            int sumMoney = 0;
            while (true)
                {
                    // 判断ATM是否已满50万
                    if (cash < 500000)
                        {
                            System.out.println("请输入你的存款金额(最少为50,为50的倍数):");
                            // 定义一个存款金额变量
                            int save = input.nextInt();
                            if (save % 50 == 0)
                                {
                                    if (save >= 50 && save <= 5000)
                                        {
                                            // 计算账户剩余余额
                                            bankCard.money += save;
                                            // 计算ATM剩余金额
                                            cash += save;
                                            // 取款结束
                                            sumMoney += save;
                                            // 显示账户余额
                                            balance(bankCard, human);
                                            System.out.println("恭喜你存款成功!\n1、继续存款        2、返回");
                                            int chose1 = input.nextInt();
                                            if (chose1 == 1)
                                                {
                                                    continue;
                                                } else if (chose1 == 2)
                                                {
                                                    break;
                                                }
                                        } else
                                        {
                                            System.out.println("存款金额范围:50~~5000");
                                        }
                                } else
                                {
                                    System.out.println("请输入50的倍数的存款金额!");
                                }
                        } else
                        {
                            System.out.println("对不起,ATM已满,无法继续存款:");
                            break;
                        }
                }
            return sumMoney;
        }

    // 查看余额
    public void balance(BankCard bankCard, Human human)
        {
            System.out.println("您目前的账户余额:" + bankCard.money);
        }

    // 个人取款
    public void startATM(BankCard bankCard, Human human)
        {
            pushCard(bankCard, human);
        }
}

import java.math.BigInteger;
public class BankTest
{

    public static void main(String[] args)
        {
                    Atm atm = new Atm();
                    atm.cash =400000;
                    BankCard bc = new BankCard();
                    Human hm = new Human();
                    hm.name = "Tom";
                    bc.bankCardNum =new BigInteger("62284804082487669876");
                    bc.isGSBank = true;
                    bc.isFro = false;
                    bc.PassWord = 123456;
                    bc.money = 5000;
                    atm.startATM(bc, hm);
                }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值