1. 문제 설명
1단계에서 구현한 키오스크 프로그램은 메뉴 화면(UI)과 기능 호출 구조만 존재하는 상태이다. 이번 단계에서는 실제로 카페 메뉴 데이터를 저장하고 관리하는 기능을 구현한다.
2. 목표
- 1단계에서 분석된 데이타 정보중 메뉴 정보를 구조체로 설계한다.
- 구조체 배열을 활용하여 커피 메뉴, 디저트 메뉴를 관리할 수 있다
- 메뉴 등록 / 조회 / 변경 기능을 실제 동작하도록 구현할 수 있다
- UI → 기능 → 데이터 흐름을 연결할 수 있다
3. 요구사항
3.1 데이터 구조 설계
3.1.1 MenuItem 구조체 정의
다음의 1단계에서 도출된 메뉴 정보를 구조체로 정의하시오. 단) typedef로 구조체 type의 별명(alias)을 MenuItem으로 정의하시오.
| 자료구조 | 멤버이름 | 멤버 자료형 | 설명 |
| 메뉴 정보: MenuItem |
|||
| 메뉴번호(menu_id) | int | serical 3자리 [참고] menu_id는 마지막 menu_id + 1로 증가하며, 삭제된 ID는 재사용하지 않는다. |
|
| 메뉴명(name) | 문자배열[20] | ||
| 가격(price): int | int | ||
| 판매상태(status) - | int | 1. 판매중, 2. 품절 | |
Hint
3.1.2 MenuItem type의 coffee list와 dessert list를 배열로 정의하시오.
- 각 list는 최대 10개까지 저장 가능하도록 (배열 size 10) 정의 한다
- coffee list와 dessert list는 전역/로컬 auto/로컬static 중 무엇으로 정의해야 할까?
- 현재 등록된 메뉴 개수를 관리하는 변수를 선언하여 필요시 사용한다.
- coffee 메뉴의 menu_id는 100번 부터 시작하고, dessert menu의 menu_id는 200번부터 시작한다.
예:
#define MAX_MENU 10
MenuItem coffee_list[MAX_MENU];
int coffee_menu_count = 0;
3.2 메뉴관리 기능 구현
과제 1단계에서 만든 함수들을 실제 기능으로 구현한다. 즉, 1단계의 run() 함수에서 기존 switch문을 유지하고, 호출하는 내부 함수만 실제 구현으로 교체한다.
3.2.1 메뉴 등록 기능 - register_menu_item()
요구사항:
- 커피메뉴인지, 디저트 메뉴인지 선택한다.
- 메뉴명, 가격을 입력받는다
- menu_id는 자동 증가로 설정한다
- status는 기본값 “판매중(1)”으로 설정한다
- 배열에 저장한다
출력 예:
메뉴구분 (1. 커피, 2. 디저트): 1
메뉴명 입력: 아메리카노
가격 입력: 3000
[등록 완료]
3.2.2 메뉴 조회 기능 - retrieve_menu_item()
요구사항:
- 모든 메뉴를 출력한다
- 출력 형식:
====================[Coffee]======================
No Name Price Status
==================================================
101 Americano 3000 AVAILABLE
102 Cafe Latte 4000 AVAILABLE
103 Cappuccino 4000 SOLD OUT
104 Vanilla Latte 4500 AVAILABLE
====================[Dessert]=====================
No Name Price Status
==================================================
201 Cheesecake 5000 AVAILABLE
202 Chocolate Cake 5000 AVAILABLE
203 Tiramisu 5500 SOLD OUT
204 Macaron 2000 AVAILABLE
205 Croissant 3000 AVAILABLE
==================================================
3.2.3 메뉴 변경 기능 - modify_menu_item()
요구사항:
- 전체 메뉴를 보여준다.
- 수정할 메뉴 번호 입력
- 수정 항목 선택: 1. 메뉴명, 2. 가격, 3. 판매상태
- 해당 항목을 수정
출력 예:
====================[Coffee]======================
No Name Price Status
==================================================
101 Americano 3000 AVAILABLE
102 Cafe Latte 4000 AVAILABLE
103 Cappuccino 4000 SOLD OUT
104 Vanilla Latte 4500 AVAILABLE
====================[Dessert]=====================
No Name Price Status
==================================================
201 Cheesecake 5000 AVAILABLE
202 Chocolate Cake 5000 AVAILABLE
203 Tiramisu 5500 SOLD OUT
204 Macaron 2000 AVAILABLE
205 Croissant 3000 AVAILABLE
==================================================
수정할 메뉴 번호 입력: 101
수정할 항목(1. 메뉴명, 2. 가격, 3. Status): 2
변경할 가격: 3500
==> 아래와 같이 수정되었습니다.
No: 101
Name: Americano
Price: 3500
Status: AVAILABLE
3.2.4 메뉴 삭제 기능 - delete_menu_item()
요구사항:
- 전체 메뉴를 보여준다.
- 삭제 할 메뉴 번호 입력
- 해당 항목을 삭제
- 해당 항목 삭제후 배열을 재정렬 한다. - 즉 coffee_list[3]의 메뉴가 삭제되었으면 coffee_list[4] 메뉴가 coffee_list[3]으로 이동하고 이를 반복한다.
출력 예:
====================[Coffee]======================
No Name Price Status
==================================================
101 Americano 3000 AVAILABLE
102 Cafe Latte 4000 AVAILABLE
103 Cappuccino 4000 SOLD OUT
104 Vanilla Latte 4500 AVAILABLE
====================[Dessert]=====================
No Name Price Status
==================================================
201 Cheesecake 5000 AVAILABLE
202 Chocolate Cake 5000 AVAILABLE
203 Tiramisu 5500 SOLD OUT
204 Macaron 2000 AVAILABLE
205 Croissant 3000 AVAILABLE
==================================================
삭제할 메뉴 번호 입력: 204
==> 삭제되었습니다.
====================[Coffee]======================
No Name Price Status
==================================================
101 Americano 3000 AVAILABLE
102 Cafe Latte 4000 AVAILABLE
103 Cappuccino 4000 SOLD OUT
104 Vanilla Latte 4500 AVAILABLE
====================[Dessert]=====================
No Name Price Status
==================================================
201 Cheesecake 5000 AVAILABLE
202 Chocolate Cake 5000 AVAILABLE
203 Tiramisu 5500 SOLD OUT
205 Croissant 3000 AVAILABLE
==================================================
3.3 파일 분리 (선택)

- 분할 파일: main.c, kiosk_ui.c, kiosk_ui.h, menu_item.c, menu_item.h
4. 제출 형식
- 선택1. 통합 파일 : main.c
- 선택2. 분할 파일: main.c, kiosk_ui.c, kiosk_ui.h, menu_item.c, menu_item.h
'[1] 프로그래밍1 및 실습(C언어) > [과제] 콘솔 키오스크' 카테고리의 다른 글
| [콘솔키오스크] 과제 3단계. 주문 관리 기능 구현 [5/14] (0) | 2026.05.13 |
|---|---|
| [콘솔키오스크] 과제 2단계. 메뉴 관리 기능 구현 [5/7] - 결과 예시 (0) | 2026.05.10 |
| [콘솔키오스크] 과제 1단계. Intro - 키오스크 과제[4/30] - 결과 예시 (0) | 2026.05.03 |
| [콘솔키오스크] 과제 1단계. Intro - 키오스크 과제 [4/30] (0) | 2026.04.29 |
| [콘솔키오스크] 과제 0단계. Intro - 도서구매 시스템 예제[4/30] (0) | 2026.04.21 |