프로그래밍

[자바 기초] day04 : 자판기 프로그램 만들기 본문

자바/자바 기초

[자바 기초] day04 : 자판기 프로그램 만들기

시케 2023. 5. 8. 14:23
728x90
반응형

2023.05.08.월

자판기 프로그램

[프로그램 개요]
1. 상품은 4개이다
2. 이름은 정하되
3. 가격,재고 랜덤으로 설정한다
4. 1-구매, 2-종료
5. 상품목록을 재고와 함께 출력한다
단, 재고가 없는 상품은 출력하지않는다
   ex) 1-콜라[3] 2-사이다[재고없음] 3-환타[4]


 1 입력시 -> 몇개구매하는지 선택
 2 입력시 -> 재고가 없어서 구매가 불가능
 4 입력시 -> 없는 상품
6. 상품 값 입력 받는다

7. 거스름돈 출력

 

자판기 프로그램

package class02;

import java.util.Random;
import java.util.Scanner;

public class Test01 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		Random rand = new Random();

		int N = 4;						// 상품은 4개이다
		String[] mName = new String[N]; // 메뉴이름 배열
		int[] mPrice = new int[N]; 		// 메뉴 가격 배열
		int[] mCnt = new int[N];

		// 메뉴 입력
		int index = 0;
		while (true) {

			if (index == N) {// 메뉴를 전부 입력시 종료
				break;
			}

			System.out.print((index + 1) + "번째 메뉴명 입력: ");
			mName[index] = sc.next();
			// sc.nextLine() 버퍼 청소

			System.out.println(mName[index] + "이(가) 맞나요?");
			System.out.println("1.YES 2.NO");
			System.out.println();
			int ans = sc.nextInt();

			if (ans != 1) {
				System.out.println("다시 입력하세요");
				continue;
			}
			System.out.println();
			index++; // 올바르게 입력하여 1 답변시 배열 길이 증가
		}

		// 가격 입력
		for (int i = 0; i < mCnt.length; i++) {
			System.out.print((i + 1) + "번째 메뉴 가격 입력: ");
			mPrice[i] = sc.nextInt();
			System.out.println(mName[i] + " 상품 입력 완료");
			System.out.println();
		}

		// 재고 입력
		for (int i = 0; i < mCnt.length; i++) {
			System.out.print((i + 1) + "번째 메뉴 재고 입력: ");
			mCnt[i] = sc.nextInt();
			System.out.println(mName[i] + " 상품 입력 완료");
			System.out.println();
		}

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

			if (action == 2) {
				System.out.println("종료합니다");
				System.out.println();
				break;
			} else if (action < 1 || 2 < action) { // 유효성 검사 : 1,2도 아니라면
				System.out.println("잘못된 입력값입니다.");
				System.out.println("확인후 다시 이용해주세요!~~");
				System.out.println();
				continue;
			}

			// 구매할 상품 선택
			int num;
			while (true) {
				for (int i = 0; i < mName.length; i++) {
					System.out.println();
					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)) {
					break;
				}
				// 없는 상품번호를 입력한 경우
				if (num < 1 || N < num) {
					System.out.print("없는 상품입니다");
				}
				// 구매하려는 상품이 재고가 0일 경우
				else if (mCnt[num - 1] == 0) {
					System.out.print("재고가 없어서 구매가 불가능합니다");
				}

			}

			//재고 확인
			int cnt; // 지역변수의 특성
			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;
				}
				// 구매하려는 상품 수가 재고보다 부족할 경우
				System.out.println("잘못된 입력입니다!");
				System.out.println("다시 입력해주세요!~~");
				System.out.println();
			}

			//상품 값 계산
			int res = mPrice[num - 1] * cnt;
			int money;
			System.out.println("금액: " + res + "원");
			while (true) {
				System.out.print("돈 입력) ");
				money = sc.nextInt();
				
				if (res <= money) {//올바른 입력시 종료
					break;
				}
				//잘못된 값일 경우 다시 입력받음
				System.out.println("잘못된 입력입니다!");
				System.out.println("새로 입력해주세요!");
				System.out.println();
			}

			//거스름돈 계산
			res = money - res;
			if (res != 0) {
				System.out.println("거스름돈 " + res + "원 반환 완료!");
			}
			System.out.println("구매 성공!");
			System.out.println();

			//재고 차감
			mCnt[num - 1] -= cnt; // "장바구니 이슈"를 생각해볼것!

		}

	}

}

 

위의 코드에서는 생략되었지만 메뉴 가격, 재고를 입력받을때에도 "이(가) 맞습니까?" 식의 유효성 검사를 해주면 좋다

 

 

 

실행 후 콘솔

1번째 메뉴명 입력: 아메리카노
아메리카노이(가) 맞나요?
1.YES 2.NO

1

2번째 메뉴명 입력: 라떼
라떼이(가) 맞나요?
1.YES 2.NO

2
다시 입력하세요
2번째 메뉴명 입력: 카페라떼
카페라떼이(가) 맞나요?
1.YES 2.NO

1

3번째 메뉴명 입력: 아이스티
아이스티이(가) 맞나요?
1.YES 2.NO

1

4번째 메뉴명 입력: 스무디
스무디이(가) 맞나요?
1.YES 2.NO

1

1번째 메뉴 가격 입력: 2000
아메리카노 상품 입력 완료

2번째 메뉴 가격 입력: 3000
카페라떼 상품 입력 완료

3번째 메뉴 가격 입력: 3000
아이스티 상품 입력 완료

4번째 메뉴 가격 입력: 4000
스무디 상품 입력 완료

1번째 메뉴 재고 입력: 30
아메리카노 상품 입력 완료

2번째 메뉴 재고 입력: 1
카페라떼 상품 입력 완료

3번째 메뉴 재고 입력: 0
아이스티 상품 입력 완료

4번째 메뉴 재고 입력: 16
스무디 상품 입력 완료

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

1.아메리카노[30]

2.카페라떼[1]

3.아이스티[재고없음]

4.스무디[16]
====================
구매할 상품의 번호를 입력) 3
재고가 없어서 구매가 불가능합니다
1.아메리카노[30]

2.카페라떼[1]

3.아이스티[재고없음]

4.스무디[16]
====================
구매할 상품의 번호를 입력) 5
없는 상품입니다
1.아메리카노[30]

2.카페라떼[1]

3.아이스티[재고없음]

4.스무디[16]
====================
구매할 상품의 번호를 입력) 2
선택한 상품은 카페라떼입니다.
가격: 3000원  재고: 1개
구매할 개수를 입력) 2
잘못된 입력입니다!
다시 입력해주세요!~~

선택한 상품은 카페라떼입니다.
가격: 3000원  재고: 1개
구매할 개수를 입력) 1
금액: 3000원
돈 입력) 2800
잘못된 입력입니다!
새로 입력해주세요!

돈 입력) 4600
거스름돈 1600원 반환 완료!
구매 성공!

1.구매 2.종료
입력) 2
종료합니다

728x90
반응형
Comments