No older revisions available
No older revisions available
~cpp
# include <string.h>
# include <stdio.h>
# include <stdlib.h>
# define HELLO 1
# define PUT 2
# define RETURN 3
# define PUSH 4
# define OFF 5
# define TOKEN_NUM 5
# define MENU_NUM 5
char *M_Name[]={"cup","cococa","water","coffee"};
char * tok[]={
"hello",
"put",
"return",
"push",
"off"
};
static char* seps=" \t\n";
class CommandParser{
private:
char InputStr[100];
char * Data[20];
int index;
public:
int ReceiveCommand();
char * GetNextToken();
};
class VendingMachine{
private:
int Money;
CommandParser p;
int MinPrice;
int Menu_num;
char Menu[10][100];
int Price[10];
int M[10];
public:
void SetMenuM(int i);
void AvailMenuPrint();
void AddingMenu(char * name,int price);
VendingMachine();
void ProcessMoney();
void ProcessReturn();
void ProcessPush();
void On();
};
int CommandParser::ReceiveCommand()
{
index=0;
char * token;
printf("input command:");
gets(InputStr);
token = strtok( InputStr,seps);
while(token!=NULL){
Data[index]=token;
index++;
token=strtok(NULL,seps);
}
index=0;
for(int i=1;i<=TOKEN_NUM && strcmp( Data[0] , tok[i-1]) ;i++) ;
if(i<=TOKEN_NUM) return i;
return 0;
}
char *CommandParser::GetNextToken()
{
return Data[++index];
}
void VendingMachine::SetMenuM(int i)
{
M[Menu_num]=i;
}
void VendingMachine::AvailMenuPrint()
{
for(int i=0;i<Menu_num;i++){
if (Money >= Price[i]){
printf("%d : %s %d\n",i,Menu[i],Price[i]);
}
}
}
void VendingMachine::AddingMenu(char * name, int price)
{
strcpy(Menu[Menu_num],name);
Price[Menu_num]=price;
Menu_num++;
if (price<MinPrice) MinPrice=price;
}
VendingMachine::VendingMachine()
{
Money=0;
Menu_num=0;
MinPrice=100000;
AddingMenu("cocoa",200);
SetMenuM(321);
AddingMenu("coffe",200);
SetMenuM(341);
AddingMenu("cocoa",200);
AddingMenu("cocoa",200);
AddingMenu("cocoa",200);
}
void VendingMachine::ProcessMoney()
{
char * t = p.GetNextToken();
int m = atoi(t);
Money+=m;
printf("Current Money is %d\n",Money);
AvailMenuPrint();
}
void VendingMachine::ProcessPush()
{
if (Money<MinPrice) return;
char * t = p.GetNextToken();
int SM=atoi(t);
if (Money >=Price[SM]){
printf("재료:");
int a = M[SM+1];
int b;
while(a){
b=a%10;
a=a/10;
printf("%s ",M_Name[b-1]);
}
printf("\nReceive %s\n",Menu[SM] );
Money-=Price[SM];
}
printf("CurrentMoney is %d\n",Money);
AvailMenuPrint();
}
void VendingMachine::ProcessReturn()
{
printf("Returned Money is %d\n",Money);
Money=0;
}
void VendingMachine::On()
{
int command;
while( command = p.ReceiveCommand() ){
printf("%d\n",command);
switch(command){
case HELLO:
printf("this machine is good^^;;\n");
break;
case PUT:
ProcessMoney();
break;
case RETURN:
ProcessReturn();
break;
case PUSH:
ProcessPush();
break;
case OFF:
return;
default:
break;
};
}
}
void main(void)
{
VendingMachine v;
v.On();
}