银行ATM简易程序
要求:农业银行里有 1.查询密码 2.取款 3.支付电话费(此功能只能农行卡才能用)
交互界面为:
请输入密码:
123
密码输入正确!
请输入您的操作:1.查询余额 2.取款 3.支付话费 0.退出
1
你的卡上余额为:5000.0元
请输入您的操作:1.查询余额 2.取款 3.支付话费 0.退出
2
请输入取钱金额:
2500
取钱操作成功!
请输入您的操作:1.查询余额 2.取款 3.支付话费 0.退出
1
你的卡上余额为:2500.0元
请输入您的操作:1.查询余额 2.取款 3.支付话费 0.退出
3
您的卡不是建行卡,不能支付电话费
请输入您的操作:1.查询余额 2.取款 3.支付话费 0.退出 。。。。。。。
方案:
1.定义名为ABCATM的类,表示农行的ATM机系统。
2.在ABCATM类中定义属性card,该属性的类型为UnionPay,表示不同银行的银联卡。
3.在ABCATM类中,定义方法inserdCard,实现向ATM机插入银联卡的操作。
4.在ABCATM类中,定义方法outCard,实现从ATM机取出银联卡的操作。
5.在ABCATM类中,定义方法showBalance,实现查询余额功能,该方法中调用银联接口UnionPay的getBalance方法。
6.在ABCATM类中,定义方法takeMoney,实现取款功能,该方法中调用银联接口UnionPay的drawMoney方法。
7.在ABCATM类中,定义方法payTellBill,实现支付电话费功能,该方法中首先判断插入的银联卡是否为农行卡,如果是农行卡,则调用农行接口ABC中的payTellBill方法,否则提示“你的卡不是农行卡,无法完成缴费”。
8.在ABCATM类中,定义menu方法,实现农行ATM机的菜单。
9.构建测试类,测试农行ATM机所实现的功能
代码如下:
接口和银行卡:
public interface UnionPay {//银联接口
public abstract double getMoney();//查看余额
public abstract boolean drawMoney(double number);//取款
public abstract boolean checkPwd(String pwd);//验证密码
}
/**工行接口*/
interface ICBC extends UnionPay{
public abstract boolean payGassBill(String gasNumber,double number);//在线支付
}
/**银建行接口*/
interface ABC extends UnionPay{
public abstract boolean payTellBill(String phoneNumber,double number);//在线支付
}
/**工行类*/
class ICBCImpl implements ICBC{
private String password;
private double money;
public ICBCImpl(String password,double money){
this.password=password;
this.money=money;
}
@Override
public double getMoney() {
return money;
}
@Override
public boolean drawMoney(double number) {
if(money-number>=0){
money -= number;
return true;
}
return false;
}
@Override
public boolean checkPwd(String pwd) {
if(password.equals(pwd)){
return true;
}
return false;
}
@Override
public boolean payGassBill(String gasNumber,double number) {
if(gasNumber.length()==8 && money-number>=0){
money -= number;
return true;
}
return false;
}
}
/**农行类*/
class ABCImpl implements ABC{
private String password;
private double money;
public ABCImpl(String password,double money){
this.password=password;
this.money=money;
}
@Override
public double getMoney() {
return money;
}
@Override
public boolean drawMoney(double number) {//可以透支2000元
if((money-number) >= -2000){
money -= number;
return true;
}
return false;
}
@Override
public boolean checkPwd(String pwd) {
if(password.equals(pwd)){
return true;
}
return false;
}
@Override
public boolean payTellBill(String phoneNumber,double number) {//可以透支2000元
if(phoneNumber.length()==11 && (money-number)>=-2000){
money -= number;
return true;
}
return false;
}
}
ABCATM类:
import java.util.Scanner;
/**建行的取款机应该有4中功能 1.getMoney 2.drawMoney 3.checkPwd 4.payTellBill(仅限建行卡使用) */
public class ABCATM {
private UnionPay card;
//插卡
public void inserdCard(UnionPay card){
if(this.card==null){
this.card=card;
}
}
//取卡
private void outCard(){
card=null;
}
//查询余额
private void showBalance(){
System.out.println("你的卡上余额为:"+card.getMoney()+"元");
}
//取钱
private void takeMoney(){
Scanner scan =new Scanner(System.in);
System.out.println("请输入取钱金额:");
double number=Double.parseDouble(scan.next());
if(card.drawMoney(number)){
System.out.println("取钱操作成功!");
}else{
System.out.println("金额不足,取钱失败");
}
}
//检查密码
private void payTellBill(){
if(card instanceof ABCImpl){
Scanner scan = new Scanner(System.in);
ABCImpl abc = (ABCImpl)card;
System.out.println("请输入电话号码:");
String pnoneNumber=scan.nextLine();
System.out.println("请输入金额:");
double number=Double.parseDouble(scan.next());
if(abc.payTellBill(pnoneNumber,number)){
System.out.println("支付成功");
}else{
System.out.println("支付失败");
}
}else{
System.out.println("您的卡不是建行卡,不能支付电话费");
}
}
//密码判断
private boolean judgPwd(){
Scanner scan = new Scanner(System.in);
int count=0;
for(;;){
System.out.println("请输入密码:");
String pwd=scan.nextLine();
if(card.checkPwd(pwd)){
System.out.println("密码输入正确!");
return true;
}else{
count++;
}
if(count==3){
System.out.println("密码输入3次错误,退出程序!");
return false;
}
}
}
//显示菜单
public void menu(){
Scanner scan = new Scanner(System.in);
if(judgPwd()){
for(;;){
System.out.println("请输入您的操作:1.查询余额 2.取款 3.支付话费 0.退出 ");
int choice=Integer.parseInt(scan.next());
switch(choice){
case 0:
System.out.println("退出程序!");
this.outCard();
return;
case 1:
showBalance();
break;
case 2:
takeMoney();
break;
case 3:
payTellBill();
break;
default:
System.out.println("非法操作!");
}
}
}else{
this.outCard();
return;
}
}
/**测试主方法*/
public static void main(String[] args) {
UnionPay card = new ICBCImpl("123",5000);
ABCATM atm = new ABCATM();
atm.inserdCard(card);
atm.menu();
}
}