1. JAVA/1.2 실습

JAVA_08_실습_객체(3)

마느링 2022. 3. 24. 19:45

문제 ] 전자제품을 구매하려고 한다. (전자제품에는 Audio, Tv, Computer가 있다.)
        주어진 예산은 10000원이다.

        가격, 보너스포인트(가격의 1/10), 잔액, 구매품목을 누적시켜 출력하시오.
        (금액은 임의로 넣어주고 만약 주어진 예산에서 부족시, 잔액부족으로 출력)

 

1) Product 클래스 작성(Audio, Tv, Computer 의 부모클래스)

public class Product {
	
	String name;
	int price,bp;
	
	//생성자
	public Product(String name,int price) {
		this.name = name;
		this.price = price;
		this.bp = price/10;
	}
}

class Audio extends Product {
	Audio(){
		//문자열, 정수를 매개변수로 받는 부모 생성자를 호출하였다.
		super("오디오",1000);
	}
	public String toString() {
		return "오디오";
	}
}
class Tv extends Product {
	Tv(){
		//문자열, 정수를 매개변수로 받는 부모 생성자를 호출하였다.
		super("Tv",1500);
	}
	public String toString() {
		return "Tv";
	}
}
class Computer extends Product{
	Computer(){
		//문자열, 정수를 매개변수로 받는 부모 생성자를 호출하였다.
		super("컴퓨터",3000);
	}
	public String toString() {
		return "컴퓨터";
	}
}

2) 구매하는 사람별 구매 품목을 나타내는 Buyer 클래스 작성

public class Buyer {
	int price, bp,total;
	String name;
	Product[] cart = new Product[10];
	Product p;
	//매개변수를 이름으로 받는 생성자 생성
	public Buyer(String name) {
		this.name = name;
		this.price = 10000;
		//각 객체마다 주어진 예산은 만원
		
	}
	
	int i = 0;
	
	public void buy(Product p) {
		if(price<p.price) {
			System.out.println("잔액 부족!");
			return;
		}
		else
		{	price-=p.price;
			cart[i++] = p;
			bp += p.bp;
			System.out.println(name+"님");
			System.out.println(p+"구입!");
			System.out.println("잔액 : "+price);
			System.out.println("적립된 포인트 : "+bp);
	}
		System.out.println();
	}
	String str = "";
	
	public void summary() {
		for(int i = 0; i<cart.length;i++) {
			if(cart[i]==null) {	
			break;
			}
			total += cart[i].price;
			str+=cart[i] +" ";
		}
		System.out.println("*****"+name+"님의 구매내역*****");
		System.out.println("총 구입 금액 : "+total);
		System.out.println("총 구입 품목 : "+str);
	}

}

3) 메인메소드

	public static void main(String[] args) {
	Product tv = new Tv();
	Product com = new Computer();
	Product aud = new Audio();
	
	Buyer b1 = new Buyer("홍길동1");
	b1.buy(aud);
	b1.buy(com);
	b1.buy(aud);
	b1.buy(aud);
	b1.buy(aud);
	b1.buy(aud);
	b1.buy(aud);
	b1.buy(aud);
	b1.buy(aud);
	b1.buy(tv);
	b1.summary();
	System.out.println("=============================");
	Buyer b2 = new Buyer("홍길동2");
	b2.buy(aud);
	b2.buy(aud);
	b2.buy(aud);
	b2.buy(aud);
	b2.buy(aud);
	b2.summary();
	
	}

}

<출력내용>

홍길동1님
오디오구입!
잔액 : 9000
적립된 포인트 : 100

홍길동1님
컴퓨터구입!
잔액 : 6000
적립된 포인트 : 400

홍길동1님
오디오구입!
잔액 : 5000
적립된 포인트 : 500

홍길동1님
오디오구입!
잔액 : 4000
적립된 포인트 : 600

홍길동1님
오디오구입!
잔액 : 3000
적립된 포인트 : 700

홍길동1님
오디오구입!
잔액 : 2000
적립된 포인트 : 800

홍길동1님
오디오구입!
잔액 : 1000
적립된 포인트 : 900

홍길동1님
오디오구입!
잔액 : 0
적립된 포인트 : 1000

잔액 부족!
잔액 부족!
*****홍길동1님의 구매내역*****
총 구입 금액 : 10000
총 구입 품목 : 오디오 컴퓨터 오디오 오디오 오디오 오디오 오디오 오디오 
=============================
홍길동2님
오디오구입!
잔액 : 9000
적립된 포인트 : 100

홍길동2님
오디오구입!
잔액 : 8000
적립된 포인트 : 200

홍길동2님
오디오구입!
잔액 : 7000
적립된 포인트 : 300

홍길동2님
오디오구입!
잔액 : 6000
적립된 포인트 : 400

홍길동2님
오디오구입!
잔액 : 5000
적립된 포인트 : 500

*****홍길동2님의 구매내역*****
총 구입 금액 : 5000
총 구입 품목 : 오디오 오디오 오디오 오디오 오디오