order()





order함수는 user로 부터 input을 받아서 user가 시킨 음식값을 반환하는 함수이다

각, 메뉴의 token number에 접근하여 구조체로 부터  직접 값을 얻어온다



int order(mymenu_t *m[],int count){


int answer;

int receits=0;

int i=0;


while(1){

//aks

printf("Would you like to order? (1.yes  2.no)\n");

scanf("%d",&answer);

if(answer==2)break;


while(1){

for(i=0;i<count;i++){

printf("[%d]\tname: %s\n\t%s\n\t%d won\n\n",i+1,m[i]->name,m[i]->size,m[i]->price);

}

printf("Chose food you want to eat\n");

scanf("%d",&answer);

if(answer<1||answer>count)

printf("Type right index please.......\n");

else break;

}


receits+=m[answer-1]->price;

}


printf("You have orderd %d won \n",receits);

return receits;



}

---------------------------------------------------------------------------------------------------------------------------------------------------------------

Output)


위의 예제는 user가 메뉴판을 보고 해당 index값을 넣고 해당 index에 대한 메뉴의 가격이 종합되어서 출력되는 예제이다.


printmenu()






[jsmn]파싱된 토큰으로 새로운 구조체에 저장하기에서 받은 메뉴값을 출력하는 함수이다

이미 mymenu_t라는 구조체 안에 각 메뉴들이 저장되어 있다. 그래서 각 token에 대하여 올바르게 print하면 된다




void printmenu(mymenu_t*m[], int count){


int i=0;


for(i=0;i<count;i++){

switch(m[i]->cat){

case 0: printf("Yori-->\n");break;

case 1: printf("Sicksa-->\n");break;

}


printf("이름: %s\n",m[i]->name);

printf("크기: %s\n",m[i]->size);

printf("가격: %d\n",m[i]->price);

printf("\n");


}




}




type은 enum이기 때문에 int값이다. 그래서 switch를 통해서 더 정확한 정보를 출력한다



Output)









makemymenu()


typedef enum{

 C_SET=0,

 C_MEAL=1

} mycategory_t;



typedef struct{

mycategory_t cat;

char name[20];

char size[10];

int price;

} mymenu_t;



로 구성된 구조체에 다음 메뉴를 저장하기를 원한다


{

"Yori":

[

{

  "name":"Haemultang",

          "size":"Jong",

          "price":50000

        },

{

          "name":"Haemultang",

          "size":"Dae",

          "price":60000

        },

{

          "name":"Haemuljimg",

          "size":"Jong",

          "price":50000

        },

{

          "name":"Haemuljim",

          "size":"Dae",

          "price":60000

        }

],

"Sicksa":

[

 {

          "name":"BJnoodle",

          "size":"1 piece",

          "price":7000

        },

{

          "name":"FIredSquid",

          "size":"1 piece",

          "price":8000

        },

{

          "name":"Rice with Suisi",

          "size":"1 piece",

          "price":10000

        }

]

}




---------------------------------------------------------------------------------------------------

int makemymenu(const char *json, jsmntok_t *t, int r, mymenu_t* m[]){
int size=0;
        int i=0,j=0,menucount=0;
int type=0;
char through[20];

        for(i=1;i<r;i++){
        if(t[i+1].type==2){
if( !strncmp("Yori", json + t[i].start,t[i].end-t[i].start)){type=0;}
else if ( !strncmp("Sicksa", json + t[i].start,t[i].end-t[i].start)){type=1;}
else type =0;
        size=t[i+1].size;
       
i+=4;

                for(j=menucount;j<menucount+size;i+=3,j++){
m[j]->cat=type;
                strncpy(m[j]->name, json + t[i].start,t[i].end-t[i].start);i+=2;
                strncpy(m[j]->size,json + t[i].start,t[i].end-t[i].start);i+=2;
strncpy(through,json+t[i].start,t[i].end-t[i].start);
                m[j]->price=atoi(through);
                }i-=3;
        menucount+=size;
}

        }



        return menucount;

        }

다음 코드는 object의 type을 "Yori"와 "Sicksa"로 구분하여 이름, 크기 그리고 가격으로 구조체에 저장하는 함수이다.
즉, 음식점의 요리류와 식사류의 음식을 메뉴로 parsing하는 함수이다



+ Recent posts