본문 바로가기
Backend/JAVA_Basic

25. JAVA, 상품 구매 및 반품 프로그램 (상속, 오버라이드 등 연습)

by 개발개발빈이 2022. 6. 8.

○ 상품 구매 및 반품 프로그램

public class Test05_buyer {

	public static void main(String[] args) {
		// 상품 구매 및 반품 프로그램
		
		// 1) 상품 만들기 
		// → Product 	클래스
		// → SmartTV 	클래스
		// → Notebook 	클래스
		// → HandPhone 	클래스

		
		// 2) 상품 진열하기
		SmartTV tv= new SmartTV();
		Notebook note= new Notebook();
		Handphone phone= new Handphone();
				
		
		// 3) 상품 구매하기
		// → Buyer 클래스 
		Buyer kim = new Buyer();
		kim.buy(phone);		//150
		kim.buy(note);		//200
		kim.buy(tv);		//100
		kim.buy(phone);		//150
		kim.buy(phone);		//150
		kim.buy(phone);		//150
		kim.buy(phone);		//150
		kim.buy(phone);		//150

		kim.disp();

		System.out.println("-----------------------------------");
		
		// 4) 반품하기
		// → 상품을 중복해서 구매하지 않았다는 전제하에 반품
		// → Order 클래스
		
		Order lee = new Order();
		lee.buy(tv);
		lee.buy(note);
		lee.buy(phone);

		lee.disp();
		
		
		System.out.println("<<<<<<<<<반품");
		lee.refund(note);

		System.out.println("<<<<<<<<<결과");
		lee.disp();
		
		
	}//main() end
	
}//class end

○ 상품 만들기

    - Product 클래스를 상속받아서 SmartTV, Notebook, Handphone클래스 만들고 가격, 상품명 정하기

public class Product extends Object { //extends Object 생략가능

	public int price;      //상품가격
	public int bonusPoint; //마일리지
	
	public Product() {}
	public Product(int price) {	
		this.price = price;                  //this.멤버변수=지역변수
		this.bonusPoint = (int)(price*0.1);  //상품가격의 10%를 보너스 점수로 책정
	}//const end
	
}//class end


class SmartTV extends Product {
	
	public SmartTV() {
		super(100);  //가격 : price=100 > bonusPoint=10
	}

	@Override
	public String toString() {
		return "스마트TV";	//상품명
	}
	
}//class end


class Notebook extends Product {

	public Notebook() {
		super(200);  //가격 : price=200 > bonusPoint=20
	}
	
	@Override
	public String toString() {
		return "노트북";   //상품명
	}
	
}//class end


class Handphone extends Product {

	public Handphone() {
		super(150);  //가격 : price=150 > bonusPoint=15
	}
	
	@Override
	public String toString() {
		return "핸드폰";   //상품명
	}			
	
}//class end

 

○ 상품 구매하기

    - Buyer클래스 : 상품을 구매했을때 어떤 상품을 구매했는지 저장(나의 구매상품 목록)

        ① buy() : 상품 구매시 item에 구매목록 저장

                            → 총재산 감소, 마일리지 증가, 재산보다 많이 구입하면 잔액부족 출력

        ② disp() : 구매한 상품 목록, 사용금액, 마일리지, 남은 재산 출력

public class Buyer {

    private int myMoney=1000; //나의 총재산
    private int myMileage=0;  //나의 마일리지 점수(bonusPoint 누적)
    private int i=0;
    private Product[] item = new Product[10]; //구매한 상품 목록
	
    public Buyer() {}
    
    public void buy(Product p) {
    
        item[i++]=p;
		
        this.myMoney=this.myMoney-p.price;          //나의 재산은 감소
        this.myMileage=this.myMileage+p.bonusPoint; //나의 마일리지는 증가
				
        //나의 재산보다 많이 구입하면 잔액부족이 뜨도록
        if(this.myMoney<0) {
            item[--i]=null; //잔액부족시 직전에 구입한 상품 삭제
            this.myMoney=this.myMoney+p.price;
            this.myMileage=this.myMileage-p.bonusPoint;
            System.out.println("잔액부족");
        }
        
    }//buy() end	    

    public void disp() {
		
		//구매한 상품의 총 합계 금액
		int hap = 0;   //item[n].price > item[n](=p)이 가지고 있는 price
		
		//구매한 상품 목록 
		StringBuilder shoplist=new StringBuilder();
		for(int n=0; n<item.length; n++) {			
			if(item[n]==null) {
				break;
			}
			shoplist.append(item[n].toString()+" "); //상품명
			hap=hap+item[n].price;
		}
		
		System.out.println("구매 상품 목록 : " + shoplist);
		System.out.println("사용금액 : " + hap);
		System.out.println("나의 남은 재산 : " + this.myMoney);
		System.out.println("나의 마일리지 : " + this.myMileage);
		
	}//disp() end
	
}//class end

 

○ 반품하기

    - Order클래스 : Buyer클래스 + 상품을 중복해서 구매하지 않았다는 전제하에 반품

        ① buy() : 상품 구매시 item에 구매목록 저장

                         → 총재산 감소, 마일리지 증가, 재산보다 많이 구입하면 잔액부족 출력

        ② refund() : 상품이 목록에 존재하면 지우고, 재산 증가, 마일리지 감소

        ③ disp() : 구매한 상품 목록, 사용금액, 마일리지, 남은 재산 출력

import java.util.Vector;

public class Order {

	private int myMoney=1000; 	//나의 총재산
	private int myMileage=0;	//나의 마일리지 점수(bonusPoint 누적)
	private Vector<Product> item = new Vector<Product>();
	
	public void buy(Product p) { 

		if(p.price>this.myMoney) {
		System.out.println("잔액이 부족합니다!!");
		return;
		}
		
		item.add(p);
		this.myMoney=this.myMoney-p.price;
		this.myMileage=this.myMileage+p.bonusPoint;

	}//buy() end	


	public void refund(Product p) {
		
		if(item.remove(p)) {
			System.out.println(p.toString() + " 반품되었습니다");
			this.myMoney=this.myMoney+p.price;
			this.myMileage=this.myMileage-p.bonusPoint;
		}else {
			System.out.println("구매내역에 상품이 없습니다");
		}//if end

	}//refund() end
	
	
	public void disp() {
		
		if(item.isEmpty()) {
			System.out.println("구매한 상품이 없습니다");
			return;
		}
		
		int hap = 0;
				
		StringBuilder shoplist=new StringBuilder();
		for(int n=0; n<item.size(); n++) {			
			shoplist.append(item.get(n)+" "); 
			hap=hap+item.get(n).price;
		}
		
		System.out.println("구매 상품 목록 : " + shoplist);
		System.out.println("사용금액 : " + hap);
		System.out.println("나의 남은 재산 : " + this.myMoney);
		System.out.println("나의 마일리지 : " + this.myMileage);
		
	}//disp() end
	
}//class end

댓글