您的位置:首页 > 其它

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

2015-12-27 00:37 393 查看
工商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().toLocaleStr
c9a5
ing();
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);
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息