본문 바로가기
study/Java

[Java] 23. Test1 풀이 (각 클래스를 생성하고 출력하기)

by 금이패런츠 2022. 3. 21.
728x90
반응형
package chap7;
/*
1. Food2 클래스
멤버 변수 : 가격(price)과 포인트(point)
생성자 : 식품의 객체 생성시 가격을 입력받아야 하고, 가격의 10%를 포인트로 저장한다.
식품의 종류는 과일(Fruit2),음료(Drink2),과자(Snack2)로 나눠 진다.

Fruit2 클래스 : Food2 클래스의 하위 클래스
Drink2 클래스 : Food2 클래스의 하위 클래스
Snack2 클래스 : Food2 클래스의 하위 클래스

과일 클래스는 당도(brix)를, 음료는 용량(ml), 과자는 무게(gram)을 멤버로 가진다
과일의 종류로는 사과(Apple2),복숭아(Peach2),
음료의 종류로는 콜라(Cock2) 와 사이다(Sidar2)
과자의 종류로는 비스킷(Biscuit2)과 쿠키(Cookie2) 가 있다.
사과,복숭아, 콜라, 사이다,비스킷,쿠키 클래스에 toString() 메서드를 구현하고
각각의 이름을 리턴한다.
 */
class Food2 {
	int price, point;
	Food2(int price) {
		this.price = price;
		this.point = price/10;
	}
}
class Fruit2 extends Food2 {
	double brix;
	Fruit2(int price, double brix) {
		super(price);
		this.brix = brix;
	}
}
class Drink2 extends Food2 {
	int ml;
	Drink2(int price, int ml) {
		super(price);
		this.ml = ml;
	}
}
class Snack2 extends Food2 {
	int gram;
	Snack2(int price, int gram) {
		super(price);
		this.gram = gram;
	}
}
class Apple2 extends Fruit2 {
	Apple2(int price, double brix) {
		super(price,brix);
	}
	public String toString() {
		return "사과";
	}
}
class Peach2 extends Fruit2 {
	Peach2(int price, double brix) {
		super(price,brix);
	}
	public String toString() {
		return "복숭아";
	}
}
class Cock2 extends Drink2 {
	Cock2(int price, int ml) {
		super(price,ml);
	}
	public String toString() {
		return "콜라";
	}
}
class Sidar2 extends Drink2 {
	Sidar2(int price, int ml) {
		super(price,ml);
	}
	public String toString() {
		return "사이다";
	}
	
}
class Biscuit2 extends Snack2 {
	Biscuit2(int price, int gram) {
		super(price,gram);
	}
	public String toString() {
		return "비스킷";
	}
	
}
class Cookie2 extends Snack2 {
	Cookie2(int price, int gram) {
		super(price,gram);
	}
	public String toString() {
		return "쿠키";
	}
}
/*
 *2. Buyer2 클래스
 *   멤버변수 : 돈(money)=10000, 포인트(point), 구매건수(cnt)
 *            장바구니(cart) : 상품저장하는 배열 
 *            
 *   멤버메서드
 *     buy(Food2) :
 *       소유 금액보다 물품값이 큰경우 "잔액부족"메세지 출력하고 메서드 종료
 *       물건 구매시 보유금액에서 물품가격만큼 차감
 *       물품의 포인트 만큼 포인트 증가.
 *       물품의 물품명과 가격을 화면에 출력.
 *       해당 물품은 장바구니에 추가. 구매건수 1 증가
 *     summary() :
 *       장바구니를 조회하여 구매한 물품의 목록과 총 가격과 현재 포인트를 출력하기.
 *       과일의 갯수,과일 구매 금액,과일 구매 목록
 *       음료의 갯수,음료 구매 금액,음료 구매 목록  
 *       과자의 갯수,과자 구매 금액,과자 구매 목록 출력하기  
 *       
 * [결과]
===Buyer2.buy(Food2 f) 메서드 실행 ===
사과를(을) 1000가격에 구입, 포인트 100증가
===Buyer2.buy(Food2 f) 메서드 실행 ===
복숭아를(을) 1000가격에 구입, 포인트 100증가
===Buyer2.buy(Food2 f) 메서드 실행 ===
콜라를(을) 500가격에 구입, 포인트 50증가
===Buyer2.buy(Food2 f) 메서드 실행 ===
사이다를(을) 1500가격에 구입, 포인트 150증가
===Buyer2.buy(Food2 f) 메서드 실행 ===
비스킷구매시 잔액부족
===Buyer2.buy(Food2 f) 메서드 실행 ===
쿠키를(을) 500가격에 구입, 포인트 50증가
고객 잔액:5500
고객 포인트:450
===Buyer2.summary() 메서드 실행 ===
총 구매금액 : 4500, 구매건수:5
총 구매목록 : 사과,복숭아,콜라,사이다,쿠키,
과일 구매금액 : 2000, 구매건수:2, 과일 구매목록 : 사과,복숭아,
음료 구매금액 : 2000, 구매건수:2, 음료 구매목록 : 콜라,사이다,
과자 구매금액 : 500, 구매건수:1, 과자 구매목록 : 쿠키,
 */
