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);
기능
- 메뉴구분(커피/디저트)을 입력받는다.
- 주문할 메뉴번호(menu_id)를 입력받는다.
- 해당 메뉴가 존재하지 않으면 오류 메시지를 출력한다.
- 품절(status == 0)인 경우 주문할 수 없다.
- 주문 수량을 입력받는다.
- 주문 배열에 주문 정보를 저장한다.
- 여러 개의 메뉴항목을 주문할 수 있도록 구현한다.
- 주문 종료 시 총 주문 금액을 계산한다.
- 결제방식을 입력받는다.
- 1: 신용카드
- 2: 카카오페이
- 최종 주문 결과를 출력한다.
출력형식
메뉴구분 (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. 구현 조건
- 메뉴 검색은 반드시 find_menu_index() 함수를 사용하여 검색할 것
- 품절 메뉴는 주문 불가능하게 구현할 것
- 주문은 최대 10건의 주문이 가능하고, 한 주문당 주문항목은 최대 5건이 가능하다.
- 주문 메뉴명은 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
'[1] 프로그래밍1 및 실습(C언어) > [과제] 콘솔 키오스크' 카테고리의 다른 글
| [콘솔키오스크] 과제 5단계. 동적 메모리 할당 적용[5/28] (0) | 2026.05.22 |
|---|---|
| [콘솔키오스크] 과제 4단계. 주문관리-재고(선택) 및 파일 분할 [5/21] (0) | 2026.05.17 |
| [콘솔키오스크] 과제 2단계. 메뉴 관리 기능 구현 [5/7] - 결과 예시 (0) | 2026.05.10 |
| [콘솔키오스크] 과제 2단계. 메뉴 관리 기능 구현 [5/7] (0) | 2026.05.07 |
| [콘솔키오스크] 과제 1단계. Intro - 키오스크 과제[4/30] - 결과 예시 (0) | 2026.05.03 |