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

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

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;
}

 

 

'C > 본수업' 카테고리의 다른 글

[2025.03.30] 1차, 2차 배열 함수 전달인자로 사용하기  (0) 2025.03.31
[2025.03.28] 1차 배열과 포인터  (0) 2025.03.28
[2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사  (0) 2025.03.14
[2025.03.13] Ch.07_C의 제어몬: 분기와 점프_자판기 만들기  (0) 2025.03.13
[2025.03.12] Ch.06_C의 제어문: 루프_별찍기  (0) 2025.03.12
'C/본수업' 카테고리의 다른 글
  • [2025.03.30] 1차, 2차 배열 함수 전달인자로 사용하기
  • [2025.03.28] 1차 배열과 포인터
  • [2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사
  • [2025.03.13] Ch.07_C의 제어몬: 분기와 점프_자판기 만들기
polibo
polibo
Polibo의 개발 성장기 지켜봐주십슈 (콩 싫어해요.)
  • polibo
    Polibo와 개발 콩나무 키우기
    polibo
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • Python (23)
      • C (32)
        • 본수업 (19)
        • 예습 (7)
        • 개인프로젝트01 - 로또 (3)
        • 개인프로젝트02 - 복켓몬 키우기 (2)
        • 개인프로젝트03 - 김복천국 POS기 (1)
        • 팀프로젝트01 - 용사 복이의 대모험 RPG (0)
        • 팀프로젝트02 - 메일 프로그램 (0)
      • TCP_IP (0)
      • DB (1)
      • C++ (7)
        • 개인프로젝트01 - 숫자야구 (0)
      • QT (1)
        • 개인프로젝트01 - 숫자야구 (0)
        • 팀프로젝트01 - 키오스크 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c우선순위
    순서도
    파이썬
    c언어
    파이썬게임
    for문
    조건문
    c언어 scanf
    파이썬반복문
    Python
    파이썬 숫자야구
    반복문
    if문
    while문
    파이썬조건문
    else if
    파이썬예제
    C
    문자열
    코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
polibo
[2025.03.14] Ch.09_함수_자판기 만들기 함수화 (동영상 포함)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.