class Buyer2 {
	int money=10000,point,cnt;
	Food2[] cart = new Food2[30];
	void buy(Food2 f) {
		System.out.println("===Buyer2.buy(Food2 f) 메서드 실행 ===");
		if(money < f.price) {
			System.out.println(f + "구매시 잔액부족");
			return;
		}
		money -= f.price;
		point += f.point;
		System.out.println(f + "를(을) " + f.price
				+ "가격에 구입, 포인트 "+f.point + "증가");
		cart[cnt++] = f;
	}
	void summary() {
		System.out.println("===Buyer2.summary() 메서드 실행 ===");
		int total=0,ftot=0,dtot=0,stot=0;
		int fcnt=0,dcnt=0,scnt=0;
		String list="",flist="",dlist="",slist="";
		for(int i=0;i<cnt;i++) {
			total += cart[i].price; //구매상품전체가격
			list += cart[i] + ",";  //구매상품목록
			
			if(cart[i] instanceof Fruit2) { //사과, 복숭아객체 true
				ftot += cart[i].price;      //과일가격의 합
				flist += cart[i] + ",";     //과일 목록
			    fcnt++;	                    //과일건수
			}
			if(cart[i] instanceof Drink2) {
				dtot += cart[i].price;     //음료가격의 합
				dlist += cart[i] + ",";    //음료 목록
			    dcnt++;	                   //음료 건수
			}
			if(cart[i] instanceof Snack2) {
				stot += cart[i].price;     //과자구매가격
				slist += cart[i] + ",";    //과자목록
			    scnt++;	                   //과자건수
			}
		}
		System.out.println("총 구매금액 : " + total + ", 구매건수:" + cnt);
		System.out.println("총 구매목록 : " + list);
		System.out.print("과일 구매금액 : " + ftot + ", 구매건수:" + fcnt);
		System.out.println(", 과일 구매목록 : " + flist);
		System.out.print("음료 구매금액 : " + dtot + ", 구매건수:" + dcnt);
		System.out.println(", 음료 구매목록 : " + dlist);
		System.out.print("과자 구매금액 : " + stot + ", 구매건수:" + scnt);
		System.out.println(", 과자 구매목록 : " + slist);
	}
}
public class Test0315_1 {
	public static void main(String[] args) {
		Apple2 apple = new Apple2(1000,10.5);
		Peach2 peach = new Peach2(1000,13.5);
		Cock2 cock = new Cock2(500,500);  
		Sidar2 sidar = new Sidar2(1500,1000);
		Biscuit2 bis = new Biscuit2(10000,500);
		Cookie2 cookie = new Cookie2(500,5000);
		Buyer2 b = new Buyer2();
		b.buy(apple); //9000, 100	
		b.buy(peach); //8000, 200
		b.buy(cock);  //7500, 250		
		b.buy(sidar); //6000, 400
		b.buy(bis);   //구매불가		
		b.buy(cookie);//5500, 450
		System.out.println("고객 잔액:" + b.money);
		System.out.println("고객 포인트:" + b.point);
		b.summary();
	}
}

 

728x90
반응형

'study > Java' 카테고리의 다른 글

[Java] 23. final2  (0) 2022.03.21
[Java] 23. final1  (0) 2022.03.21
[Java] 23. Test1 (각 클래스를 생성하고 출력하기)  (0) 2022.03.21
[Java] 23. 제한자 (접근제한자, 그외제한자)  (0) 2022.03.21
[Java] 23. 패키지  (0) 2022.03.21