day17_PolyArgumentTestEx

육희영·2021년 10월 28일
0
package com.java1.day17;

import java.util.Scanner;

public class PolyArgumentTestEx {
	public static void main(String[] args) {
		new Shopping().selectProduct();
	}
}

class Shopping {
	Scanner sc = new Scanner(System.in);
	BuyerEx b = new BuyerEx();
	String[] str = {"Tv : ", "에어컨 : ", "컴퓨터 : ", "침대 : "};
	
	/*
	String[] str = null;	//배열 선언..
	
	Shopping(){		//배열을 초기화할 경우 new String[]를 생략할수 없다.
		str = new String[]{"Tv : ", "에어컨 : ", "컴퓨터 : ", "침대 : "};
	}
	*/
	
	void selectProduct() {
		int select = 0;
		
		do {
			System.out.print("물건을 선택 하세요.>>1.Tv(200) 2.에어컨(100)  3.컴퓨터(300)  4.침대(500) 5.충전하기  6.나가기 : ");
			select = sc.nextInt();
			
			if(select == 1) {
				if(b.buy(new TvEx()) != -1)	//잔액이 부족한 경우가 아니라면..
					b.setItemList(0);		//배열 0번째의 값을 +1 한다. 
			}else if(select == 2) {
				if(b.buy(new AirconEx()) != -1)
					b.setItemList(1);
			}else if(select == 3) {
				if(b.buy(new ComputerEx()) != -1)
					b.setItemList(2);
			}else if(select == 4) {
				if(b.buy(new BedEx()) != -1)
					b.setItemList(3);
			}else if(select == 5)
				b.reCharge();		//충전하기..
			
		}while(select != 6);
		
		print();
		sc.close();
	}
	
	void print() {
		System.out.println("------------영수증---------------");
		/*
		System.out.println("Tv : " + b.getItemList(0)  );
		System.out.println("에어컨 : " + b.getItemList(1) );
		System.out.println("컴퓨터 : " + b.getItemList(2) );
		System.out.println("침대 : " + b.getItemList(3) );
		*/
		for(int i=0; i<str.length; i++) {
			System.out.println(str[i] + b.getItemList(i));
		}
		
		System.out.println("총금액 : " + b.getTotal() );
		System.out.println("잔액  : " + b.getMoney());
		System.out.println("보너스 포인트 : " + b.getBonunsPoint());
		System.out.println("쇼핑을 마칩니다!");
	}
}

class BuyerEx {
	private int money;	//소유금액
	private int bonusPoint;	//보너스 점수
	private int[] itemList;	//구입한 제품을 저장하기 위한 배열..
	private int total;		//제품을 구입한 총 금액..
	
	BuyerEx(){
		money = 1000;
		bonusPoint = 0;
		itemList = new int[4];
		total = 0;
	}
	
	Scanner sc = new Scanner(System.in);
	
	int buy(ProductEx p) {
		if(money < p.getPrice()) {
			System.out.println("잔액이 부족하여 물건을 살 수 없습니다.");
			return -1;		//메서드를 종료한다.(잔액이 부족하면 -1을 리턴..)
		}
		
		money -= p.getPrice();	//물건을 사게되면 소유금액에서 물건의 가격만큼 차감한다.
		total += p.getPrice();		//물건을 구매하는데 사용한 총금액..
		bonusPoint += p.getBonusPoint();	//물건을 사게되면 제품의 보너스 점수를 추가한다.
		System.out.println(p + "을 구입하셨습니다.");
		
		return 0;	// 잔액이 부족하지 않고 정상이라면 0을 리턴..
	}
	
	int getMoney() {		//고객이 현재 보유한 총 금액..
		return money;
	}
	
	void setMoney(int money) {	//금액 충전..
		this.money += money; 
	}
	
	void reCharge() {	//충전하기
		System.out.print("충전할 금액을 입력 하세요 : ");
		int money = sc.nextInt();
		setMoney(money);
		System.out.println(money + "가 충전 되었습니다.");
		System.out.println("현재 총 금액 : " + getMoney() );
	}
	
	int getItemList(int index) {
		return itemList[index];  
	}
	
	void setItemList(int index) {
		itemList[index]++;
	}
	
	int getTotal() {
		return total;
	}
	
	int getBonunsPoint() {
		return bonusPoint;
	}
}

class ProductEx {
	private int price;
	private int bonusPoint; //제품 구매시 제공하는 보너스 점수
	
	ProductEx(int price){
		this.price = price;
		bonusPoint = (int)(price/10.0);	//보너스 점수는 제품 가격의 10%
	}
	
	int getPrice() {
		return price;
	}
	
	int getBonusPoint() {
		return bonusPoint;
	}
}

class TvEx extends ProductEx {
	TvEx() {
		super(200);
	}
	
	@Override
	public String toString() {
		return "TV";
	}
}

class AirconEx extends ProductEx {
	AirconEx() {
		super(100);
	}
	
	@Override
	public String toString() {
		return "에어컨";
	}
}

class ComputerEx extends ProductEx {
	ComputerEx() {
		super(300);
	}
	
	@Override
	public String toString() {
		return "컴퓨터";
	}
}

class BedEx extends ProductEx {
	BedEx() {
		super(500);
	}
	
	@Override
	public String toString() {
		return "침대";
	}
}

출력결과

0개의 댓글

관련 채용 정보