과제 1단계. [카페 키오스크] 기능/데이타 분석, 화면 설계, 코드 템플릿 

1. 요구사항

OO 카페 키오스크 시스템은 고객이 카페 메뉴를 주문할 수 있도록 지원하는 시스템이다. 시스템은 카페에서 판매하는 메뉴 정보를 저장하고, 이를 바탕으로 메뉴 조회, 메뉴 선택, 주문 및 결제 기능을 제공한다.

카페 메뉴는 메뉴번호(menu_id), 메뉴명(name), 가격(price), 판매상태(status)를 관리한다. 판매상태는 판매중 또는 품절로 구분한다.

사용자는 키오스크 화면에서 메뉴 목록을 볼 수 있어야 하며, 메뉴명, 가격, 판매상태가 함께 표시되어야 한다. 품절인 메뉴는 선택할 수 없다.

사용자는 원하는 메뉴를 선택하고 수량을 입력하여 주문할 수 있어야 한다. 한 번의 주문에는 여러 개의 메뉴를 추가할 수 있다. 
주문이 완료되면 시스템은 주문번호(order_id), 주문한 메뉴 목록, 각 메뉴의 수량, 총 주문 금액을 저장해야 한다.

결제는 신용카드 또는 카카오페이 방식으로 진행할 수 있다. 시스템은 결제방식과 결제금액을 저장해야 한다.

결제가 완료되면 시스템은 주문번호, 주문한 메뉴명, 수량, 총 결제금액, 결제방식을 화면에 출력해야 한다.

 

2. 기능분석

2.1. 기능 리스트

1. 카페 메뉴 관리

 - 카페 메뉴 조회
- 카페 메뉴 등록
- 카페 메뉴 수정
- 카페 메뉴 삭제

2. 주문관리

- 주문하기
    -  메뉴 조회 ->  메뉴 선택 (반복하기) -> 카트에 넣기 (반복하기) -> 선택완료
- 결제하기
   -  결제방법 선택 (1. 신용카드, 2. 카카오페이) -> 결제처리
- 주문정보(+결제정보) 출력

 

2.2. 데이타 리스트 - 시스템에서 생성하고 저장하는 정보


1. 메뉴 정보

- 메뉴번호(menu_id)
- 메뉴명(name)
- 가격(price)
- 판매상태(status) - 판매중/품절


2. 주문 정보

2.1 주문 항목
- 메뉴명, 수량

2.2. 주문정보
- 주문 번호(order_id)
- 주문 항목 리스트 (2.1의 주문항목의 리스트)
- 총 금액

2.3 결제정보
- 주문번호
- 결제방식
- 결제금액
- 결제상태 

 

3. 간략 설계

 

3.1 화면 메뉴 설계

=========================================
           SSS 카페 키오스크
=========================================
메뉴관리(관리자용)     주문관리
11. 메뉴 등록         21. 주문하기
12. 메뉴 변경         22. 주문조회
13. 메뉴 삭제
14. 메뉴 조회
0. 종료
=========================================
메뉴 번호를 입력하세요 (0: 종료):

 

 

3.2 모듈(파일) 설계 - (지속적 상세화 진행예정)

 

4. 코드 - 키오스크 메뉴 출력 코드 

선택 1.  통합버전 main.c

 #include <stdio.h>
 
void register_menu_item(void)
{
    printf("[TODO] 메뉴 등록 기능 호출!\n");
}
 
void modify_menu_item(void)
{
    printf("[TODO] 메뉴 변경 기능 호출!\n");
}
 
void delete_menu_item(void)
{
    printf("[TODO] 메뉴 삭제 기능 호출!\n");
}

void retrieve_menu_item(void)
{
    printf("[TODO] 메뉴 조회 기능 호출!\n");
}
 
void order(void)
{
    printf("[주문하기 기능 호출]\n");
}
 
void search_order(void)
{
    printf("[주문조회 기능 호출]\n");
}
 
