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

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 BankCard
 {
   //卡号
   BigInteger bankCardNum;
   //金额
   int money;
   //密码
   int PassWord;
   //是否是工商卡  false=不是  true=是
   boolean isGSBank;
   //是否被冻结  false=没有 true=被冻结
   boolean isFro;
 }
 public class Human
{
  // 姓名
  String name;
  // 银行卡
 BankCard bankCard;
}
 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);
     }
}

转载于:https://my.oschina.net/u/2563735/blog/551619

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值