javaSE_day09 学习笔记01 —— 模拟使用银行卡缴费

模拟使用银行卡缴费

需求整理

  1. 定义类:UnionCard 父类
  • 成员变量:
    private String id;//卡号
    private double balance;//余额
    private int pw;//密码
  • 方法:
    (1) public UnionCard(String id, double balance, int pw)
    功能:初始化成员变量
    (2) setXX/getXX方法
    (3) public void saveMoney(int money) 存钱的方法
    (4) public boolean takeMoney(int money)
    取钱的方法,如果余额为<0,返回false,否则返回true
    (5) public boolean checkPw(int pw)
    验证密码是否相同,相同返回true,否则返回false
  1. 定义类:BOC 子类
  • public BOC(String id, double balance, int pw)
    构造方法传值
  1. 定义接口:PayTelInter
    boolean payTel(int money) lambda表达式
    定义抽象方法,开通交电话费的功能

  2. 定义类:ATM

  • 成员变量:
    private UnionCard card;
  • 方法:
    (1) public void insertCard(UnionCard card)
    模拟插卡的功能,不同卡片显示不同的menu
    (2) public void showBocMenu()
    //如果密码正确,显示显示中国银行的菜单,否则显示密码错误,退出系统
    1 查看余额 2存钱 3取钱 4 交话费 5退出
    (3) private void showBalance();
    显示余额
    输入1时,调用此方法,显示余额;控制台,显示输入0 返回
    (4) private void saveBalance();
    完成存钱的功能,并输出成功
    输入2时,调用此方法;控制台,显示输入0 返回
    (5) private void takeBalance()
    完成取钱的功能,如果满足取钱的条件,显示成功,否则显示失败!!!,余额不足
    输入3时,调用此方法;控制台,显示输入0 返回
    (6) private void payMethod()
    完成交话费的功能,使用lambda表达式完成,如果满足交话费的条件,显示缴费成功!!!
    否则显示失败!!!,余额不足
    输入4时,调用此方法;控制台,显示输入0 返回
    (7) 输入5是,退出 system.exit( );
  1. 定义入口类:MainClass
    main方法: new ATM().insertCard(new BOC( , , ) );

代码

package cn.tedu.demo;
/**
 *  银联卡
 *  三个变量
 *  初始化成员变量
 *  get  set
 *  存钱
 *  取钱
 *  验证密码
 * @author Dell *
 */
public class UnionCard {
	private String id;//卡号
	private double balance;//余额
	private int pw;//密码

	//功能:初始化成员变量
	public UnionCard(String id, double balance, int pw) {
		this.id = id;
		this.balance = balance;
		this.pw = pw;
	}
     
    public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	public int getPw() {
		return pw;
	}

	public void setPw(int pw) {
		this.pw = pw;
	}

	//存钱
    public void saveMoney(int money) {
    	balance += money;
    }
    
	//取钱的方法,如果余额为<0,返回false,否则返回true
    public boolean takeMoney(int money) {
    	if (money<=balance) {
    		balance -=  money;
			return true;
		}else  return false;
    }
     
    //验证密码是否相同,相同返回true,否则返回false
    public boolean checkPw(int pw) {
    	if (this.pw == pw) {  //对象里的密码 == 控制台输入的密码
			return true;
		}else return false;
    }
}
package cn.tedu.demo;
/**
 * 中国银行  继承银联卡 * 
 * @author Dell *
 */
public class BOC extends UnionCard {
	public BOC(String id, double balance, int pw) {
		super(id, balance, pw);
	}	
}
package cn.tedu.demo;

public interface PayTelInter {
	 boolean payTel(int money);  //省略了public abstract
}

package cn.tedu.demo;
/**
 * ATM
 */
import java.util.Scanner;

public class ATM {
	private UnionCard card;
	
