C/본수업

[2025.03.14] Ch.09_함수_자판기 만들기 함수화 (동영상 포함)

polibo 2025. 3. 14. 20:28
(리턴값의 타입) 함수명 (변수, 변수, 변수)
{
    // 실행할 문장
}

ex)
int max_(int num1, int num2)
{
    if (num1>num2)
    {
        return num1;
    }
    return num2;
}

 

 

  • 어제 만들었던 자판기 만들기 코드를 오늘 함수화를 시킴!!
  • continue랑 break 때문에 함수화를 제대로 못시켜서 코드 순서를 바꿔서 continue를 최대한 없애봤다!
  • 어제 왜벌레 만든거 보고 엄청 머리를 띵 맞았다링~~ 너무 좋아서 ㅋㅋㅋ 고마워 왜벌레~~

 

 

★ 만든 함수 리스트

  • 숫자 입력(메뉴 or 금액) 및 메뉴판 보여주는 함수
  • 주문서를 보여주는 함수
  • 구매 후 남은 돈을 계산해주는 함수
  • 추가로 더 구매할건지 물어보는 함수
// 2025.03.14. (금)

// 자판기, 메뉴 5가지
// 콜라 / 사이다 / 이온음료 / 주스 / 물
// 800 / 700 / 600 / 600 / 500
// 돈 넣음 -> 얼마 넣었는지 보여줌.
// 10원보다 적게 넣으면 메뉴선택 / 많으면 추가 돈 입력
// 10, 50, 100, 500, 1000, 5000, 10000, 50000원 만 받음.
// ex) 117원 들어오면 거부
// 정상적인 돈 들어오면, 그 메뉴 뽑아주는데, 몇개 고를건지도 물어봐야함.
// 더 구매할건지 물어보고, no라고 하면 잔돈 받아, yes라고 하면 다시 메뉴고름.
#include <stdio.h>

// 금액 입력 or 메뉴 선택 함수
int select_menu(int total_money) 
{
    int input;
    printf("=================================\n");
    printf("|\t현재 소지금 : %d원\t|\n", total_money);
    printf("============ < MENU > ===========\n");
    printf("1. 콜라\t\t\t(800원)\n");
    printf("2. 사이다\t\t(700원)\n");
    printf("3. 이온음료\t\t(600원)\n");
    printf("4. 주스\t\t\t(600원)\n");
    printf("5. 물\t\t\t(500원)\n\n");
    printf("숫자를 입력해주세요 : ");
    scanf("%d", &input); // 메뉴 or 금액 입력

    return input;
}

// 주문서 보여주는 함수
void order_sheet(int user_menu, int num_menu, int total_money) 
{
    printf("\n┌────────── 주문서 ──────────┐\n");
    printf("│\t메뉴 : %d번\t     │\n", user_menu);
    printf("│\t개수 : %d개\t     │\n", num_menu);
    printf("│\t니돈 : %d원\t     │\n", total_money);
    printf("└────────────────────────────┘\n");
}

// 구매 후 남은 돈 계산하는 함수
int cal_user_money(int total_money, int num_menu, int menu_price)
{
    printf("총 구매금액 : %d원\n", menu_price*num_menu);
    total_money -= menu_price*num_menu;
    printf("현재 소지금 : %d원\n", total_money);

    return total_money;
}

// 추가로 더 구매하는지 묻는 함수
char extra_purchase()
{
    char user_select;
    printf("더 구매하실 건가요? [ y | n ] : ");
    getchar();
    scanf("%c", &user_select);

    return user_select;
}

// main 함수
int main()
{
    int input, user_menu, num_menu, menu_price;
    int total_money = 0; // 사용자의 총 소지금
    char user_select_result; // 더 구매할건지에 대한 유저 선택 (y/n)
    
    while (1)
    {
        input = select_menu(total_money);
        if (0 < input && input < 6) // 메뉴선택 (input이 1~5인 경우)
        {
            user_menu = input; // 용어가 헷갈리니까 user_menu로 바꿔줌.

            printf("몇 개 사실건가요? : ");
            scanf("%d", &num_menu); // 몇개 구매할건지 입력
    
            order_sheet(user_menu, num_menu, total_money);

            if (user_menu == 1)
            {
                menu_price = 800;
                if (total_money >= menu_price*num_menu)
                {
                    total_money = cal_user_money(total_money, num_menu, menu_price);
                    user_select_result = extra_purchase();
                    if (user_select_result == 'n')
                    {
                        printf("잔돈 : %d원\n\n", total_money);
                        break;
                    }
                }
                else
                {
                    printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
                }
            }
            else if (user_menu == 2)
            {
                menu_price = 700;
                if (total_money >= menu_price*num_menu)
                {
                    total_money = cal_user_money(total_money, num_menu, menu_price);
                    user_select_result = extra_purchase();
                    if (user_select_result == 'n')
                    {
                        printf("잔돈 : %d원\n\n", total_money);
                        break;
                    }
                }
                else
                {
                    printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
                }
            }
            else if (user_menu == 3)
            {
                menu_price = 600;
                if (total_money >= menu_price*num_menu)
                {
                    total_money = cal_user_money(total_money, num_menu, menu_price);
                    user_select_result = extra_purchase();
                    if (user_select_result == 'n')
                    {
                        printf("잔돈 : %d원\n\n", total_money);
                        break;
                    }
                }
                else
                {
                    printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
                }
            }
            else if (user_menu == 4)
            {
                menu_price = 600;
                if (total_money >= menu_price*num_menu)
                {
                    total_money = cal_user_money(total_money, num_menu, menu_price);
                    user_select_result = extra_purchase();
                    if (user_select_result == 'n')
                    {
                        printf("잔돈 : %d원\n\n", total_money);
                        break;
                    }
                }
                else
                {
                    printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
                }
            }
            else if (user_menu == 5)
            {
                menu_price = 500;
                if (total_money >= menu_price*num_menu)
                {
                    total_money = cal_user_money(total_money, num_menu, menu_price);
                    user_select_result = extra_purchase();
                    if (user_select_result == 'n')
                    {
                        printf("잔돈 : %d원\n\n", total_money);
                        break;
                    }
                }
                else
                {
                    printf("총 구매 금액은 %d원 입니다. %d원이 부족합니다. 돈을 더 넣어주세요.\n\n", menu_price*num_menu, (total_money-menu_price*num_menu)*(-1));
                }
            }
        }
        else if (input % 10 != 0 || input <= 0) // 입력한 숫자가 10원 단위로 떨어지지 않거나, 0 이하의 숫자를 입력한 경우 continue 사용하여 다시 입력받도록 함.
        {
            printf("잘못된 숫자입니다. 숫자를 다시 입력해주세요.\n");
        }
        else if (input >= 10)  // input이 10 이상이면 돈으로 인식하여 total_money에 input을 더해줌. continue 사용하여 다시 숫자 입력으로 돌아감.
        {
            total_money += input;
            // system("clear");
        }
    }
    return 0;
}