물건 사기 프로그램

Jane·2023년 2월 10일
0

IT 수업 정리

목록 보기
36/124

문제

[7-19] 다음은 물건을 구입하는 사람을 정의한 클래스이다.
이 클래스는 멤버변수 Buyer .로 돈 과 장바구니 를 가지고 있다
제품을 구입하는 기능의 메서드와 장 (돈) (cart) . buy
바구니에 구입한 물건을 추가하는 메서드 구입한 물건의 목록과 사용금액
그리고 남은 add , , 금액을 출력하는 메서드를 완성하시오 summary .

  1. : buy 메서드명
    기 능 지정된 물건을 구입한다 가진 돈 에서 물건의 가격을 빼고 : . (돈) ,
    장바구니 에 담는다 (cart) .
    만일 가진 돈이 물건의 가격보다 적다면 바로 종료한다.
    반환타입 없음 :
    매개변수 구입할 물건 : Product p -

  2. : add 메서드명
    기 능 지정된 물건을 장바구니에 담는다 : .
    만일 장바구니에 담을 공간이 없으면 장바구니의 크기를 배로 늘린 다음에 담는다 ,
    반환타입 없음 :
    매개변수 구입할 물건 : Product p -

  3. : summary 메서드명
    기 능 구입한 물건의 목록과 사용금액 남은 금액을 출력한다 : , .
    반환타입 없음 :
    매개변수 없음 :

연습문제 /ch7/Exercise7_19.java

class Exercise7_19 {
	public static void main(String args[]) {
		Buyer b = new Buyer();
		b.buy(new Tv());
		b.buy(new Computer());
		b.buy(new Tv());
		b.buy(new Audio());
		b.buy(new Computer());
		b.buy(new Computer());
		b.buy(new Computer());
		b.summary();
	}
}

class Buyer {
	int money = 1000;
	Product[] cart = new Product[3]; // 구입한 제품을 저장하기 위한 배열
	int i = 0; // Product cart index 배열 에 사용될

	void buy(Product p) {
		/*
		 (1) . 아래의 로직에 맞게 코드를 작성하시오
         1.1 . 가진 돈과 물건의 가격을 비교해서 가진 돈이 적으면 메서드를 종료한다
         1.2 . 가진 돈이 충분하면 제품의 가격을 가진 돈에서 빼고
         1.3 .(add ) 장바구니에 구입한 물건을 담는다 메서드 호출   3판 연습문제 풀이 定石 57
		 */
	}

	void add(Product p) {
		/*
		 (2) . 아래의 로직에 맞게 코드를 작성하시오 
         1.1 i의 값이 장바구니의 크기보다 같거나 크면 
         	1.1.1 . 기존의 장바구니보다 배 큰 새로운 배열을 생성한다
         	1.1.2 . 기존의 장바구니의 내용을 새로운 배열에 복사한다
         	1.1.3 . 새로운 장바구니와 기존의 장바구니를 바꾼다
         1.2 (cart) . i 1 . 물건을 장바구니 에 저장한다 그리고 의 값을 증가시킨다
		 */
	} // add(Product p)

	void summary() {
		/*
		 (3) . 아래의 로직에 맞게 코드를 작성하시오
         1.1 . 장바구니에 담긴 물건들의 목록을 만들어 출력한다
         1.2 . 장바구니에 담긴 물건들의 가격을 모두 더해서 출력한다
         1.3 (돈) . 물건을 사고 남은 금액 를 출력한다
		 */
	} // summary()
}

class Product {
	int price; // 제품의 가격

	Product(int price) {
		this.price = price;
	}
}

class Tv extends Product {
	Tv() {
		super(100);
	}

	public String toString() {
		return "Tv";
	}
}

class Computer extends Product {
	Computer() {
		super(200);
	}

	public String toString() {
		return "Computer";
	}
}

class Audio extends Product {
	Audio() {
		super(50);
	}

	public String toString() {
		return "Audio";
	}
}

실행결과
잔액이 부족하여 Computer 을 / 를 살수 없습니다
구입한 물건:Tv,Computer,Tv,Audio,Computer,Computer,
사용한 금액:850
남은 금액:150

코드

import java.util.Scanner;

class Product { // 상품 가격을 설정하는 부모 클래스
	protected int price;

	Product(int price) {
		this.price = price;
	}

}

class Tv extends Product { // 상품의 자식 클래스 Tv
	Tv() {
		super(100);
	}

	public String toString() {
		return "Tv";
	}
}

class Computer extends Product { // 상품의 자식 클래스 컴퓨터
	Computer() {
		super(200);
	}

	public String toString() {
		return "Computer";
	}
}

class Audio extends Product { // 상품의 자식 클래스 오디오
	Audio() {
		super(50);
	}

	public String toString() {
		return "Audio";
	}
}

class Buyer {
	int money = 1000;
	Product[] cart = new Product[3];
	int i = 0;

	void buy(Product p) {
		// 나의 돈과 가격을 비교해서, 내 돈이 적으면 종료
		if (this.money < p.price) {
			System.out.println("잔액이 부족합니다.");
			return;
		} else {// 돈이 살 가격이 되면
			this.money -= p.price;
			// 장바구니에 물건을 담는 함수 호출
			add(p);
		}

	}

	void add(Product p) { // Product는 배열
		if (i >= cart.length) { // 인덱스가 배열 크기보다 같거나 크면
			// 배열 크기를 2배로 늘이고
			Product[] cart2 = new Product[cart.length * 2];

			// 내용 복사
			System.arraycopy(cart, 0, cart2, 0, cart.length);

			// 바꿔치기
			cart = cart2;
		}

		cart[i] = p; // 값을 넣고
		i++; // 인덱스 증가
	}

	void summary() {
		String list = "";
		int result = 0;

		// 카트의 이름 목록을 출력한다.
		for (int i = 0; i < cart.length; i++) {
			if (cart[i] == null) {
				break;
			}
			list += (cart[i] + " ");
			result += cart[i].price;
		}

		System.out.println("구입한 물건 : " + list);
		System.out.println("사용 금액 : " + result);
		System.out.println("잔고 : " + money);

	}
}

class JavaPractice {

	public static void main(String[] args) {
		Buyer b = new Buyer(); // 나의 금액 : 1000원
		b.buy(new Tv()); // 100원 ~ 900원
		b.buy(new Computer()); // 200원 ~ 700원
		b.buy(new Tv()); // 100원 ~ 600원
		b.buy(new Audio()); // 50원 ~ 550원
		b.buy(new Computer()); // 200원 ~ 350원
		b.buy(new Computer()); // 200원 ~ 150원
		b.buy(new Computer()); // 잔액 부족 - 150원으로 200원 물건을 사려고 해서
		b.summary();
	}
}

[Console]
잔액이 부족합니다.
구입한 물건 : Tv Computer Tv Audio Computer Computer
사용 금액 : 850
잔고 : 150

profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글