Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2560] [참고] 조건은 다르지만 자판기 소스입니다..^^
강도욱 [kkid] 2408 읽음    2003-05-05 18:28
조건은 다르지만 예전에 누가 부탁을 해서 함 짜본 건데요..^^
응용하시면 (?) 되실 겁니다..^^
GUI로 업 시킬려다가 귀차니즘으로 인하여 하드에 짱박혀 있네요..^^
그럼 즐~프하세요..

// 자판기 프로젝트
// AutoSM.cpp
#include <stdio.h>
#include <iostream.h>

#define TRUE 1
#define FALSE 0

class AutoSM  // AutoSellMachine 자칭 자판기
{
    public:
        static char *Menu[5];
        static char *MoneyMenu[5];
        static char *UseAbleCoin[5];
        static int MachineSaveCoin[5];
        static int UserCoin[5];
        static int MachineToUserCoin[5];
        static int MoneyPerMenu[5];

        int UserMenu;
        int AutoMoneySum;
        int UserMoneySum;
        int MenuSum;
        int MachineToUser;

        int getMenu(int InputNum);
        int CalMoney(int InputCoin1, int InputCoin2, int InputCoin3, int InputCoin4);
        int CalMenu(int InputMenu1, int InputMenu2, int InputMenu3, int InputMenu4);
        void OptimizingCoin(int insertMoney);
        void InPut();
        void OutPut();
};

char *AutoSM::Menu[5] = {"메뉴", "밀크", "블랙", "유자차", "율무차"};
char *AutoSM::MoneyMenu[5] = {"MoneyMenu", "200", "200", "150", "100"};
char *AutoSM::UseAbleCoin[5] = {"UseAbleCoin", "500", "100", "50", "10"};
int   AutoSM::MachineSaveCoin[5] = {0, 10, 1, 20, 10};
int   AutoSM::UserCoin[5] = {0, 0, 0, 0, 0};
int   AutoSM::MachineToUserCoin[5] = {0, 0, 0, 0, 0};
int   AutoSM::MoneyPerMenu[5] = {0, 0, 0, 0, 0};

int AutoSM::getMenu(int InputNum)
{
    if(InputNum<1 && InputNum>4) return FALSE;
    else return TRUE;
}

int AutoSM::CalMoney(int InputCoin1, int InputCoin2, int InputCoin3, int InputCoin4) // 동전 합계 계산하기
{
   int result = 0;
   return result = (500*InputCoin1) + (100*InputCoin2) + (50*InputCoin3) + (10*InputCoin4);
}
int AutoSM::CalMenu(int InputMenu1, int InputMenu2, int InputMenu3, int InputMenu4)
{
   int resultII = 0;
   return  resultII = (200*InputMenu1) + (200*InputMenu2) + (150*InputMenu3) + (100*InputMenu4);
}

void AutoSM::OptimizingCoin(int insertMoney)
{
     int TempMoney = 0;
    TempMoney = insertMoney;
     while(TempMoney != 0)
     {
        if(TempMoney >= 500)
        {
            if(MachineSaveCoin[1] != 0 && TempMoney >= 500)
            {
                TempMoney = TempMoney - 500;
                MachineSaveCoin[1]--;
                UserCoin[1]++;
            }
            else if(MachineSaveCoin[2] != 0 && TempMoney >= 100)
            {
                TempMoney = TempMoney - 100;
                MachineSaveCoin[2]--;
                UserCoin[2]++;
            }
            else if(MachineSaveCoin[3] != 0 && TempMoney >= 50)
            {
                TempMoney = TempMoney - 50;
                MachineSaveCoin[3]--;
                UserCoin[3]++;
            }
            else if(MachineSaveCoin[4] != 0 && TempMoney >= 10)
            {
                TempMoney = TempMoney - 10;
                MachineSaveCoin[4]--;
                UserCoin[4]++;
            }
        }
        else if(TempMoney >= 100)
        {
            if(MachineSaveCoin[2] != 0 && TempMoney >= 100)
            {
                TempMoney = TempMoney - 100;
                MachineSaveCoin[2]--;
                UserCoin[2]++;
            }
            else if(MachineSaveCoin[3] != 0 && TempMoney >= 50)
            {
                TempMoney = TempMoney - 50;
                MachineSaveCoin[3]--;
                UserCoin[3]++;
            }
            else if(MachineSaveCoin[4] != 0 && TempMoney >= 10)
            {
                TempMoney = TempMoney - 10;
                MachineSaveCoin[4]--;
                UserCoin[4]++;
            }

        }
        else if(TempMoney >= 50)
        {
            if(MachineSaveCoin[3] != 0 && TempMoney >= 50)
            {
                TempMoney = TempMoney - 50;
                MachineSaveCoin[3]--;
                UserCoin[3]++;
            }
            else if(MachineSaveCoin[4] != 0 && TempMoney >= 10)
            {
                TempMoney = TempMoney - 10;
                MachineSaveCoin[4]--;
                UserCoin[4]++;
            }
        }
        else if(TempMoney >= 10)
        {
            if(MachineSaveCoin[4] != 0 && TempMoney >= 10)
            {
                TempMoney = TempMoney - 10;
                MachineSaveCoin[4]--;
                UserCoin[4]++;
            }
        }
     }
}

