package day14;

import java.util.Scanner;

abstract class Card {
	Scanner sc = new Scanner(System.in);

	Card(String name, int money) {
		this.name = name;
		this.money = money;
	}

	Card(String name) {
		this(name, 0);
	}

	String name;
	int money;

	void show() {
		System.out.println(this.name + "님의 카드 잔액은 " + this.money + "원 입니다.");
	}

	abstract void pay(); // 하위클래스에 결재 함수를 강제함
}

class CheckCard extends Card {
	CheckCard(String name, int money) {
		super(name, money);
	}

	CheckCard(String name) {
		this(name, 0);
	}

	void pay() {
		System.out.print("결재 금액 입력 : ");
		int payMoney = sc.nextInt();
		if (this.money - payMoney < 0) {
			System.out.println("잔액이 부족합니다.");
			return;
		}
		this.money -= payMoney;
		System.out.println(this.name + "님 " + payMoney + "원 결재하셔서 남은 잔액" + this.money + "원 입니다.");
	}

}

class CreditCard extends Card {
	CreditCard(String name, int money, int limit) {
		super(name, money);
		this.limit = limit;
		System.out.println("결재 한도가 " + limit + "원인 신용카드 생성이 완료되었습니다.");
	}

	CreditCard(String name, int limit) {
		this(name, 0, limit);
	}

	int limit;
	int sum = 0;

	void pay() {
		System.out.print("결재 금액 입력 : ");
		int payMoney = sc.nextInt();
		if (this.limit < this.sum + payMoney) {
			System.out.println("사용한도를 초과하셧습니다.");
			return;
		}
		this.sum += payMoney;
		System.out.println("결재완료");
	}

	void show() {
		System.out.println(this.name + "님의 남은 카드 한도 " + (this.limit - this.sum) + "원 입니다.");
	}

}

class BusCard extends Card {

	BusCard(String name, int money) {
		this(name, money, 20);
	}

	BusCard(String name, int money, int age) {
		super(name, money);
		this.age = age;
	}

	int age;

	void pay() {
		int payMoney = 2000;
		if (age >= 9 && age <= 19) {
			payMoney -= 1000;
			System.out.println("삑! 학생입니다!");
		} else if (age < 9 || age > 65) {
			payMoney = 0;
			System.out.println("삑! 우대카드입니다!");
		}
		if (this.money - payMoney < 0) {
			System.out.println("잔액이 부족합니다.");
			return;
		}
		System.out.println("조심히타세요!");
		this.money -= payMoney;
	}

}

public class CardTest {
	public static void main(String[] args) {
		BusCard bc = new BusCard("와라", 10000, 29);
		bc.pay();
		bc.show();
		CheckCard cc = new CheckCard("가라", 100000);
		cc.pay();
		cc.show();
		CreditCard cr = new CreditCard("가라", 100000);
		cr.pay();
		cr.show();
	}
}

+ Recent posts