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();
}
}