void AutoSM::InPut()
{
    OutPut();
    int ChoiceMenuNum =0;
    int GetMoney = 0;
    int State = TRUE;

    while(ChoiceMenuNum !=9)
    {
       if(State == FALSE) ChoiceMenuNum = 9;
       else
       {
            cout<<"메뉴를 입력하세요..."<<endl;
            cout<<" 밀크(200원) 블랙(200원) 유자차(150원) 율무차(100원)  종료"<<endl;
            cout<<"      1           2             3             4       9"<<endl;
            cout<<"번호를 눌러주세요.."<<endl;
            cin>>ChoiceMenuNum;
            if(ChoiceMenuNum == 9) State = FALSE;
            else if(ChoiceMenuNum<1 || ChoiceMenuNum>4) cout<<"\n 오류입니다..."<<endl;
            else 
            {
                UserMenu = ChoiceMenuNum;
                MoneyPerMenu[UserMenu]++;
                cout<<"동전을 입력하세요..."<<endl;
                cout<<"500원 동전=>";
                cin>>UserCoin[1];
                cout<<"100원 동전=>";
                cin>>UserCoin[2];
                cout<<" 50원 동전=>";
                cin>>UserCoin[3];
                cout<<" 10원 동전=>";
                cin>>UserCoin[4];

                cout<<"\n선택된 메뉴는 "<<UserMenu<<"번 "<<Menu[UserMenu]<<endl;
                UserMoneySum = CalMoney(UserCoin[1], UserCoin[2], UserCoin[3], UserCoin[4]);

                cout<<"투입한 금액은 "<<UserMoneySum<<"원입니다."<<endl;
                cout<<"("<<UseAbleCoin[1]<<" : "<<UserCoin[1]<<" 개, ";
                    cout<<UseAbleCoin[2]<<" : "<<UserCoin[2]<<" 개, ";
                    cout<<UseAbleCoin[3]<<" : "<<UserCoin[3]<<" 개, ";
                    cout<<UseAbleCoin[4]<<" : "<<UserCoin[4]<<" 개 )"<<endl;
                MenuSum = CalMenu(MoneyPerMenu[1], MoneyPerMenu[2], MoneyPerMenu[3], MoneyPerMenu[4]);
                MoneyPerMenu[UserMenu] = 0;

                if( MenuSum > UserMoneySum)
                {
                    cout<<"\n투입한 동전이 부족합니다..."<<endl;
                    State = FALSE;
                }
                else
                {
                    for(int i= 1; i<5; i++)
                    {
                        MachineSaveCoin[i] = MachineSaveCoin[i] + UserCoin[i];
                        UserCoin[i] = 0;
                    }
                    MachineToUser = UserMoneySum - MenuSum;
                    OptimizingCoin(MachineToUser);
                    cout<<"\n잔돈 "<<MachineToUser<<"원 을 받으세요.."<<endl;
                    cout<<"("<<UseAbleCoin[1]<<" : "<<UserCoin[1]<<" 개, ";
                        cout<<UseAbleCoin[2]<<" : "<<UserCoin[2]<<" 개, ";
                        cout<<UseAbleCoin[3]<<" : "<<UserCoin[3]<<" 개, ";
                        cout<<UseAbleCoin[4]<<" : "<<UserCoin[4]<<" 개 )"<<endl;
                    State = TRUE;
                }
            }
       
          }
        OutPut();
        if(State == FALSE) ChoiceMenuNum = 9;
       }
   
}

void AutoSM::OutPut()
{
    cout<<"자판기 현재 상황"<<endl;
    cout<<" 밀크(200원) 블랙(200원) 유자차(150원) 율무차(100원)"<<endl;
    AutoMoneySum = CalMoney(MachineSaveCoin[1], MachineSaveCoin[2], MachineSaveCoin[3], MachineSaveCoin[4]);
    cout<<"총 "<<AutoMoneySum<<"원의 잔돈이 있습니다."<<endl;
    cout<<"("<<UseAbleCoin[1]<<" : "<<MachineSaveCoin[1]<<" 개, ";
         cout<<UseAbleCoin[2]<<" : "<<MachineSaveCoin[2]<<" 개, ";
         cout<<UseAbleCoin[3]<<" : "<<MachineSaveCoin[3]<<" 개, ";
         cout<<UseAbleCoin[4]<<" : "<<MachineSaveCoin[4]<<" 개 )"<<endl;
}

void main(void)
{
    AutoSM *test;
    test->InPut();
}

+ -

관련 글 리스트
2559 음료수 자판기 관리 하는 프로그램인데,,,,, 어려버랑,,ㅡㅡㆀ 1470 2003/05/05
2560     [참고] 조건은 다르지만 자판기 소스입니다..^^ 강도욱 2408 2003/05/05
2566         Re:넘 고마워요 흑흑 어려버랑,,ㅡㅡㆀ 964 2003/05/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.