JAVA/JAVA 예제

[JAVA] 반복문 예제 (자판기 만들기)

웹코린이 2023. 5. 17. 17:25
728x90

[문제]

[ 자판기 프로그램 ] 
상품 이름, 가격, 개수 입력 받기
구매하기 / 종료하기
종료하기 : 프로그램 종료
구매하기 
  Ex)아메리카노,카페라떼,아이스티등의 메뉴를 출력
구매 개수 선택
가격 안내
현금 입력 --> 거스름돈 반환
재고 데이터 있음

1. 상품 이름 입력 받기

int N = 2; // 상품이 2개라는 뜻

String mName[] = new String[N]; // 상품 이름 배열
while (true) {

	if (index == N) {	// 상품이름이 N개 입력 받는다면
		break;
	}

	System.out.print((index + 1) + "번 상품 이름 입력 : ");	
	mName[index] = sc.next(); // 상품 이름 입력
	System.out.println(mName[index] + "(이)가 맞나요?");
	System.out.print("1. Yes  2. No ");
	int ans = sc.nextInt();	// 상품 이름이 맞는지 입력

	if (ans != 1) {		// 답이 No라면
		System.out.println("다시 입력하세요 ! ");
		continue;	// while문으로 이동
	}
	index++;	// 0번 인덱스에 이름이 채워졌으므로 1번 인덱스로 이동
}

 

1-1. 상품 가격 입력 받기

가격 배열 안에 선언된 'N'은 위에서 선언한 'int N = 2;'랑 같은 변수이다.

int mPrice[] = new int[N]; // 상품 가격 배열
for (int i = 0; i < mPrice.length; i++) {
	System.out.print(mName[i] + "상품 가격 입력 : ");
	mPrice[i] = sc.nextInt();	// 상품 가격 입력
	System.out.println(mName[i] + "상품 가격 " + mPrice[i] + "원 저장 완료!");
	System.out.println();
    }

 

1-2. 상품 개수 입력 받기

위와 마찬가지로 재고 배열 안에 선언된 'N'은 위에서 선언한 것과 같다.

int mCnt[] = new int[N]; // 상품 재고 배열
for (int i = 0; i < mCnt.length; i++) {
	System.out.print(mName[i] + "의 개수 입력: ");	
	mCnt[i] = sc.nextInt();		// 상품 개수 입력
	System.out.println(mName[i] + "상품 개수 " + mCnt[i] + "개 저장 완료!");
}

 

2. 구매 / 종료 (종료 조건)

