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 |