void print_main_menu(void)
{
    printf("=========================================\n");
    printf("           SSS 카페 키오스크\n");
    printf("=========================================\n");
    printf("메뉴관리(관리자용)     주문관리\n");
    printf("11. 메뉴 등록         21. 주문하기\n");
    printf("12. 메뉴 변경         22. 주문조회\n");
    printf("13. 메뉴 삭제\n");
    printf("14. 메뉴 조회\n");
    printf("0. 종료\n");
    printf("=========================================\n");
}
  
void run(void)
{
    int menu;
 
    while (1)
    {
        print_main_menu();
 
        printf("메뉴 번호를 입력하세요 (0: 종료): ");
        scanf("%d", &menu);
 
        switch (menu)
        {
            case 0:
                printf("프로그램을 종료합니다.\n");
                return;
 
            case 11:
                register_menu_item();
                break;
 
            case 12:
                modify_menu_item();
                break;
 
            case 13:
                retrieve_menu_item();
                break;
 
            case 21:
                order();
                break;
 
            case 22:
                search_order();
                break;
 
            default:
                printf("잘못된 메뉴 번호입니다.\n");
        }
 
        printf("\n");
    }
}
 
int main(void)
{
    run();
    return 0;
}

 

 

 

선택 2. 분할 버전

 

- 파일 분할 개념

  • kiosk_ui.c 파일은 함수의 기능을 구현하고, kiosk_ui.h 파일은 외부(main.c)에서 호출할 수 있는 함수를 보여준다.
  • kiosk_ui.h에 오픈된 함수의 내구 구현을 kiosk_ui.c에 작성한다. 
  • main.c에서 kiosk_ui의 함수를 호출하려면, kiosk_ui.h 파일을 include 한다. 
    • #include "kiosk_ui.h" 
  • 분할된 파일의 c 파일을 컴파일 한다.  
    • main.c 와 kiosk.c 파일을 각각 compile 하여 main.o, kiosk.o를 생성
    • link 단계에서 main.o와 kiosk.o를 합쳐 kiosk.exe 생성  
gcc main.c kiosk_ui.c -o kiosk

 

 

main.c

#include "kiosk_ui.h"

int main(void)
{
    run();
    
    return 0;
}

 

kiosk_ui.h

#ifndef KIOSK_UI_H
#define KIOSK_UI_H

void run(void);

#endif

 

kiosk_ui.c

#include <stdio.h>
#include "kiosk_ui.h"

void register_menu_item(void)
{
    printf("[TODO] 메뉴 등록 기능 호출!\n");
}
 
void modify_menu_item(void)
{
    printf("[TODO] 메뉴 변경 기능 호출!\n");
}
 
void delete_menu_item(void)
{
    printf("[TODO] 메뉴 삭제 기능 호출!\n");
}

void retrieve_menu_item(void)
{
    printf("[TODO] 메뉴 조회 기능 호출!\n");
}
 
void order(void)
{
    printf("[주문하기 기능 호출]\n");
}
 
void search_order(void)
{
    printf("[주문조회 기능 호출]\n");
}
 
void print_main_menu(void)
{
    printf("=========================================\n");
    printf("           SSS 카페 키오스크\n");
    printf("=========================================\n");
    printf("메뉴관리(관리자용)     주문관리\n");
    printf("11. 메뉴 등록         21. 주문하기\n");
    printf("12. 메뉴 변경         22. 주문조회\n");
    printf("13. 메뉴 삭제\n");
    printf("14. 메뉴 조회\n");
    printf("0. 종료\n");
    printf("=========================================\n");
}

void run(void)
{
    int menu;

    while (1)
    {
        print_main_menu();

        printf("메뉴 번호를 입력하세요 (0: 종료): ");
        scanf("%d", &menu);

        switch (menu)
        {
            case 0:
                printf("프로그램을 종료합니다.\n");
                return;

            case 11:
                register_menu_item();
                break;

            case 12:
                modify_menu_item();
                break;

            case 13:
                retrieve_menu_item();
                break;

            case 21:
                order();
                break;

            case 22:
                search_order();
                break;

            default:
                printf("잘못된 메뉴 번호입니다.\n");
        }

        printf("\n");
    }
}
 



+ Recent posts