#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
typedef struct list
{
int data;
struct list* link;
}LIST;
typedef struct queue
{
LIST* front;
LIST* rear;
}QUEUE;
typedef struct _MENU {
char drink[30];
char price[30];
}MENU;
typedef struct _customer {
char name[30];
char phone[30];
}CUSTOMER;
typedef struct _ticket_number {
char number[30];
char name[30];
char drink[30];
char price[30];
}TICKET_NUMBER;
QUEUE* Create_queue();
void Enqueue(QUEUE* pQ);
void Print(QUEUE* pQ);
int Dequeue(QUEUE* pQ);
void Search(QUEUE* pQ);
int Que();
void new_add_menu();
void new_add_customer();
void new_add_ticker_number();
int search_menu();
int search_customer();
int search_ticket_number();
void edit_customer();
void edit_menu();
void del_customer();
void del_menu();
void view_menu();
void view_customer();
void view_ticket_number();
int cross_search();
void end();
void input_menu();
void input_customer();
void input_ticket_number();
void SetTextColor(int background, int text)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (background<<4) | text);
}
MENU menu_info[200];
int menu_idx=0;
CUSTOMER customer_info[200];
int customer_idx=0;
TICKET_NUMBER ticket_number_info[200];
int ticket_number_idx=0;
int main()
{
int i, sel=1, idx;
input_menu();
input_customer();
input_ticket_number();
SetTextColor(15, 0);
while(sel!=16)
{
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 카페 관리 프로그램 ┃\n");
printf("┃ ┃\n");
printf("┃〓〓〓〓〓〓추가〓〓〓〓〓〓┃\n");
printf("┃ 1. 신규 메뉴 추가 ┃\n");
printf("┃ 2. 신규 고객 추가 ┃\n");
printf("┃ 3. 번호표 추가 ┃\n");
printf("┃〓〓〓〓〓〓검색〓〓〓〓〓〓┃\n");
printf("┃ 4. 기존 메뉴 검색 ┃\n");
printf("┃ 5. 기존 고객 검색 ┃\n");
printf("┃ 6. 번호표 조회 ┃\n");
printf("┃〓〓〓〓〓〓수정〓〓〓〓〓〓┃\n");
printf("┃ 7. 기존 고객 수정 ┃\n");
printf("┃ 8. 기존 메뉴 수정 ┃\n");
printf("┃〓〓〓〓〓〓삭제〓〓〓〓〓〓┃\n");
printf("┃ 9. 기존 고객 삭제 ┃\n");
printf("┃ 10. 기존 메뉴 삭제 ┃\n");
printf("┃〓〓〓〓〓전체보기〓〓〓〓〓┃\n");
printf("┃ 11. 메뉴 전체 보기 ┃\n");
printf("┃ 12. 고객 전체 보기 ┃\n");
printf("┃ 13. 번호표 전체 보기 ┃\n");
printf("┃〓〓〓〓〓교차검색〓〓〓〓〓┃\n");
printf("┃ 14. 교차 검색 ┃\n");
printf("┃〓〓〓〓〓대기열〓〓〓〓〓〓┃\n");
printf("┃ 15. 대기열 메뉴 ┃\n");
printf("┃〓〓〓〓〓〓종료〓〓〓〓〓〓┃\n");
printf("┃ 16. 프로그램 종료 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf(" 원하는 메뉴를 선택하세요: ");
scanf("%d", &sel) ;
switch(sel)
{
case 1:
new_add_menu();
break;
case 2:
new_add_customer();
break;
case 3:
new_add_ticker_number();
break;
case 4:
search_menu();
break;
case 5:
search_customer();
break;
case 6:
search_ticket_number();
break;
case 7:
edit_customer();
break;
case 8:
edit_menu();
break;
case 9:
del_customer();
break;
case 10:
del_menu();
break;
case 11:
view_menu();
break;
case 12:
view_customer();
break;
case 13:
view_ticket_number();
break;
case 14:
cross_search();
break;
case 15:
Que();
break;
case 16:
end();
break;
default:
printf("\n잘못 선택하셨습니다.\n");
}
printf("\n작업을 완료하였습니다.\n새로운 메뉴를 선택하려면 Enter를 눌러주세요.\n");
getch();
}
return 0;
}
void input_customer()
{
FILE* c_fp = fopen("C:\\project\\Customer.txt", "r");
char line[150];
char* ptr;
int word_cnt;
while(fscanf(c_fp, "%s", line)>0)
{
word_cnt = 0;
ptr = strtok(line,",");
while(ptr!=NULL)
{
word_cnt++;
switch(word_cnt)
{
case 1:
strcpy(customer_info[customer_idx].name, ptr);
break;
case 2:
strcpy(customer_info[customer_idx].phone, ptr);
break;
}
ptr=strtok(NULL,",");
}
customer_idx++;
}
fclose(c_fp);
}
void input_menu()
{
FILE* fp = fopen("C:\\project\\Menu.txt", "r");
char line[150];
char* ptr;
int word_cnt;
while(fscanf(fp, "%s", line)>0)
{
word_cnt = 0;
ptr = strtok(line,",");
while(ptr!=NULL)
{
word_cnt++;
switch(word_cnt)
{
case 1:
strcpy(menu_info[menu_idx].drink, ptr);
break;
case 2:
strcpy(menu_info[menu_idx].price, ptr);
break;
}
ptr=strtok(NULL,",");
}
menu_idx++;
}
fclose(fp);
}
void input_ticket_number()
{
FILE* fp = fopen("C:\\project\\Ticket_number.txt", "r");
char line[150];
char* ptr;
int word_cnt;
while(fscanf(fp, "%s", line)>0)
{
word_cnt = 0;
ptr = strtok(line,",");
while(ptr!=NULL)
{
word_cnt++;
switch(word_cnt)
{
case 1:
strcpy(ticket_number_info[ticket_number_idx].number, ptr);
break;
case 2:
strcpy(ticket_number_info[ticket_number_idx].name, ptr);
break;
case 3:
strcpy(ticket_number_info[ticket_number_idx].drink, ptr);
break;
case 4:
strcpy(ticket_number_info[ticket_number_idx].price, ptr);
break;
}
ptr=strtok(NULL,",");
}
ticket_number_idx++;
}
fclose(fp);
}
void new_add_menu()
{
FILE* fp = fopen("C:\\project\\Menu.txt", "a");
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 신규 메뉴 추가 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n");
printf("메뉴 이름: ");
scanf("%s", &menu_info[menu_idx].drink);
printf("가격: ");
scanf("%s", &menu_info[menu_idx].price);
printf("신규 메뉴 추가 완료");
fprintf(fp, "%s,%s\n", menu_info[menu_idx].drink, menu_info[menu_idx].price);
menu_idx++;
fclose(fp);
}
void new_add_customer()
{
FILE* c_fp = fopen("C:\\project\\Customer.txt", "a");
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 신규 고객 추가 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n");
printf("고객 이름: ");
scanf("%s", &customer_info[customer_idx].name);
printf("고객 전화번호: ");
scanf("%s", &customer_info[customer_idx].phone);
printf("신규 고객 추가 완료");
fprintf(c_fp, "\n%s,%s\n", customer_info[customer_idx].name, customer_info[customer_idx].phone);
customer_idx++;
fclose(c_fp);
}
void new_add_ticker_number()
{
FILE* fp = fopen("C:\\project\\Ticket_number.txt", "a");
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 신규 번호표 추가 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n");
printf("번호: ");
scanf("%s", &ticket_number_info[menu_idx].number);
printf("이름: ");
scanf("%s", &ticket_number_info[menu_idx].name);
printf("음료: ");
scanf("%s", &ticket_number_info[menu_idx].drink);
printf("가격: ");
scanf("%s", &ticket_number_info[menu_idx].price);
fprintf(fp, "%s,%s,%s,%s\n", ticket_number_info[menu_idx].number, ticket_number_info[menu_idx].name, ticket_number_info[menu_idx].drink,ticket_number_info[menu_idx].price);
ticket_number_idx++;
fclose(fp);
}
int search_menu()
{
int i;
char drink[30];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 메뉴 검색 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n음료 이름: ");
scanf("%s", &drink);
for(i=0; i<=menu_idx; i++)
{
if(strcmp(drink, menu_info[i].drink)==0)
{
printf("음료: %s \n가격: %s\n", menu_info[i].drink, menu_info[i].price);
return i;
}
else if(strcmp(drink, menu_info[i].drink)!=0 && i==menu_idx)
{
printf("============================\n");
printf("찾으시는 정보가 없습니다.\n");
printf("============================\n");
return i;
}
else
continue;
}
}
int search_customer()
{
int i;
char name[30];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 고객 검색 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n이름: ");
scanf("%s", &name);
for(i=0; i<=customer_idx; i++)
{
if(strcmp(name, customer_info[i].name)==0)
{
printf("고객 이름: %s \n고객 전화번호: %s\n", customer_info[i].name, customer_info[i].phone);
return i;
}
else if(strcmp(name ,customer_info[i].name)!=0 && i==customer_idx)
{
printf("============================\n");
printf("찾으시는 정보가 없습니다.\n");
printf("============================\n");
return i;
}
else continue;
}
}
int search_ticket_number()
{
int i;
char number[30];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 번호표 검색 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n번호표: ");
scanf("%s", &number);
for(i=0; i<ticket_number_idx; i++)
{
if(strcmp(number, ticket_number_info[i].number)==0)
{
printf("번호: %s \n이름: %s \n음료: %s \n가격: %s \n", ticket_number_info[i].number, ticket_number_info[i].name,ticket_number_info[i].drink,ticket_number_info[i].price);
return i;
}
}
return -1;
}
void edit_customer()
{
int i, j, k;
char name[20];
char info[20];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 고객 정보 수정 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n이름을 입력해주세요: ");
scanf("%s", name);
printf("\n");
for(i=0; i<customer_idx; i++)
{
if(strcmp(name, customer_info[i].name)==0)
{
printf("이름: %s\n전화번호: %s\n", customer_info[i].name, customer_info[i].phone);
printf("\n");
printf("1.이름 2.전화번호\n");
printf("번호를 선택하세요: ");
scanf("%d", &j);
if(j==1)
{
printf("수정할 이름: ");
scanf("%s", customer_info[i].name);
}
else if(j==2)
{
printf("수정할 전화번호: ");
scanf("%s", customer_info[i].name);
}
printf("\n");
}
}
}
void edit_menu()
{
int i, j, k;
char drink[20];
char info[20];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 메뉴 수정 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n메뉴를 입력해주세요: ");
scanf("%s", drink);
printf("\n");
for(i=0; i<menu_idx; i++)
{
if(strcmp(drink, menu_info[i].drink)==0)
{
printf("음료: %s\n가격: %s\n", menu_info[i].drink, menu_info[i].price);
printf("\n");
printf("1.음료 2.가격\n");
printf("번호를 선택하세요: ");
scanf("%d", &j);
if(j==1)
{
printf("수정할 음료: ");
scanf("%s", menu_info[i].drink);
}
else if(j==2)
{
printf("수정할 가격: ");
scanf("%s", menu_info[i].price);
}
printf("\n");
}
}
}
void del_customer()
{
FILE* fp = fopen("C:\\project\\Customer.txt", "r+");
int i=0;
char name[30];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 고객 삭제 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n이름: ");
scanf("%s", &name);
for(i=0; i<customer_idx; i++)
{
if(strcmp(name, customer_info[i].name)==0)
{
printf("\n삭제할 고객 이름\n이름: %s\n전화번호: %s\n",customer_info[i].name, customer_info[i].phone);
memset(&customer_info[i], 0x00, sizeof(CUSTOMER));
fprintf(fp, "%s %s\n", customer_info[i].name, customer_info[i].phone);
fclose(fp);
}
}
}
void del_menu()
{
FILE* fp = fopen("C:\\project\\Menu.txt", "r+");
int i=0;
char drink[30];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 메뉴 삭제 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n메뉴 이름: ");
scanf("%s", &drink);
for(i=0; i<menu_idx; i++)
{
if(strcmp(drink, menu_info[i].drink)==0)
{
printf("\n삭제할 메뉴\n음료: %s\n가격: %s\n",menu_info[i].drink, menu_info[i].price);
memset(&menu_info[i], 0x00, sizeof(MENU));
fprintf(fp, "%s %s\n", menu_info[i].drink, menu_info[i].price);
fclose(fp);
}
}
}
void view_menu()
{
int i;
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 메뉴 전체보기 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n Menu Price \n");
printf("------------------------------------------------\n");
for(i=0; i<menu_idx; i++)
{
printf("%15s%20s\n",menu_info[i].drink,menu_info[i].price);
}
}
void view_customer()
{
int i;
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 고객 전체보기 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n Name Phone \n");
printf("---------------------------------------\n");
for(i=0; i<customer_idx; i++)
{
printf("%15s%20s\n", customer_info[i].name, customer_info[i].phone);
}
}
void view_ticket_number()
{
int i;
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 번호표 전체보기 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n 번호 이름 음료 가격\n");
printf("-------------------------------------------------------------\n");
for(i=0; i<ticket_number_idx; i++)
{
printf("%12s%15s%18s%15s\n", ticket_number_info[i].number, ticket_number_info[i].name,ticket_number_info[i].drink,ticket_number_info[i].price);
}
}
int cross_search()
{
int i,j;
char drink[30];
char name[30];
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ ┃\n");
printf("┃ 교차 검색 ┃\n");
printf("┃ ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n메뉴 이름: ");
scanf("%s", &drink);
for(i=0; i<menu_idx++; i++)
{
if(strcmp(drink, menu_info[i].drink)==0){
printf("음료: %s \n가격: %s\n", menu_info[i].drink, menu_info[i].price);
break;
}
else{
printf("============================\n");
printf(" 찾으시는 정보가 없습니다. \n");
printf("============================\n");
break;
}
}
printf("\n고객 이름: ");
scanf("%s", &name);
for(j=0; j<customer_idx; j++)
{
if(strcmp(name, customer_info[j].name)==0){
printf("고객 이름: %s \n고객 전화번호: %s\n", customer_info[j].name, customer_info[j].phone);
}
else{
printf("============================\n");
printf(" 찾으시는 정보가 없습니다. \n");
printf("============================\n");
return j;
}
return -1;
}
}
int Que()
{
QUEUE* Q;
int item, val;
system("cls");
while(1)
{
printf("\n\n\n ┏━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" ┃ ┃ \n");
printf(" ┃ *** MeNu *** ┃\n");
printf(" ┃ 1) 번호표 생성 ┃\n");
printf(" ┃ 2) 번호표 입력 ┃\n");
printf(" ┃ 3) 번호표 삭제 ┃\n");
printf(" ┃ 4) 대기열 ┃\n");
printf(" ┃ 5) Exit ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃ \n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n");
printf(" SELECT : ");
scanf("%d", &val);
switch(val)
{
case 1 : Q = Create_queue(); break;
case 2 : Enqueue(Q); break;
case 3 : item = Dequeue(Q);
printf("\t 맨 앞 번호표가 삭제되었습니다.\n \t삭제된 번호표 = %d\n", item);
break;
case 4 : Print(Q); break;
case 5 : exit(1);
}
}
}
QUEUE* Create_queue()
{
system("cls");
QUEUE* Q;
Q = (QUEUE*)malloc(sizeof(QUEUE));
Q->front = NULL;
Q->rear = NULL;
return Q;
}
void Enqueue(QUEUE* pQ)
{
system("cls");
LIST* newNode, *temp;
int val;
printf("\t 번호표를 입력해 주세요. : ");
scanf("%d", &val);
newNode = (LIST*)malloc(sizeof(LIST));
newNode->data = val;
newNode->link = NULL;
if(pQ->rear == NULL)
{
pQ->rear = newNode;
pQ->front = newNode;
}
else
{
temp = pQ->rear;
while(temp->link != NULL)
temp = temp->link;
temp->link = newNode;
}
}
int Dequeue(QUEUE* pQ)
{
system("cls");
LIST* temp;
int item;
if(pQ->front == NULL)
{
printf("\n\t 현재 대기열이 없습니다.\n");
exit(1);
}
else
{
temp = pQ->front;
item = temp->data;
pQ->front = pQ->front->link;
if(pQ->front == NULL)
{
pQ->rear = NULL;
}
free(temp);
}
return item;
}
void Print(QUEUE* pQ)
{
system("cls");
LIST* temp;
temp = pQ->front;
printf("\n\t*** 대기열 ***\n\t");
while(temp != NULL)
{
printf("%d번 ", temp->data);
temp = temp->link;
}
printf("\n");
}
void end()
{
printf("\n프로그램을 종료합니다\n");
exit(1);
}