使用面向對象的方式模擬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("一、輸入密碼  二、退出取卡");
      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("一、查看餘額  二、取款  三、存款  四、退出");
      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("一、繼續  二、返回");
          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("恭喜你存款成功!\n一、繼續取款  二、返回");
              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("恭喜你存款成功!\n一、繼續取款  二、返回");
              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("恭喜你存款成功!\n一、繼續存款  二、返回");
            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);
     }
}
相關文章
相關標籤/搜索