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

더보기
더보기
더보기
typedef struct{
        int menu_id;
        char name[20];
        int price;
        int status;
} MenuItem;

 

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

+ Recent posts