简单练习2

本文介绍了一个简单的ATM系统模拟程序,包括基本流程、存取款功能及不同银行的特色服务。通过具体代码实现展示了面向对象设计及接口回调的应用。

练习2:ATM简单流程

逻辑不难,重点在于匿名类的使用和 lambda表达式的应用,另外一定要谨记,写程序要一个功能块一个功能块完成,虽然一个类一个类完成在编写时比较顺,但在逻辑上不好,在出bug回查时也比较麻烦
类图:
在这里插入图片描述

1.基本流程

1.插卡
2.输入密码(验证)
3.根据卡(创建的对象),自动进入不同银行卡的界面
4.基础功能有:1.存钱 2.取钱 3.验证密码
5.BOC第三项改为充话费
6.ICBC第三项改为充水电费

2.自己的代码

public abstract class UnionCard {
	public String cardId;
	public int balance;
	public int pw;	
	public UnionCard() {		
	}
	public UnionCard(String cardId, int balance, int pw) {
		
		this.cardId = cardId;
		this.balance = balance;
		this.pw = pw;
	}
	public String getCardId() {
		return cardId;
	}
	public void setCardId(String cardId) {
		this.cardId = cardId;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(int balance) {
		this.balance = balance;
	}
	public int getPw() {
		return pw;
	}
	public void setPw(int pw) {
		this.pw = pw;
	}
	
	public void saveMoney(int sm){
		balance=balance+sm;
		System.out.println("您现在的余额为"+balance);
		
	}
	public void takeMoney(int tm){
		if(balance>=tm){
			balance=balance-tm;
		}else if(balance<tm){
			System.out.println("您的余额不足,无法取钱");
		}
		System.out.println("您现在的余额为"+balance);
	}
	public boolean takePMoney(int money){
		if(this.balance>=money){
			this.balance=this.balance-money;
			System.out.println("缴费成功!您现在的余额为"+balance);
			return true;
		}else{
			System.out.println("缴费失败!您现在的余额为"+balance);
			return false;
		}
	}
	public boolean check(int spw){
		if(pw==spw)
			System.out.println("密码正确");	
			return false;
	}
}
public class BOC extends UnionCard{
	private PayTelInter pt;