// 상품 구매, 종료 입력
while (true) {
	System.out.println("1. 구매 2. 종료");		
	System.out.print("입력) ");
	int action = sc.nextInt();		// 구매 or 종료 입력

	if (action == 2) { 				// 2번을 입력했다면
		System.out.println("프로그램 종료");	
		System.out.println();
		break;						// while문 탈출
	} else if (action < 1 || action > 2) {	// 유효성 검사 (1이나 2를 입력하지 않았을 시)
		System.out.println("유효하지 않은 값입니다,");
		System.out.println("다시 입력하세요.");
		continue;					// while문 처음으로 이동
}

 

2-1. '구입'을 입력했을 시 메뉴 목록 및 재고 개수 출력

//	구입을 입력했을 시 메뉴목록 및 재고 개수 출력
while (true) {
	System.out.println("=====메뉴목록=====");		
	for (int i = 0; i < mName.length; i++) {
		System.out.print((i + 1) + ". " + mName[i] + "[");
		if (mCnt[i] == 0) {		// 재고가 0개라면
			System.out.print("재고 없음");	 // 재고 없음 출력
		} else {				// 재고가 있을 시
			System.out.print(mCnt[i]);	// 재고 개수 출력
		}
			System.out.println("]");
	}
	System.out.println("================");		
	System.out.print("구매할 상품 번호 입력) ");
	num = sc.nextInt();		// 구매할 상품 입력

	if ((1 <= num && num <= N) && (mCnt[num - 1] > 0)) { //	1 ~ 4 사이이고, 재고도 있어야 한다
		break;			// 정상적으로 입력했다면 while문 탈출
	} else if (num < 1 || num > N) {		// 번호를 잘못 입력했을 시
		System.out.println("없는 상품입니다.");
	} else if (mCnt[num - 1] == 0) {		// 재고가 0개라면
		System.out.println("재고가 없어서 구매가 불가능합니다.");
	}
}

 

3. 선택한 상품 안내 및 가격 안내

int cnt = 0; // 개수 입력 변수 선언
            
while (true) {
	System.out.println("선택한 상품은 " + mName[num - 1] + "입니다.");
	System.out.println("가격은 " + mPrice[num - 1] + "원 이고, " + "재고는 " + mCnt[num - 1] + "개 입니다.");
	System.out.print("구매할 개수 입력) ");
	cnt = sc.nextInt();		// 구매할 물품 개수 입력

	if (0 <= cnt && cnt <= mCnt[num - 1]) { // 제대로 입력했다면
		break;	// while문 탈출
	} else if (mCnt[num - 1] == 0) {	// 재고의 개수가 0개라면
		System.out.println("재고가 없습니다.");
		System.out.println("다시 선택해주세요.");
		continue;	//while문 처음으로 이동
	}
}

 

4. 지불할 금액 입력 및 거스름돈 반환

int reult = 0;
while (true) {
	result = mPrice[num - 1] * cnt; // 물품 한개의 가격 * 개수
	System.out.println("지불하실 금액은 " + result + "원 입니다.");
	System.out.print("돈 입력) ");
	money = sc.nextInt(); // 지불할 돈 입력

	if (result <= money) {	// 지불할 돈이 물품 가격보다 많다면
		break;  //while문 탈출
	}

	System.out.println("다시 선택해주세요.");	  // 그렇지 않다면 출력
}

	result = money - result; // 거스름돈 계산
	if (result != 0) {	// 거스름돈이 0원이 아니라면
		System.out.println("거스름돈은 " + result + "원 입니다. ");
	}
	System.out.println("구매 완료!");

mCnt[num - 1] -= cnt; // 장바구니에 넣고 안산 경우를 생각해서 반복문이 끝날 때 재고 -1 코드 배치

[실행 결과]

1번 상품 이름 입력 : 콜라
콜라(이)가 맞나요?
1. Yes  2. No 1

2번 상품 이름 입력 : 사이다
사이다(이)가 맞나요?
1. Yes  2. No 1

콜라상품 가격 입력 : 1000
콜라상품 가격 1000원 저장 완료!

사이다상품 가격 입력 : 1500
사이다상품 가격 1500원 저장 완료!

콜라의 개수 입력: 5
콜라상품 개수 5개 저장 완료!

사이다의 개수 입력: 5
사이다상품 개수 5개 저장 완료!

1. 구매 2. 종료
입력) 1

=====메뉴목록=====
1. 콜라[5]
2. 사이다[5]
================
구매할 상품 번호 입력) 1

선택한 상품은 콜라입니다.
가격은 1000원 이고, 재고는 5개 입니다.
구매할 개수 입력) 5

지불하실 금액은 5000원 입니다.
돈 입력) 6000

거스름돈은 1000원 입니다. 
구매 완료!

1. 구매 2. 종료
입력) 1
=====메뉴목록=====
1. 콜라[재고 없음]
2. 사이다[5]
================
구매할 상품 번호 입력) 1
재고가 없어서 구매가 불가능합니다.

=====메뉴목록=====
1. 콜라[재고 없음]
2. 사이다[5]
================
구매할 상품 번호 입력) 2

선택한 상품은 사이다입니다.
가격은 1500원 이고, 재고는 5개 입니다.
구매할 개수 입력) 5

지불하실 금액은 7500원 입니다.
돈 입력) 7500
구매 완료!

 

728x90