조건은 다르지만 예전에 누가 부탁을 해서 함 짜본 건데요..^^
응용하시면 (?) 되실 겁니다..^^
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();
}
|