JAVA

[멘토씨리즈] 16강 - 카페 주문 프로그램 제작

보라해바라기 2023. 5. 24. 23:34
SMALL

1. 동작원리

<카페 프로그램 기능>

(1) 주문하기: 주문 가능 메뉴 출력 > 메뉴 입력 > 가격 총 금액 누적 > 전체 메뉴 리스트에 저장 > 주문 갯수 한 개 증가

(2) 취소하기: 주문 메뉴 리스트 출력 > 취소 메뉴 입력 > 입력 메뉴를 리스트에서 제거 > 금액 감소 > 주문 갯수 한 개 감소

(3) 결제하기: 결제 총 금액 출력 > 지불 금액 입력 > 금액 확인 > 주문리스트 0원으로 초기화 > 전체 갯수 0개로 초기화

(4) 끝내기: 원할 때 끝내기

 

2. 코드

import java.io.*;
import java.util.*; // scanner, random

// 카페 주문 프로그램 알고리즘

public class Main {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    int total_num = 0; // 전체 개수 저장
    String[] menu_arr = new String[5];
    // 주문 메뉴 저장 배열 (메뉴 주문은 5개까지 가능)
    int total_money = 0; // 총 금액 저장

    // 무한 반복
    while (true) {
      System.out.println(" ♥ CAFE ♥ ");
      System.out.println("1. 주문하기");
      System.out.println("2. 취소하기");
      System.out.println("3. 결제하기");
      System.out.println("4. 끝내기");
      System.out.print("입력: ");
      int num = sc.nextInt();

      // 입력 값에 따라 실행 다르게!
      if (num == 1) { // 주문하기
        String menuName = ""; // 메뉴 이름
        int menuPrice = 0; // 메뉴 금액
        System.out.println("1. 아메리카노 \t3800원");
        System.out.println("2. 에스프레소 \t2400원");
        System.out.println("3. 카페라떼 \t4200원");
        System.out.println("4. 밀크티 \t\t5100원");
        System.out.print("주문 할 메뉴 번호: ");

        int menuNum = sc.nextInt();
        if (menuNum == 1) {
          menuName = "아메리카노";
          menuPrice = 3800;
        } else if (menuNum == 2) {
          menuName = "에스프레소";
          menuPrice = 2400;
        } else if (menuNum == 3) {
          menuName = "카페라떼";
          menuPrice = 4200;
        } else if (menuNum == 4) {
          menuName = "밀크티";
          menuPrice = 5100;
        } else {
          System.out.println("메뉴 번호 잘못 입력!");
          continue; // 처음으로 돌아가라!
        }
        total_money += menuPrice;
        menu_arr[total_num] = menuName;
        // total_num : 내가 현재 menuName을 넣어야 할 문자열의 위치!
        total_num++;
        System.out.println("주문한 메뉴는 " + menuName + "입니다.");
        System.out.println("가격은 " + menuPrice + "원 입니다.");

      } else if (num == 2) { // 취소하기
        System.out.println("---주문한 메뉴 리스트---");
        for (int i = 0; i < total_num; i++) {
          System.out.println(menu_arr[i]);
        }

        System.out.print("취소 할 메뉴 번호: ");

        int delNum = sc.nextInt();
        if (delNum >= 1 && delNum <= total_num) {
          String delMenu = menu_arr[delNum - 1];
          // 인덱스 값은 "번호 - 1"
          System.out.println(delMenu + "메뉴 삭제!");
          for (int i = delNum - 1; i < total_num; i++) {
            menu_arr[i] = menu_arr[i + 1];
            // 삭제 된 부분으로 인해 뒷 값을 앞으로 위치 변경
          }
          if (delMenu.equals("아메리카노")) {
            // equals (같은지 판단)
            total_money -= 3800;
          } else if (delMenu.equals("에스프레소")) {
            total_money -= 2400;
          } else if (delMenu.equals("카페라떼")) {
            total_money -= 4200;
          } else if (delMenu.equals("밀크티")) {
            total_money -= 5100;
          }
          total_num--;
        }

      } else if (num == 3) { // 결제하기
        System.out.println("결제 금액: " + total_money + "원");
        System.out.println("지불 금액: ");
        int money = sc.nextInt();
        if (money < total_money) {
          System.out.println("지불 금액이 부족합니다.");
          continue;
        } else {
          System.out.println("잔돈은 " + (money - total_money) + "원 입니다.");
          for (int i = 0; i < 5; i++) {
            menu_arr[i] = ""; // 초기화
          }
          total_num = 0;// 초기화
        }
      } else if (num == 4) { // 끝내기
        System.out.println("반복 종료");
        break;
      } else {
        System.out.println("주문 번호 잘못 입력!");
      }

    }
  }
}

 

3. 개념 짚기

- 무한 반복 (종료 조건과 함께 사용!) -> while(true) 

- 조건문 종료 시 break, 계속 진행 시 continue

- 문자열 배열 String[]

728x90