us1s

C언어_프로그래밍 자판기 본문

cODING

C언어_프로그래밍 자판기

늑머 2020. 7. 8. 01:59
/* 
Version ... 
1.1     구체적인 알고리즘 작성 
1.2     출력 인터페이스 작성 및 메뉴 선정 
1.3     switch문 작성_1 
1.4                  _2 
1.5     인터페이스, 출력값 정리 
1.6     금액 투입 작성 
1.7     C6001 에러 수정 
1.8     무한루프 발생 -> 수정 요함 
2.0     전체적인 개편 
3.0     무한루프로 인한 재 작성 
3.1     전체적인 코드 및 필요없는 변수 제거 
3.2     주석 추가 
3.3     정상작동 확인 
*/ 



//Version_1.8 
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <time.h> 
#include <windows.h> 

int money, result; 

void start()        // 커피 메뉴 출력과 동시에 구매여부 표시 
{ 
    printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); 
    printf("┃                                                        ┃\n"); 
    printf("┃          안녕하세요. 늑머님  커피 자동판매기입니다.     ┃\n"); 
    printf("┃                                                        ┃\n"); 
    printf("┃ ========================메뉴판=========================┃\n"); 
    printf("┃                                                        ┃\n"); 
    printf("┃     1. Regular Coffee  : 300원"); 
    if(result>=300) 
    { 
        printf("            구매 가능"); 
    } 
    else 
    { 
        printf("            구매 불가"); 
    } 
    printf("    ┃\n"); 
    printf("┃     2. Special Coffee  : 500원"); 
        if (result >= 500) 
        { 
            printf("            구매 가능"); 
        } 
        else 
        { 
            printf("            구매 불가"); 
        } 
    printf("    ┃\n"); 
    printf("┃     3. Sugar Coffee    : 1000원"); 
    if (result >= 1000) 
    { 
        printf("           구매 가능"); 
    } 
    else 
    { 
        printf("           구매 불가"); 
    } 
    printf("    ┃\n"); 
    printf("┃     4. Black Coffee    : 2000원"); 
    if (result >= 2000) 
    { 
        printf("           구매 가능"); 
    } 
    else 
    { 
        printf("           구매 불가"); 
    } 
    printf("    ┃\n"); 
    
    printf("┃                                                        ┃\n"); 
    printf("┃     현재 잔액 : %d 원\n", result); 
    printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"); 
    printf("┃     구매하실려면 해당 메뉴의 번호를 입력해주세요.      ┃\n"); 
    printf("┃     추가 금액을 투입하시려면 0 번을 입력해주세요.      ┃\n"); 
    printf("┃     종료하시려면 X 키를 입력해주세요.                  ┃\n"); 
    printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n->"); 
} 


int input()         //돈 투입, 입력대기 
{ 
    int er = 0;     //에러값 : 잘못된 돈투입 3회 연속 발생 시, 화면 전환 및 무한루프 탈출 
    while (1) 
    { 
        money = 0; 
        printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n"); 
        printf("┃                                                        ┃\n"); 
    	printf("┃          안녕하세요. 늑머님  커피 자동판매기입니다.     ┃\n"); 
        printf("┃                                                        ┃\n"); 
        printf("┃  돈을 투입해 주세요. (투입가능 금액 10원 ~ 1000원)     ┃\n"); 
        printf("┃                                                        ┃\n"); 
        printf("┃  X 키를 눌러 종료가 가능합니다.                        ┃\n"); 
        printf("┃                                                        ┃\n"); 
        printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n->"); 
        scanf_s("%d", &money);   // 돈 입력 

        if ((money >= 10) && (money <= 1000)) 
        { 
            er = 0; //에러 값 초기화 
            printf("%d원 투입하셨습니다.\n", money); 
            result = result + money; 
            Sleep(1000); 
            return 0; 
        } 
        else 
        { 
            er++;               //에러값 누적 
            system("cls");         //깔끔한 화면 정리용 함수 
            printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); 
            printf("┃                                                        ┃\n"); 
            printf("┃     [경고] 잘못된 금액입니다. 다시 시도해주세요.       ┃\n"); 
            printf("┃                                                        ┃\n"); 
            printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"); 
            if (er == 3) 
            { 
                break; 
            } 
            continue; 
        } 
    } 
} 

