Java学习:用接口简单实现银行卡系统

  • A+
所属分类:后端开发

Java学习:用接口简单实现银行卡系统

用前面所知案例,简单实现一个银行卡系统。涉及的Java知识有:

interface(接口),abstract(抽象修饰符),extends(继承),implements(接口的实现),@Override(重写)

 

案例具体要求:

要求实现银行卡系统的银联接口

  1. 银联接口,用于描述银联统一制定的规则,该接口提供检测密码方法、取钱方法以及查询余额方法。
  2. 工商银行接口,用于描述工商银行发行的卡片功能,在满足银联接口的规则基础上,增加了在线支付功能。
  3. 农业银行接口,用于描述中国农业银行发行的卡片功能,在满足银联接口的规则基础上,增加了支付电话费的功能。另外,农行的卡的卡内余额,允许最多透支2000。
  4. 实现工商银行接口和农业银行接口,并进行测试。

 

代码如下:

package cn.oopinterface.atm;
/**
 * 银联接口,用于描述银联统一制定的规则,该接口提供检测密码方法、取钱方法以及查询余额方法。
 * @author yflad-F
 */
public interface Union {
	//检测密码方法, 密码为boolean类型
	public abstract boolean checkPassword(int password);
	//取钱方法
	public abstract boolean takeMoney(double money);
	//查询余额方法
	public abstract double balance();
}

 

package cn.oopinterface.atm;
/**
 * 2. 工商银行接口,用于描述工商银行发行的卡片功能,在满足银联接口的规则基础上,增加了在线支付功能。
 * @author yflad-F
 */
public interface ICBC extends Union{
//在线支付
public abstract boolean onlinPay(double money);

}

 

package cn.oopinterface.atm;
/**
 * 3. 农业银行接口,用于描述中国农业银行发行的卡片功能,在满足银联接口的规则基础上,
 *	增加了支付电话费的功能。另外,农行的卡的卡内余额,允许最多透支2000。
 * @author yflad-F
 */
public interface ABC extends Union{
	//电话费
	public abstract boolean phonePay(String tellno, double money);
	//信用额度
	public abstract boolean credit(double money);
}

 

接口的实现

package cn.oopinterface.atm;
/**
 *	工商银行的实现类
 * @author yflad-F
 */
public class ICBCImpl implements ICBC{
	double money=2000;  //卡里的本金
	
	@Override
	public boolean checkPassword(int password) { //检测密码方法
		if (password==123456) {
			return true;
		}
		return false;
	}

	@Override
	public boolean takeMoney(double money) {  //取钱方法
		//取出来的钱应该小于等于本金
		if (this.money>=money) {
			this.money-=money;
			return true;
		}
		return false;
	}

	@Override
	public double balance() {  //查询余额方法
		return money;
	}

	@Override
	public boolean onlinPay(double money) {  //在线支付
		// 支付的金额应该小于等于剩余的钱
		if (this.money>=money) {
			this.money-=money;
			return true;
		}
		return false;
	}

}

 

 

package cn.oopinterface.atm;
/**
 *	农业银行的实现类
 * @author yflad-F
 */
public class ABCImpl implements ABC{
	double money = 2000;
	@Override
	public boolean checkPassword(int password) { //检测密码方法
		if (password==123456) {
			return true;
		}
		return false;
	}

	@Override
	public boolean takeMoney(double money) {  //取钱方法
		//取出来的钱应该小于等于本金
		if (this.money+2000>=money) {
			this.money-=money;
			return true;
		}
		return false;
	}

	@Override
	public double balance() {  //查询余额方法
		return money;
	}

	@Override
	public boolean phonePay(String tellno, double money) {	//电话费
		if (this.money+2000>=money) {
			this.money-=money;
			return true;
		}else {
			System.out.println("电话号码错误!请重新输入:");
		}
		return false;
	}

	@Override
	public boolean credit(double money) {	//信用额度
		if (this.money+2000>=money) {
			this.money-=money;
			return true;
		}
		return false;
	}
}

 

测试

package cn.oopinterface.atm;

import java.util.Scanner;
/**
 *  工商银行测试
 * @author yflad-F
 */
public class ICBCTest {
	public static void main(String[] args) {
		ICBC icbc = new ICBCImpl();
		Scanner sc = new Scanner(System.in);
		for (int i = 1; i <= 3; i++) {
			System.out.println("请输入银行卡密码:");
			int pwd = sc.nextInt();
			if (icbc.checkPassword(pwd)) {
				while (true) {
					System.out.println("1.查询余额 2.取出金额 3.在线支付 4.退出系统");
					int type = sc.nextInt();
					if (type == 1) {
						System.out.println("余额:"+icbc.balance()+" 元");
					}
					if (type == 2) {
						System.out.println("请输入你要取出的金额:");
						double m=sc.nextDouble();
						if (icbc.takeMoney(m)) {
							System.out.println("提现成功!");
							System.out.println("余额为:"+icbc.balance());
						}else {
							System.out.println("余额不足!");
						}
					}
					if (type == 3) {
						System.out.println("请输入你要付款的金额:");
						double m=sc.nextDouble();
						if (icbc.onlinPay(m)) {
							System.out.println("付款成功!");
							System.out.println("余额为:"+icbc.balance()+" 元");
						}else {
							System.out.println("余额不足!");
						}
					}
					if (type == 4) {
						System.out.println("退出系统成功!");
						break;
					}
				}
				break;
			} else {
				if (i == 3) {
					System.out.println("密码错误次数超过三次,卡已锁定!");
					break;
				}
				System.out.println("密码错误,请重新输入!");
			}
		}
	}
}

 

package cn.oopinterface.atm;

import java.util.Scanner;
/**
 * 农业银行测试
 * @author yflad-F
 */
public class ABCTest {
	public static void main(String[] args) {
		ABC abc = new ABCImpl();
		Scanner sc = new Scanner(System.in);
		for (int i = 1; i <= 3; i++) {
			System.out.println("请输入银行卡密码:");
			int pwd = sc.nextInt();
			if (abc.checkPassword(pwd)) {
				while (true) {
					System.out.println("1.查询余额 2.取出金额 3.缴电话费 4.退出系统");
					int type = sc.nextInt();
					if (type == 1) {
						System.out.println("余额:" + abc.balance() + " 元");
					}
					if (type == 2) {
						System.out.println("请输入你要取出的金额:");
						double m = sc.nextDouble();
						if (abc.takeMoney(m)) {
							System.out.println("提现成功!");
							System.out.println("余额为:" + abc.balance());
						} else {
							System.out.println("余额不足!");
						}
					}
					if (type == 3) {
						System.out.println("请输入你要充值的号码:");
						String phone = sc.next();
						// 判断电话号码长度是否为11位
						if (phone.length() == 11) {
							// 进入到这说明可以充值
							System.out.println("请输入充值金额:");
							double money = sc.nextDouble();
							if (abc.phonePay(phone, money)) {
								System.out.println("支付成功!");
								System.out.println("余额为:" + abc.balance());
							} else {
								System.out.println("余额不足!");
							}
							break;
						} else {
						}
						System.out.println("电话号码错误,请重新缴费!");
					}
					if (type == 4) {
						System.out.println("退出系统成功!");
						break;
					}
				}
				break;
			} else {
				if (i == 3) {
					System.out.println("密码错误次数超过三次,卡已锁定!");
					break;
				}
				System.out.println("密码错误,请重新输入!");
			}
		}
	}
}

 

  • 扫扫关注公众号
  • weinxin
  • 扫扫体验小程序
  • weinxin
亦枫

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: