3-1. 키오스크 재고 관리 시스템

문제설명

카페 키오스크에는 3가지 메뉴(아메리카노, 라떼, 모카)를 조회하고 주문할 수 있다.

 

관리자는 메뉴 항목별 재고와 가격을 등록한다. 예를 들어, 각 메뉴 항목의 재고와 가격은 배열에 저장한다.

  • 아메리카노: 재고 3개, 가격 3000원
  • 라떼: 재고 3개, 가격 4000원
  • 모카: 재고 3개, 가격 4500원

사용자가 메뉴를 조회한 뒤 항목 번호와 주문 개수를 입력하면, 주문 내역(항목, 개수, 금액, 전체 금액)을 출력하고 재고를 감소시킨다. 재고보다 많은 수량을 주문하거나 재고가 0이면 "품절"을 출력한다. 이 과정을 사용자가 0을 입력할 때까지 반복한다. 


목표

  • 전역변수(global), static 변수 사용
  • const 상수 사용 (상수 정의 대신 #define MENU_COUNT 3 사용)
  • 배열과 반복문과 조건문 함께 사용
  • 재고 및 가격 관리

요구사항

 

  • 키오스크 메뉴 항목은 3개로 고정되어 있다. 
  • 키오스크 메뉴 항목 3개를 입력받고, 각각의 금액과 재고도 입력받는다. 
  • 메뉴명과 재고는 배열로 받고, 프로그램 전체에서 사용할 수 있다.
  • 주문 횟수를 관리하여 재고처리를 한다.
  • 메뉴 번호가 1~3이면 아메리카노, 라떼, 모카순으로 주문 처리
  • 재고가 0이면 "품절"을 출력하고 주문되지 않음
  • 0을 입력하면 종료

 

출력예시

1. 아메리카노 - 3000원 (재고: 3)
2. 라떼 - 4000원 (재고: 3)
3. 모카 - 4500원 (재고: 3)
0. 종료
선택할 메뉴 번호 입력: 2
주문 개수 입력: 2

주문 내역
항목: 라떼
개수: 2
금액: 8000원
전체금액: 8000원
1. 아메리카노 - 3000원 (재고: 3)
2. 라떼 - 4000원 (재고: 1)
3. 모카 - 4500원 (재고: 3)
0. 종료
선택할 메뉴 번호 입력: 2
주문 개수 입력: 2
품절
 
선택할 메뉴 번호 입력: 0
프로그램 종료
 

코드예시

더보기
더보기
#include <stdio.h>

#define MENU_COUNT 3

char menu_names[MENU_COUNT][20];
int prices[MENU_COUNT];
int stock[MENU_COUNT];

void print_menu(void)
{
    printf("\n===== 메뉴 =====\n");

    for (int i = 0; i < MENU_COUNT; i++) {
        printf("%d. %s - %d원 (재고: %d)\n",
               i + 1, menu_names[i], prices[i], stock[i]);
    }

    printf("0. 종료\n");
}

void order_menu(int menu_number, int quantity)
{
    static int total_sales = 0;

    int index = menu_number - 1;
    int cost;

    if (stock[index] < quantity) {
        printf("품절\n");
        return;
    }

    stock[index] -= quantity;

    cost = prices[index] * quantity;
    total_sales += cost;

    printf("\n주문 내역\n");
    printf("항목: %s\n", menu_names[index]);
    printf("개수: %d\n", quantity);
    printf("금액: %d원\n", cost);
    printf("전체금액: %d원\n", total_sales);
}

int main(void)
{
    int menu_number;
    int quantity;

    printf("=== 관리자 메뉴 등록 ===\n");

    for (int i = 0; i < MENU_COUNT; i++) {
        printf("%d번 메뉴 이름 입력: ", i + 1);
        scanf("%s", menu_names[i]);

        printf("%d번 메뉴 가격 입력: ", i + 1);
        scanf("%d", &prices[i]);

        printf("%d번 메뉴 재고 입력: ", i + 1);
        scanf("%d", &stock[i]);
    }

    while (1) {
        print_menu();

        printf("선택할 메뉴 번호 입력: ");
        scanf("%d", &menu_number);

        if (menu_number == 0) {
            printf("프로그램 종료\n");
            break;
        }

        if (menu_number < 1 || menu_number > MENU_COUNT) {
            printf("잘못된 메뉴 번호입니다.\n");
            continue;
        }

        printf("주문 개수 입력: ");
        scanf("%d", &quantity);

        if (quantity <= 0) {
            printf("주문 개수는 1개 이상이어야 합니다.\n");
            continue;
        }

        order_menu(menu_number, quantity);
    }

    return 0;
}
 
 
 

 

 

3-4. 게임 아이템 상점 관리

 

문제설명

게임 상점에는 아이템이 있다. 관리자는 아이템 이름, 가격, 재고를 입력하여 등록한다. 예를 들어 관리자가 다음과 같이 입력할 수 있다.

1번 아이템: Potion, 300원, 재고 5개
2번 아이템: Sword, 1000원, 재고 2개
3번 아이템: Shield, 800원, 재고 1개
...
 

사용자는 상점에서 아이템 번호와 구매 개수를 입력하여 아이템을 구매할 수 있다. 구매가 성공하면

  • 아이템 이름
  • 구매 개수
  • 구매 금액
  • 전체 누적 구매 금액

을 출력하고, 재고를 감소시킨다. 재고보다 많이 구매하려 하면 "재고 부족"을 출력한다. 이 과정을 사용자가 0을 입력할 때까지 반복하시오.

 

목표

  • 배열에 문자열, 가격, 재고 등록
  • 배열 값을 읽고 수정
  • 전역변수, static 변수, 반복문, 조건문 활용
  • 등록한 정보를 프로그램에서 계속 사용

요구사항

  • 아이템 이름, 가격, 재고를 각각 배열에 저장할 것
  • 구매가 성공하면 재고를 감소시킬 것
  • 총 구매 금액은 함수 안의 static 변수로 관리할 것
  • 종료 번호는 0

출력예시

=== 아이템 등록 ===
1번 아이템 이름 입력: Potion
1번 아이템 가격 입력: 300
1번 아이템 재고 입력: 5

2번 아이템 이름 입력: Sword
2번 아이템 가격 입력: 1000
2번 아이템 재고 입력: 2
===== 상점 =====
1. Potion - 300원 (재고: 5)
2. Sword - 1000원 (재고: 2)
3. Shield - 800원 (재고: 1)
0. 종료

구매할 아이템 번호 입력: 2
구매 개수 입력: 1

구매 내역
아이템: Sword
개수: 1
금액: 1000원
전체 구매 금액: 1000원
구매할 아이템 번호 입력: 3
구매 개수 입력: 2
재고 부족

 

 

코드예시

더보기
더보기
#include <stdio.h>

#define MAX_MENU 100
#define NAME_SIZE 20

char menu_names[MAX_MENU][NAME_SIZE];
int prices[MAX_MENU];
int stock[MAX_MENU];
int menu_count = 0;

void register_menus(void);
void print_menus(void);
void order_menu(void);

void register_menus(void)
{
    int i = 0;

    while (1) {
        int stop;

        printf("\n%d번 메뉴 이름 입력: ", i + 1);
        scanf("%s", menu_names[i]);

        printf("%d번 메뉴 가격 입력: ", i + 1);
        scanf("%d", &prices[i]);

        printf("%d번 메뉴 재고 입력: ", i + 1);
        scanf("%d", &stock[i]);

        i++;
        menu_count = i;

        if (i >= MAX_MENU) {
            printf("더 이상 메뉴를 등록할 수 없습니다.\n");
            break;
        }

        printf("계속 등록하시겠습니까? (1: 계속, 0: 종료): ");
        scanf("%d", &stop);

        if (stop == 0) {
            break;
        }
    }
}

void print_menus(void)
{
    printf("\n===== 메뉴 =====\n");

    for (int i = 0; i < menu_count; i++) {
        printf("%d. %s - %d원 (재고: %d)\n",
               i + 1, menu_names[i], prices[i], stock[i]);
    }

    printf("0. 종료\n");
}

void order_menu(void)
{
    static int total_sales = 0;

    int menu_number;
    int quantity;
    int index;
    int cost;

    while (1) {
        print_menus();

        printf("선택할 메뉴 번호 입력: ");
        scanf("%d", &menu_number);

        if (menu_number == 0) {
            printf("프로그램 종료\n");
            break;
        }

        if (menu_number < 1 || menu_number > menu_count) {
            printf("잘못된 메뉴 번호입니다.\n");
            continue;
        }

        printf("주문 개수 입력: ");
        scanf("%d", &quantity);

        if (quantity <= 0) {
            printf("주문 개수는 1개 이상이어야 합니다.\n");
            continue;
        }

        index = menu_number - 1;

        if (stock[index] < quantity) {
            printf("품절\n");
            continue;
        }

        stock[index] -= quantity;
        cost = prices[index] * quantity;
        total_sales += cost;

        printf("\n주문 내역\n");
        printf("항목: %s\n", menu_names[index]);
        printf("개수: %d\n", quantity);
        printf("금액: %d원\n", cost);
        printf("전체금액: %d원\n", total_sales);
    }
}

int main(void)
{
    printf("=== 관리자 메뉴 등록 ===\n");
    register_menus();

    if (menu_count == 0) {
        printf("등록된 메뉴가 없습니다.\n");
        return 0;
    }

    order_menu();

    return 0;
}

 

+ Recent posts