模拟使用银行卡缴费
需求整理
- 定义类: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
- 定义类:BOC 子类
- public BOC(String id, double balance, int pw)
构造方法传值
-
定义接口:PayTelInter
boolean payTel(int money) lambda表达式
定义抽象方法,开通交电话费的功能 -
定义类: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( );
- 定义入口类: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 );*/
}
}