요구사항
: 포인트 = 제품가격의 10%
: 'Tv / PC 을(를) 구매했습니다' 출력
: 기본금 1000 으로 시작
-기본 필드 값으로 제품가격과 보너스포인트 선언
-생성자의 매개 값으로 값을 받아와 초기화
public class Product {
// 제품의 가격
int price;
// 제품 구매시 제공하는 보너스 점스
int bonusPoint;
// 생성자
public Product(int price) {
this.price = price;
// 보너스 점수는 제품가격의 10%
bonusPoint = (int) (price/10.0);
}
public Product() { }
}
-기본 생성자 작성해준 후 상위클래스에 200 넣어주기,
int를 매개값으로 받는 public Product(int price)
에 작성 값이 넘겨진다
-toString은 Object클래스에서 받아온 내용으로, 출력시 호출하면 "PC" 라는 String 내용을 리턴해준다
public class Pc extends Product {
// 기본 생성자를 만들고
public Pc() {
// 상위 클래스에 200 값 넘겨주기
super(200);
}
// 오브젝트 클래스에서 가져와
// 오버라이딩 해준 것
@Override
public String toString() {
return "Pc";
}
}
-역시나 int를 값으로 받는 public Product(int price)
에 super() 속 값이 넘어간다.
-toString 값으로 "TV" 가 리턴된다.
public class Tv extends Product{
public Tv() {
// 부모 생성자 호출해서 100 으로 가격을 던진다
super(100);
}
// (기본적으로 들어있는 최상위 클래스인)
// 오브젝트 클래스의 것을 가져와 오버라이딩
@Override
public String toString() {
return "TV";
}
}
-기본 소유금 1000으로 설정, 구매시 차감하는 방식으로 진행
-상위 클래스인 Product를 매개값으로 받게끔 설정(그리하면 Product를 상속받는 하위 클래스도 값으로 집어넣을 수 있게된다.
// 고객 클래스
public class Buyer {
// 소유금액
int money = 1000;
int bonusPoint = 0;
// 상위 클래스였던 Product 속 생성자(매개변수)를 사용
void buy(Product p) {
if(money < p.price) {
System.out.println("잔액이 부족합니다 물건을 살 수 없습니다");
// void 메소드이기 때문에 return; 의 의미는
// 값을 전달하지 말고 메소드에서 빠지라는 뜻이다
return;
}
// 가진 돈으로 구입한 제품의 가격을 빼준다
money -= p.price;
bonusPoint += p.bonusPoint;
System.out.println(p.toString() + "을/를 구매하셨습니다");
}
}
-스캐너로 직접 입력받지 않는다
-구매 후 잔금과 쌓인 포인트를 확인할 수 있게 한다
-매개값이 들어가는 곳에 상속된 자식 클래스가 들어간 모습을 확인할 수 있다
public class PolyArgumentTest {
public static void main(String[] args) {
// 객체 생성
Buyer buyer = new Buyer();
// 제품 클래스 객체 생성
Tv tv = new Tv();
Pc pc = new Pc();
// 매개 변수 값으로 제품 객체 집어넣기
buyer.buy(tv);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
buyer.buy(pc);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
}
}
실행결과
요구사항
: 구매액이 기본금을 초과한 상황도 출력해보기
: 객체를 배열로 처리하기
public class Product {
// 제품의 가격
int price;
// 제품 구매시 제공하는 보너스 점스
int bonusPoint;
// 생성자
public Product(int price) {
this.price = price;
// 보너스 점수는 제품가격의 10%
bonusPoint = (int) (price/10.0);
}
public Product() { }
}
// 냉장고
public class Refrigerator extends Product {
public Refrigerator() {
super(300);
}
@Override
public String toString() {
return "냉장고";
}
}
// 핸드폰
public class Phone extends Product {
public Phone() {
super(120);
}
@Override
public String toString() {
return "핸드폰";
}
}
// 에어컨
public class AirConditioner extends Product {
public AirConditioner() {
super(500);
}
@Override
public String toString() {
return "에어컨";
}
}
-객체를 배열로 담아주기 위해 Product[] item = new Product[]
-Product 배열에 사용할 카운터 선언 및 초기화
public class Buyer {
int money = 1000;
int bonusPoint = 0;
// 객체를 배열로 담아주기 위함
// 구입한 제품을 저장하기 위한 배열
Product[] item = new Product[10];
// Product 배열에 사용할 카운터
int i = 0;
void buy(Product p) {
if (money < p.price) {
System.out.println("잔액이 부족합니다 물건을 살 수 없습니다");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
// p에 담기는 것은 주소
// 인덱스가 하나씩 늘어나며 주소가 담긴다
// PolyArgument 에서 들어온 buyer.buy(값);
// 저 값을 item 배열에 저장하는 것
item[i++] = p;
System.out.println(p.toString() + "을/를 구매하셨습니다");
}
// 구매한 제품의 정보를 요약하는 메소드
void summary() {
// 물품의 총 구매 가격
int sum = 0;
// 구입한 물품 리스트
String itemList = " ";
// 보너스 포인트
int bonusPoint = 0;
//반복문을 사용하여 물풍의 가격 합과 리스트 출력
for (int i=0; i<item.length; i++) {
if(item[i] == null) {
break;
}
// item 에 저장되어있는 가격과 물품 내역을
// 변수에 누적
sum += item[i].price;
itemList += item[i].toString() + " ";
bonusPoint += item[i].bonusPoint;
}
System.out.println("총 구매 금액 : " + sum);
System.out.println("쌓인 포인트 내역 : " + bonusPoint);
System.out.println("구입하신 물품 내역 :"+ itemList);
System.out.println("좋은 하루 보내세요");
}
}
-입력을 스캐너로 받는다
-while문을 이용하여 사용자가 종료하기 전에는 종료시키지 않는다
import java.util.*;
public class PolyArgumentTest {
public static void main(String[] args) {
// 객체 생성
Scanner sc = new Scanner(System.in);
Buyer buyer = new Buyer();
// 제품 클래스 객체 생성
Refrigerator re = new Refrigerator();
AirConditioner air = new AirConditioner();
Phone ph = new Phone();
boolean a = true;
while (a) {
// 매개 변수 값으로 제품 객체 집어넣기
System.out.println("제품을 입력해주세요");
System.out.print(">>");
String input = sc.next();
if (input.equals("에어컨")) {
buyer.buy(air);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
} else if (input.equals("냉장고")) {
buyer.buy(re);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
} else if (input.equals("핸드폰")) {
buyer.buy(ph);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
} else {
a = false;
}
}
buyer.summary();
}
}
실행모습
-미처리상황 : 구매하지 않은 제품을 환불처리 했을 때, '구매하신 제품이 아닙니다' 출력 미구현
public class Product {
// 제품의 가격
int price;
// 제품 구매시 제공하는 보너스 점스
int bonusPoint;
// 생성자
public Product(int price) {
this.price = price;
// 보너스 점수는 제품가격의 10%
bonusPoint = (int) (price/10.0);
}
public Product() { }
}
// choco
public class Choco extends Product{
public Choco() {
super(2000);
}
@Override
public String toString() {
return "초코스무디";
}
}
// Coffee
public class Coffee extends Product {
public Coffee() {
super(1500);
}
@Override
public String toString() {
return "아메리카노";
}
}
// Vanilla
public class Vanilla extends Product {
public Vanilla() {
super(2500);
}
@Override
public String toString() {
return "바닐라_라떼";
}
}
-객체는 배열로 처리
-환불 기능 구현
public class Buyer {
int money = 10000;
int bonusPoint = 0;
// 클래스 내 어느 생성자에서도 사용할 수 있게끔 밖으로 빼내었다
int sum = 0;
String itemList = " ";
Product[] item = new Product[10];
int i = 0;
void buy(Product p) {
if (money < p.price) {
System.out.println("잔액이 부족합니다. 물건을 구매하실 수 없습니다");
return;
}
money -= p.price;
bonusPoint += p.bonusPoint;
item[i++] = p;
System.out.println(p.toString() + "을/를 구매하셨습니다");
}
// 구매한 제품을 환불하는 메소드
void refund(Product p) {
for (int i = 0; i < item.length; i++) {
if (item[i] == null) {
break;
}
sum += item[i].price;
}
// 환불 요구한 제품의 인덱스 찾가
for (i = 0; i < item.length; i++) {
if (p == item[i]) {
// 저장되어 내려온 item[i] 칸에서
// 저장된 요소들을 꺼내 계산한다
sum -= item[i].price;
bonusPoint -= item[i].bonusPoint;
System.out.println("\n*********************************");
System.out.println("환금 제품 : " + item[i].toString());
System.out.println("환불 가격 : " + item[i].price);
System.out.println("삭제된 포인트 : " + item[i].bonusPoint);
System.out.println("구매내역");
break;
} else {
System.out.println();
System.out.println("환불 내역을 찾는 중입니다..");
}
}
}
void summary() {
for (int i = 0; i < item.length; i++) {
if (item[i] == null) {
break;
}
sum += item[i].price;
itemList += item[i].toString() + ", ";
bonusPoint += item[i].bonusPoint;
}
System.out.println("총 구매 금액 : " + sum);
System.out.println("쌓인 포인트 내역 : " + bonusPoint);
System.out.println("구입하신 물품 내역 :" + itemList);
System.out.println("좋은 하루 보내세요");
}
}
public class Total {
public static void main(String[] args) {
// 객체 생성
Buyer buyer = new Buyer();
// 제품 클래스 객체 생성
Coffee coffee = new Coffee();
Vanilla vanilla = new Vanilla();
Choco choco = new Choco();
// 매개 변수 값으로 제품 객체 집어넣기
buyer.buy(coffee);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
buyer.buy(vanilla);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
buyer.buy(choco);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
buyer.buy(coffee);
System.out.println("현재 잔금 : " + buyer.money);
System.out.println("현재 보너스포인트 : " + buyer.bonusPoint);
System.out.println("-----------------------------");
// 환불
buyer.refund(choco);
buyer.refund(choco);
System.out.println("-----------------------------");
System.out.println("총 구매 금액 : " + buyer.sum);
System.out.println("쌓인 포인트 내역 : " + buyer.bonusPoint);
System.out.println("좋은 하루 보내세요");
}
}
실행결과