1. 문제설명

과제 2단계에서 구현한 메뉴 관리 기능을 기반으로 등록된 메뉴를 조회하여 메뉴항목을 하나 이상 선택하여 주문을 할 수 있도록 기능을 구현한다. 

2단계 코드: [콘솔키오스크] 과제 2단계. 메뉴 관리 기능 구현 [5/7] - 결과 예시

2. 목표

  • 구조체 배열을 활용하여 주문 데이터를 저장할 수 있다.
  • 메뉴 배열을 순회하여 원하는 메뉴를 검색할 수 있다.
  • 배열의 포인터를 함수의 인자로 전달할 수 있다.
  • 주문 항목을 여러 개 저장할 수 있다.
  • 총 주문 금액을 계산할 수 있다.

3. 요구사항

3.1 OrderItem 구조체 정의

다음의 주문 항목 정보를 구조체로 정의하시오. 단 typedef로 구조체 type의 별명(alias)을 OrderItem으로 정의하시오.

자료구조 멤버 이름 멤버자료형 설명
주문 항목: OrderItem
  메뉴번호(menu_id) int 주문한 메뉴의 ID
  메뉴명(name) 문자배열[20] 주문한 메뉴명
  가격(price) int 주문 당시의 메뉴 단가
  수량(quantity) int 해당 메뉴의 주문 수량

 

3.2 Order 구조체 정의

다음의 주문 정보를 구조체로 정의하시오. 단 typedef로 구조체 type의 별명(alias)을 Order로 정의하시오.

자료구조 멤버이름 멤버 자료형 설명
주문 정보: Order
  주문번호(order_id) int serial 3자리. 마지막 order_id + 1로 증가하며, 삭제된 ID는 재사용하지 않는다.
  주문항목목록(order_item_list) OrderItem[5] 한 번의 주문에 포함된 주문 항목 목록
  주문항목개수(order_count) int 현재 주문에 담긴 주문 항목 수
  총 주문금액(total_price) int 각 주문항목의 price × quantity 합계
  결제방식(payment_method) int 1. 신용카드, 2. 카카오페이

 

3.3 주문 기능 구현

함수

void order(void);
 

기능

  1. 메뉴구분(커피/디저트)을 입력받는다.
  2. 주문할 메뉴번호(menu_id)를 입력받는다.
  3. 해당 메뉴가 존재하지 않으면 오류 메시지를 출력한다.
  4. 품절(status == 0)인 경우 주문할 수 없다.
  5. 주문 수량을 입력받는다.
  6. 주문 배열에 주문 정보를 저장한다.
  7. 여러 개의 메뉴항목을 주문할 수 있도록 구현한다.
  8. 주문 종료 시 총 주문 금액을 계산한다.
  9. 결제방식을 입력받는다.
    • 1: 신용카드
    • 2: 카카오페이
  10. 최종 주문 결과를 출력한다.

출력형식

메뉴구분 (1. 커피, 2. 디저트): 1
====================[Coffee]======================
No   Name                   Price   Status    
----------------------------------------------------
100  Americano               3500   AVAILABLE 
101  Latte                   4000   AVAILABLE 
102  Mocha                   4500   AVAILABLE 
103  VanillaLatte            4800   SOLD OUT  
104  Espresso                2500   AVAILABLE 
==================================================
주문할 메뉴 ID: 101
수량: 2

추가 주문 여부 (1. 예, 0. 아니오): 1

메뉴구분 (1. 커피, 2. 디저트): 2
====================[Dessert]=====================
No   Name                   Price   Status    
----------------------------------------------------
200  Cake                    5000   AVAILABLE 
201  Cookie                  2000   AVAILABLE 
202  Waffle                  4500   SOLD OUT  
203  Macaron                 3000   AVAILABLE 
204  CheeseCake              5500   AVAILABLE 
==================================================

주문할 메뉴 ID: 203
수량: 1

추가 주문 여부 (1. 예, 0. 아니오): 0

결제방식 (1. 카드, 2. 카카오페이): 1

==================== 주문내역 ====================
Latte x 2
Macaron x 1

총 결제금액: 11000
결제방식: CARD
=================================================

 

4. 구현 조건

  1. 메뉴 검색은 반드시 find_menu_index() 함수를 사용하여 검색할 것
  2. 품절 메뉴는 주문 불가능하게 구현할 것
  3. 주문은 최대 10건의 주문이 가능하고, 한 주문당 주문항목은 최대 5건이 가능하다.
  4. 주문 메뉴명은 strcpy()를 이용하여 복사할 것

5. hint

5.1 메뉴 검색 함수 구현- [11주차][포인터와 함수] 2단계 연습문제 - 키오스크 코드 수정하기 2-1번 참조

메뉴 검색 함수 원형

int find_menu_index(MenuItem *menu_list, int count, int menu_id)
 
메뉴 검색 부분 코드
for(int i = 0; i < count; i++)
{
    if(menu_list[i].menu_id == menu_id)
    {
        return i;
    }
}

return -1;
 

5.2  주문항목 저장 부분 코드

order_list[order_count].menu_id = menu_list[index].menu_id;  // menu_item에서 menu_id 받기
strcpy(order_list[order_count].name, menu_list[index].name); // menu_item에서 name 받기
order_list[order_count].price = menu_list[index].price;      // menu_item에서 price 받기
 

5.3  총액 계산  부분 코드

total += order_list[i].price * order_list[i].quantity;
 

5. 제출 형식 

  • 선택1. 통합 파일 : main.c
  • 선택2. 분할 파일: main.c,  kiosk_ui.c, kiosk_ui.h, menu_item.c, menu_item.h, order.h, order.c

 

+ Recent posts