void cof()      //커피 그림 출력 
{ 
    system("cls");          //깔끔한 화면 정리용 함수 
    printf("   ,  ,       W   W   W            ,    \n"); 
    printf("  ,    ,     W   W   W     ,     ,      \n"); 
    printf(",    ,        Y   Y   Y           ,     \n"); 
    printf("  ,        BZZZZZZZZZZZZZZ           ,  \n"); 
    printf("     ,    #Z8            ZZZZZw         \n"); 
    printf(",          Z  Z          ZZ  ZZ    ,    \n"); 
    printf("           Z  Z          ZZ  ZZ         \n"); 
    printf("   ,       Zj ZW         Z8 1Zw         \n"); 
    printf("           ZZ ZZy        ZZZZw          \n"); 
    printf(",    ,     wZZ         jZZ            , \n"); 
    printf(" ,           ZZZZZZZZZZZj      ,        \n"); 
    printf("\n"); 
    printf("   ,     EZZZZZZZZZZZZZZZZZZw        ,  \n"); 
     
    Sleep(500); 
    system("cls");          //깔끔한 화면 정리용 함수 
    printf("   ,          W   W   W      ,          \n"); 
    printf("       ,   ,   W   W   W    ,        ,  \n"); 
    printf("     ,   ,    Y   Y   Y       ,,       ,\n"); 
    printf("       ,   BZZZZZZZZZZZZZZ           ,  \n"); 
    printf("   ,      #Z8            ZZZZZw         \n"); 
    printf(",          Z  Z          ZZ  ZZ         \n"); 
    printf("       ,   Z  Z          ZZ  ZZ         \n"); 
    printf("           Zj ZW         Z8 1Zw  ,      \n"); 
    printf("           ZZ ZZy        ZZZZw          \n"); 
    printf(",        , wZZ         jZZ         ,    \n"); 
    printf("       ,     ZZZZZZZZZZZj            ,  \n"); 
    printf("\n"); 
    printf("         EZZZZZZZZZZZZZZZZZZw      ,    \n"); 
    Sleep(500); 
} 

int main() 
{ 
    //DOS 창 크기 설정 
    system("mode con cols=61 lines=35"); 

    char menu = -1;     //C6001 에러 방지 메모리 선언 
    char end = -1; 

    input(); 
  
    while (1) { 
         
        if ((menu == 'x') || (menu == 'X')) 
            break; 


    start();                // 커피 종류 선택 화면 출력 
    scanf(" %c", &menu);    // 커피 종류 입력 

    system("cls");          //깔끔한 화면 정리용 함수 

        switch (menu)       // 커피 출력 알고리즘 
        { 
        case '0': 
            input(); 
            break; 

        case '1': // menu == 1 일경우 
            while (result < 300) // while 문 money가 300원 이하일 경우 
            { 
                printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); 
                printf("┃       잔액이 부족합니다. 돈을 더 투입하세요.           ┃\n"); 
                printf("┃       현재 잔액은 %d원 입니다.\n", result); 
                input(); 
            } 

            result = result - 300; 
            printf("Regular Coffee를 선택하셨습니다.\n"); 
            printf("주문하신 상품을 준비하는 중입니다.\n"); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf("..\n"); 
            Sleep(700); 
            cof(); 
            cof(); 
            printf("Regular Coffee가 나왔습니다.\n");     
            break; 

        case '2': // menu == 2 일경우 
            while (result < 500) // while 문 money가 500원 이하일 경우 
            { 
                printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); 
                printf("┃       잔액이 부족합니다. 돈을 더 투입하세요.           ┃\n"); 
                printf("┃       현재 잔액은 %d원 입니다.\n", result); 
                input(); 
            } 

            result = result - 500; 
            printf("Special Coffee를 선택하셨습니다.\n"); 
            printf("주문하신 상품을 준비하는 중입니다.\n"); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf("..\n"); 
            Sleep(700); 
            cof(); 
            cof(); 
            printf("Special Coffee가 나왔습니다.\n"); 
            break; 

        case '3': // menu == 3 일경우 
            while (result < 1000) // while 문 money가 1000원 이하일 경우 
            { 
                printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); 
                printf("┃       잔액이 부족합니다. 돈을 더 투입하세요.           ┃\n"); 
                printf("┃       현재 잔액은 %d원 입니다.\n", result); 
                input(); 
            } 

            result = result - 1000; 
            printf("Sugar Coffee를 선택하셨습니다.\n"); 
            printf("주문하신 상품을 준비하는 중입니다.\n"); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf("..\n"); 
            Sleep(700); 
            cof(); 
            cof(); 
            printf("Sugar Coffee가 나왔습니다.\n"); 
            break; 

        case '4': // menu == 4 일경우 
            while (result < 2000) // while 문 money가 2000원 이하일 경우 
            { 
                printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"); 
                printf("┃       잔액이 부족합니다. 돈을 더 투입하세요.           ┃\n"); 
                printf("┃       현재 잔액은 %d원 입니다.\n", result); 
                input(); 
            } 

            result = result - 2000; 
            printf("Black Coffee를 선택하셨습니다.\n"); 
            printf("주문하신 상품을 준비하는 중입니다.\n"); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf(".."); 
            Sleep(100); 
            printf("..\n"); 
            Sleep(700); 
            cof(); 
            cof(); 
            printf("Black Coffee가 나왔습니다.\n"); 
            break; 

        case 'x': 
        case 'X': // menu == X 일 경우 
            printf("정말 종료하시겠습니까? ( Y / N )\n ->"); 
            scanf(" %c", &end); 
            if ((end == 'y') || (end == 'Y')) 
            { 
                printf("이용해 주셔서 감사합니다.\n\n\n", result);     //거스름돈 
                if (result > 0) 
                { 
                    printf("자판기에 남아있는 잔액 : %d원 반환합니다.\n\n\n", result); 
                    result -= result; 
                } 
                break; // 프로그램 종료 
            } 
            else 
            { 
                menu = -1;  //메뉴값 초기화하여 재선택 가능 
                continue; 
            } 

        default: // 위 경우가 아닌 다른 경우 
            printf("\n올바른 값을 입력하세요\n"); 
            continue; 
        } 

    } 
    return 0; 
}