	public BOC(String cardId, int balance, int pw) {
		super.setCardId(cardId);
		super.setBalance(balance);
		super.setPw(pw);
		pt=money->{
			if(this.getBalance()>=money){
				super.setBalance((int) (this.getBalance()-money));
				return true;
			}else{
				return false;
			}
		};
	}
	public PayTelInter getPt() {
		return pt;
	}
	public void setPt(PayTelInter pt) {
		this.pt = pt;
	}
}
public interface PayTelInter {
	boolean payTel(int money);
}
public class ATM {
	public UnionCard uc;
	static Scanner sc=new Scanner(System.in);
	public void insert(UnionCard uc){
		this.uc=uc;
		System.out.println("请输入密码");
		int b=sc.nextInt();
		if(this.uc.getPw()==b){
			System.out.println("密码正确");
		if(uc instanceof BOC){
			System.out.println("您已进入BOC菜单");
			showBOCMenu(this.uc);
		}if(uc instanceof ICBC){
			System.out.println("您已进入ICBC菜单");
			showICBCMenu(this.uc);
		}
		if(uc instanceof ABC){
			System.out.println("您已进入ABC菜单");
			showMenu(this.uc);
		}
		if(uc instanceof CCB){
			System.out.println("您已进入CCB菜单");
			showMenu(this.uc);
		}
		}else{
			System.out.println("密码错误");
		}
		}
	public void showMenu(UnionCard uc){
		System.out.println("1.存钱");
		System.out.println("2.取钱");
		System.out.println("3.验证密码");
		String c=sc.next();
		if(c.equals("1")){
			System.out.println("存多少钱");
			int sm=sc.nextInt();
			this.uc.saveMoney(sm);
			showBOCMenu(this.uc);
		}else if(c.equals("2")){
			System.out.println("取所少钱");
			int tm=sc.nextInt();
			this.uc.takeMoney(tm);
			showBOCMenu(this.uc);
		}else if(c.equals("3")){
			System.out.println("输入密码");
			int spw=sc.nextInt();
			this.uc.check(spw);
			showMenu(this.uc);
		}
	}
	public void showBOCMenu(UnionCard uc){
		System.out.println("1.存钱");
		System.out.println("2.取钱");
		System.out.println("3.交电话费");
		String c=sc.next();
		if(c.equals("1")){
			System.out.println("存多少钱");
			int sm=sc.nextInt();
			this.uc.saveMoney(sm);
			showBOCMenu(this.uc);
		}else if(c.equals("2")){
			System.out.println("取所少钱");
			int tm=sc.nextInt();
			this.uc.takeMoney(tm);
			showBOCMenu(this.uc);
		}else if(c.equals("3")){
			System.out.println("输入缴费金额");
			int spw=sc.nextInt();
			PayTelInter p=(money)->{
				return this.uc.takePMoney(money);
			};
			if(p.payTel(spw)){
				System.out.println("缴费成功");
				showBOCMenu(this.uc);
				}else{
				System.out.println("余额不足");
				showBOCMenu(this.uc);
			}
		}
	}
	public void showICBCMenu(UnionCard uc){
		System.out.println("1.存钱");
		System.out.println("2.取钱");
		System.out.println("3.交水电费");
		String c=sc.next();
		if(c.equals("1")){
			System.out.println("存多少钱");
			int sm=sc.nextInt();
			this.uc.saveMoney(sm);
			showBOCMenu(this.uc);
		}else if(c.equals("2")){
			System.out.println("取所少钱");
			int tm=sc.nextInt();
			this.uc.takeMoney(tm);
			showBOCMenu(this.uc);
		}else if(c.equals("3")){
			System.out.println("输入缴费金额");
			int spw=sc.nextInt();
			PayWEInter p=(money)->{
				return this.uc.takePMoney(money);
			};
			if(p.payWE(spw)){
				System.out.println("缴费成功");
				showICBCMenu(this.uc);
				}else{
				System.out.println("余额不足");
				showICBCMenu(this.uc);
			}
		}
	}
}
public class MainClass {
	public static void main(String[] args) {
		ATM atm=new ATM();
		UnionCard uc=new BOC("1",100,1);
		atm.insert(uc);
	}	
	}

3.老师的代码

public class UnionCard {
	private String id;
	private double balance;
	private int pw;
	public UnionCard(String id, double balance, int pw) {
		super();
		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){
		this.balance=this.balance+money;
	}
	public boolean takeMoney(int money){
		if(this.balance>=money){
			this.balance=this.balance-money;
			return true;
		}else{
			return false;
		}
	}
	public boolean checkPw(int pw){
		return this.pw==pw;
	}
}
public class BOC extends UnionCard{
	public BOC(String id, double balance, int pw) {
		super(id, balance, pw);
	}
}
public interface PayTelInter {
	boolean payTel(int money);
}
public class ATM {
	private UnionCard card;
	public void insertCard(UnionCard card){
		this.card=card;
		//判断卡的类型
		if(card instanceof BOC){
			showbocMenu();
		}
	}
	//显示中国银行的菜单
	public void showbocMenu(){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入密码:");
		int pw=sc.nextInt();
		if(card.checkPw(pw)){
			while(true){
			System.out.println("1.查看余额 2.存钱  3.取钱 4.交话费 5.退出");
			System.out.println("请选择");
			int num=sc.nextInt();
			switch(num){
			case 1:
				showBalance();
				System.out.println("输入0返回");
				if(0==sc.nextInt());//无实际意义,但可以不直接运行break导致余额不停留
				break;
			case 2:
				saveBalance();
				System.out.println("输入0返回");
				if(0==sc.nextInt());//无实际意义,但可以不直接运行break导致余额不停留
				break;
			case 3:
				takeBalance();
				System.out.println("输入0返回");
				if(0==sc.nextInt());//无实际意义,但可以不直接运行break导致余额不停留
				break;
			case 4:
				payMethod();
				System.out.println("输入0返回");
				if(0==sc.nextInt());//无实际意义,但可以不直接运行break导致余额不停留
				break;
			case 5:
				System.exit(0);
				break;
			}
			}
		}else{
			System.out.println("密码错误");
		}
	}
	private void showBalance(){
		System.out.println("余额"+card.getBalance());
	}
	private void saveBalance(){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入金额");
		int money=sc.nextInt();
		card.saveMoney(money);
		System.out.println("成功");
	}
	private void takeBalance(){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入金额");
		int money=sc.nextInt();
		boolean b=card.takeMoney(money);
		if(b)
			System.out.println("成功");
		else{
			System.out.println("余额不足");
		}	
	}
	private void payMethod(){
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入充入的话费");
		int money1=sc.nextInt();
		PayTelInter p=(money)->{
			return card.takeMoney(money);
		};
		if(p.payTel(money1)){
			System.out.println("缴费成功");
			}else{
			System.out.println("余额不足");
		}
		}
	}
	public class MainClass {
	public static void main(String[] args) {
		new ATM().insertCard(new BOC("0001",100,123));
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值