使用面向对象的方式模拟TOM使用ATM进行存取款的操作
2015-12-27 00:00
387 查看
摘要: 工商ATM自动存取款机功能如下:
插入银行卡显示主界面:
输入密码
退出取卡
密码输入3次冻结改银行卡,改卡将无法继续使用
输入正确显示菜单:
查看余额
取款
存款
查看余额显示当前银行卡的现金数额
取款要求输入取款金额,额度最小50,单笔取款金额不能超过2000元,如果现金不够则提示余额不足;取款成功打印取款凭条
存款要求输入存款金额,额度最小为50,如果该ATM的存款总额度达到了50W元则提示无法继续存款。存款成功打印存款凭条
注:如果插入银行卡不是工商卡则每笔取款交易根据金额收取3%的手续费
插入银行卡显示主界面:
输入密码
退出取卡
密码输入3次冻结改银行卡,改卡将无法继续使用
输入正确显示菜单:
查看余额
取款
存款
查看余额显示当前银行卡的现金数额
取款要求输入取款金额,额度最小50,单笔取款金额不能超过2000元,如果现金不够则提示余额不足;取款成功打印取款凭条
存款要求输入存款金额,额度最小为50,如果该ATM的存款总额度达到了50W元则提示无法继续存款。存款成功打印存款凭条
注:如果插入银行卡不是工商卡则每笔取款交易根据金额收取3%的手续费
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("对不起,您的卡被冻结,请联系发卡银行!"); & 3ff0 nbsp; } } // 显示的菜单 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)   3ff0 ; { // 判断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); } }
相关文章推荐
- nodejs认证模块passport.js参数解释
- 【嘉兴东臣php】DOM、BOM、Ajax
- 3.9分区表fstab
- 1.1vim介绍
- 1.2 vim一般模式下光标移动
- 1.3vim一般模式下复制剪切粘贴
- 1.5vim命令行模式
- 1.6 gzip 讲解
- 1.7 bzip2 讲解
- 1.8 zip和unzip
- 1.9 xz压缩和解压缩
- jQuery on() 绑定无效的解决办法
- 借助云盘搭建SVN服务器
- Linux C中struct tm结构与time_t相互转换
- 谈谈angularjs中$watch,$apply,$digest
- 【ActiveMQ教程】点对点(Point-to-Point)消息教程
- 【ActiveMQ教程】发布/订阅(Publish/Subscribe)消息教程
- JAVA基础----函数
- NTP服务器的使用
- 十个免费的WEB压力测试工具