银行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();
	}
}