	//模拟插卡的功能,不同卡片显示不同的menu
	public void insertCard(UnionCard card) {
		this.card = card;
		if (card instanceof BOC) {
			showBocMenu();
		}		
	}
	       
	//如果密码正确,显示显示中国银行的菜单,否则显示密码错误,退出系统
    //1 查看余额  2存钱  3取钱 4 交话费 5退出
	public void showBocMenu() {
		System.out.println("请输入密码:");
		Scanner scanner = new Scanner(System.in) ;
		int pw = scanner.nextInt();
		if(card.checkPw(pw)==true) {
			System.out.println("1.查看余额");
			System.out.println("2.存钱");
			System.out.println("3.取钱");
			System.out.println("4.交话费");
			System.out.println("5.退出");
			while(true) {                                
				System.out.println("选择功能:");
				int num = scanner.nextInt();
				switch (num) {
				case 1:
					showBalance();
					System.out.println("输入0,返回");
					int n = scanner.nextInt();
					if(n == 0)
						break;
					break;
				case 2:
					saveBalance();
					 System.out.println("输入0,返回");
					 n = scanner.nextInt();
						if(n == 0)
							break;
					break;
				case 3:
					takeBalance();
					System.out.println("输入0,返回");
					 n = scanner.nextInt();
						if(n == 0)
							break;
					break;
				case 4:
					payMethod();
					System.out.println("输入0,返回");
					 n = scanner.nextInt();
						if(n == 0)
							break;
					break;
				case 5:
					System.exit(0);
				}
			}
			
		}else {
			System.out.println("密码错误");
		}		
	}
	 
	
	//显示余额
    //输入1时,调用此方法,显示余额;控制台,显示输入0 返回
	private void showBalance() {		
		System.out.println("余额:"+card.getBalance());
	}
	        
	//完成存钱的功能,并输出成功
    //输入2时,调用此方法;控制台,显示输入0 返回
	 private void saveBalance() {
		 System.out.println("请输入金额:");
		 Scanner scanner = new Scanner(System.in);
		 int money = scanner.nextInt();
		 card.saveMoney(money);
		 System.out.println("存钱成功,余额为"+card.getBalance());
	 }
	        
	 //完成取钱的功能,如果满足取钱的条件,显示成功,否则显示失败!!!,余额不足
     //输入3时,调用此方法;控制台,显示输入0 返回
	 private void takeBalance() {
		 System.out.println("请输入金额:");
		 Scanner scanner = new Scanner(System.in);
		 int money = scanner.nextInt();
		/* if(money > card.getBalance()){
				System.out.println("余额不足!");
			}else{
				card.takeMoney(money) ;
				System.out.println("取款" + money + "元\r\n当前余额:" + card.getBalance());
			}*/
		 if (card.takeMoney(money)) {
			System.out.println("成功取款" + money + "元\r\n当前余额:" + card.getBalance());
		}else {
			System.out.println("余额不足!");
		}
	 }
	   
	 // 完成交话费的功能,使用lambda表达式完成,如果满足交话费的条件,显示缴费成功!!!
     //  否则显示失败!!!,余额不足
     //  输入4时,调用此方法;控制台,显示输入0 返回
	 private void payMethod() {
		 System.out.println("请输入金额:");
		 Scanner scanner = new Scanner(System.in);
		 int m = scanner.nextInt();
		 PayTelInter inter = money -> {			
			 return card.takeMoney(m) ;				
		 };
		 if(inter.payTel(m)) {
			 System.out.println("成功充值" +m+ "元!\r\n当前余额:" + card.getBalance());
		 }else { System.out.println("失败,余额不足!当前余额:" + card.getBalance());}
	 }
}
package cn.tedu.demo;

public class MainClass {
	public static void main(String[] args) {
		new ATM().insertCard(new BOC("01",0 ,123 ) );
		/*ATM atm = new ATM();
		UnionCard card = new BOC("01", 0, 123);
		atm.insertCard(card );*/		
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值