ProductTest.java

갓김치·2020년 8월 29일
0

자바 문제풀이

목록 보기
5/6
package zz_oop2_hw;

import java.util.Vector;

public class ProductTest {
	public static void main(String[] args) {
		NoteBook nb = new NoteBook("Mac", 300);
		Styler st = new Styler("LG Styler", 200);
		Fridge fr = new Fridge("Bespoke", 500);
		
		Buyer b = new Buyer("듀듀꼰듀", 1000);
		b.buy(fr);
		b.buy(nb);
		b.summary();
		b.refund(nb);
		b.refund(fr);
		
		Buyer b2 = new Buyer ("치치꼰듀", 1500);
		b2.refund(st);
	}
}
/***
 * 제품 관리 클래스
 * @author chichi
 * @since 20.08.28
 */
class Product extends Object{
	String name;//제품이름
	int price;  //가격
	int point;//보너스포인트

	
	Product(String name, int price){
		this.name = name;
		this.price = price;
		point = price/10;
	}
}
/***
 * 노트북 관리 클래스
 * @author chichi
 * @since 20.08.28
 */
class NoteBook extends Product{
	public NoteBook(String name, int price){
		super(name,price); //이렇게하면 기본생성자 안만들어줘도됨
	}

	@Override
	public String toString() {
		return "노트북";
	}
}
/***
 * 스타일러 관리 클래스
 * @author chichi
 * @since 20.08.28
 */
class Styler extends Product{
	public Styler(String name, int price){
		super(name,price);
	}

	@Override
	public String toString() {
		return "스타일러";
	}
}
/***
 * 냉장고 관리 클래스
 * @author chichi
 * @since 20.08.28
 */
class Fridge extends Product{
	public Fridge(String name, int price){
		super(name,price);
	}

	@Override
	public String toString() {
		return "냉장고";
	}
}

/***
 * 구매자 관리 클래스
 * @author chichi
 * @since 20.08.28
 */
class Buyer{
	String name;
	int money;
	int mileage;
	
	Vector item = new Vector(); //Vector:기본 10개, Object 타입으로 저장 -> 꺼낼때 down-casting 필요
	public Buyer(String name, int money){
		this.name = name;
		this.money = money;
	}
	
	void buy(Product pd){ //매개변수의 다형성 이용.
		if(money < pd.price){				//(Product) pd 업캐스팅이 생략되서 변수가 입력되는 것
			System.out.println("돈가져와");
			return; //중간에 종료하고 나갈 때
		}
		
		money -= pd.price;
		mileage += pd.point;
		
		item.add(pd);
		
		System.out.println(name+"님 "+pd+"를 구매해주셔서 감사합니다.");
	}
	/***
	 * 영수증 관리 메서드
	 * @author chichi
	 * @since 20.08.28
	 */
	//1. summary 메서드
	void summary(){
		System.out.println("------------------------\n\t<영 수 증>\n------------------------");
		int sumPrice = 0;
		for(int index = 0 ; index < item.size() ; index++){
			if(item.get(index) instanceof Product){
				Product pd = (Product)item.get(index);
				System.out.println(item.get(index)+"\t"+pd.name+"\t"+pd.price+"만원");
				sumPrice += pd.price;
			}
		}
		System.out.println("총합: \t\t"+sumPrice+"만원");
		System.out.println("------------------------");
		System.out.println(name+"님의 잔액: \t"+money+"만원");
		System.out.println(name+"님의 누적 포인트: "+mileage+"포인트\n------------------------\n");
	/*
			영	수	증
	
	   구매목록
	   	노트북	  300만원
	   	스타일러	  200만원
	   	총합		  500만원
	   	
	  xxx고객님 남은 돈은 xxx만원 마일리지는 xxx
	*/
		
		
	/*
	제품종류, 제품가격	 //제품종류: Object get(int index) 지정된 위치 객체 반환, (Object에서 instanceof 확인해서 형변환해서 돌려줘야함):안해도 되네
	제품종류, 제품가격	 //제품가격: cost를 벡터에 담지 않고 그냥 출력할 수 있는 방법? instanceof 해서 그 객체타입이면 그객체의 money를 출력?
	:
	제품종류, 제품가격	 // 행의 수는 제품갯수만큼 ->벡터 int size()의 갯수를 알 수 있음 
	총합은 제품가격들의 총합  // 1.(벡터안쓰고)    2.(벡터사용시) for문으로 벡터갯수만큼 돌려서 cost벡터 각방에 있는 애들을 합한다?
	
	*/
	}
	
	/***
	 * 환불 관리 메서드
	 * @author  chichi
	 * @since 20.08.28
	 */
	//2. refund 메서드 - 앞의 메서드거의다써야함
	/*
	0. 구매내역 영수증
	1. 구매내역 X -> NO!
	  -> item.size() = 0  -> syso"환불불가"
	2. 구매내역 O 
	2-1.     -> 구입 안한 물건 반품(입력받은 값이 Vector item에 들어있지 않을떄) -> syso"환불불가"
	2-2. 	 -> 구입 물건만 반품 (구입 물건은 Vector item에 들어있음)
	  : 원상복귀해줘야할것
	  : 1. 마일리지 -> mileage -= pd.point? 
	  : 2. 산 사람 잔고 -> money += pd.price
	  : 3. 객체도 제거 -> remove(입력값) 제거하면true 실패 false
	  : 4. 재고 - 지금 수량 관리하는 클래스 없음
	3. 환불내역 영수증
	*/
	void refund(Product pd){
		if(item.size() > 0 ){
			if(item.remove(pd)){//구입물건 반품할 경우
				money += pd.price;//1. 고객 잔고
				System.out.println(name+"님,\n환불 후 잔고는 "+money+"만원입니다.");
				mileage -= pd.point;//2. 마일리지
				System.out.println("환불 후 마일리지는 "+mileage+"포인트입니다.");
			}else{
				System.out.println(pd.name+"은 구매내역에 없는 제품입니다. 환불불가");
			}
			summary();
		}else{
			System.out.println(name+"님, 구매이력이 없어 환불해 드릴 수 없습니다.");
		}
	}
}

/***
 * 물품 수량 관리 클래스
 * @author ryun
 * @since 20.08.28
 */
class Stock extends Product{ //extends Product?
/*
  3. 물품의 수량을 관리 class
  재고에 영향을 끼치는 것들: 기초재고, 구매 buy(), 환불 refund()  - 이거 완성되면 입고,본사로 반품도 생각해보자 
  재고가 관리하는 것:물건(물건의 속성(변수): 종류(노트북), 제조사(맥), 수량, 가격)
  
  
  Tv 몇대여서 얼마 , Tv 몇대샀는지.. 나중에 또사면 앞에 샀던 내역에서 또 수정... 처음사는거면 내역에서 추가
  물품  수량  가격
  
*/	public Stock(String name, int price){
		super(name,price);
	}

	void stockUp(){
		
	}
	
	void stockDown(){
		
	}
	
}
class Customer{
//4. 고객의 목록을 관리해주세요. class
//메인에서 고객을 등록을 시키고 나면, 누가 뭐를 몇개샀는지? 누가 뭐를 반품했는지? 고객들을 관리할수있도록
//고객등록 메서드?
}
profile
갈 길이 멀다

0개의 댓글