亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

餐館點菜系統C語言源代碼

2020-01-26 11:44:32
字體:
來源:轉載
供稿:網友

餐館點菜系統c語言的源代碼,一些封裝的函數,對鏈表的操作,還有文件的存取,供大家參考,具體內容如下

#include "public.h"struct NODE *myhead;struct NODE *orderhead;struct NODE *ashead;char waiter_ID[4+1];/*******************************設置輸入框顏色******************************************* 名稱:設置輸入框顏色 參數: iNum 表示: 編輯框的長度  功能: *************************************************************************************/void SetColorEdit(int iNum){ SetColor(4,14); while (iNum--) { putchar(' '); }}void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) { HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));}/*******************************編輯框aUI函數******************************************* 名稱:編輯框aUI函數 參數: iLong 表示: 編輯框的長度 iWide 表示: 編輯框的寬度 x 表示: 編輯框起始行位置 y 表示: 編輯框起始列位置 acBuffer 表示: 編輯框顯示的內容 功能: 在x行y列制作一個長為iLong寬為iWide的編輯框,框中文本顯示acBuffer字符串的內容 *************************************************************************************/void UI_EditBox(int iLong,int iWide,int x,int y,char acBuffer[30]){ int i; /*寬*/ int j; /*長*/  Gotoxy(x,y);  for(i = 0; i <= iWide; i++) { Gotoxy(x+i,y); if(i == 0 || i == iWide) { for(j = 0; j <= iLong; j++) { if(i == 0 && j == 0) {  printf("┏"); } else if(i == 0 && j == iLong) {  printf("┓"); } else if(i == iWide && j == 0) {  printf("┗"); } else if(i == iWide && j == iLong) {  printf("┛"); } else {  printf("┅"); }  }  } else { Gotoxy(x+i,y);  printf ("┇"); Gotoxy(x+i,y+2*iLong); printf ("┇"); } putchar ('/n'); }  Gotoxy(x + 1,y + 2); printf ("%s",acBuffer);}/*******************************文本框UI函數******************************************* 名稱:編輯框UI函數 參數: x 表示: 文本框起始行位置 y 表示: 文本框起始列位置 acBuffer 表示: 文本框顯示的內容 功能: 在x行y列顯示acBuffer字符串的內容 *************************************************************************************/void UI_TestBox(int x,int y,char acBuffer[30]){ Gotoxy(x,y); printf ("%s",acBuffer);}/*******************************光標移動函數******************************** 名稱:光標移動函數 參數: x 表示:行 y 表示:列 功能: 將光標移動至x行y列位置 **************************************************************************/void Gotoxy(int x,int y){ CONSOLE_SCREEN_BUFFER_INFO   csbiInfo;         HANDLE  hConsoleOut; hConsoleOut = GetStdHandle (STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);  csbiInfo.dwCursorPosition.X = y;          csbiInfo.dwCursorPosition.Y = x;          SetConsoleCursorPosition (hConsoleOut,csbiInfo.dwCursorPosition); }/*******************************控制輸入函數封裝************************************ 名稱:允許輸入字母和數字的函數 參數: acStr 表示: 保存的數組 iMaxLen表示: 最大輸入字符數 iPutType表示:  0 (無控制) 1(只能輸入數字) 2(只能輸入字母)  3 (只能輸入數字和字母) isPlaintext表示是否顯示明文 1表示明文 iTmp 表示:為1(第一位不為空就能按回車鍵)  為2(達到最大位數才能回車)  為3(無控制) **********************************************************************************/int Glb_putString(char acStr[], int iMaxLen, int iPutType, int isPlaintext,int iTmp) { char Tmp; int i = 0; int j; int flg;  for(j = 0;j < iMaxLen; j++) { acStr[j] = '/0';  } while(1) { Tmp=getch(); //printf("%d",Tmp); if(Tmp==27) { //printf("%d",Tmp); return 1; } flg = 0; if(Tmp == 13) { if(iTmp == 1) /*****第一位不為空就能按回車鍵*****/ { if(acStr[0] != 0) {  break; } } else if(iTmp == 2) /******達到最大位數才能回車*****/ { j = 0; while(j < iMaxLen) {  if(acStr[j] == '/0')  {  break;  }  j++; } if((j == iMaxLen)) {  flg = 1; } } else if(iTmp == 3) /*******無控制*******/ { break;   } } else if(Tmp == 8) { if(i > 0) { printf("/b /b");  acStr[--i] = '/0';  } } else  { if(i < iMaxLen) { switch(iPutType)/****0(無控制) 1(只能輸入數字) 2(只能輸入字母) 3(只能輸入數字和字母)*****/ { case Not:  {   if(isPlaintext == NotPwd)  {  putchar(Tmp);  }  else  {  putchar('*');  }  acStr[i++] = Tmp;  }break; case Int:  {  if(Tmp >= '0' && Tmp <= '9')  {  if(isPlaintext == NotPwd)  {  putchar(Tmp);  }  else  {  putchar('*');  }  acStr[i++] = Tmp;  }  }break; case Char:  {  if((Tmp >= 'A' && Tmp <= 'Z') || (Tmp >='a' && Tmp <='z'))  {  if(isPlaintext == NotPwd)  {  putchar(Tmp);  }  else  {  putchar('*');  }  acStr[i++] = Tmp;  }  }break; case IntOrChar:  {  if((Tmp >= 'A' && Tmp <= 'Z') || (Tmp >='a' && Tmp <='z') || (Tmp >= '0' && Tmp <= '9'))  {  if(isPlaintext == NotPwd)  {  putchar(Tmp);  }  else  {  putchar('*');  }  acStr[i++] = Tmp;  }  }break; }  } } if(flg == 1) break; } acStr[i] = '/0'; return 0;}/*******************************鏈表初始化函數******************************** 名稱:鏈表初始化函數 參數: data:數據 head:鏈表頭指針 功能: 鏈表初始化 **************************************************************************/void* LinkInit(void *data){ struct NODE *head; head = (struct NODE*)malloc(sizeof(struct NODE)); if(head == NULL) { perror("linkinit error"); return NULL; } head->data = data; head->NEXT = NULL; return head;}/*******************************增加鏈表節點函數******************************** 名稱:增加鏈表節點函數 參數: phead:鏈表頭節點 data:數據 len:要操作的鏈表節點數據結構的大小 功能: 增加鏈表節點 **************************************************************************/void LinkAddNode(struct NODE *phead, void *data, int len){ struct NODE *pNew; struct NODE *pTemp; pTemp = phead; while(pTemp->NEXT != NULL) { pTemp = pTemp->NEXT; } pNew = (struct NODE *)malloc(sizeof(struct NODE)); if(pNew == NULL) { perror("LindAddNode error"); return; } else { pNew->data = malloc(len); if(pNew->data == NULL) { perror("LindAddNode error"); return; } } memcpy(pNew->data, data, len); pNew->NEXT = NULL; pTemp->NEXT = pNew; return;}/*int DataInit(){ int i; struct MAN m[] =  { {"1001", "admin", "123456", 0, 1},  {"1002", "manager", "123456", 1, 1}, {"1003", "waiter", "123456", 2, 1} }; i = 0; myhead = (struct NODE*)LinkInit(NULL);  for(i = 0; i < 3; i++) { LinkAddNode(myhead, &m[i], sizeof(m[i])); } return 0;}*//*******************************釋放鏈表函數******************************** 名稱:釋放鏈表函數 參數: phead:鏈表頭節點 功能: 釋放鏈表 **************************************************************************/void LinkFreeNode(struct NODE *phead){ struct NODE *pTemp = phead; //static int aaa = 0; while(pTemp != NULL) { phead = phead->NEXT; free(pTemp->data); free(pTemp); pTemp = phead; //printf("釋放次數=%d/n", ++aaa); } return;}/*******************************打印鏈表函數******************************** 名稱:打印鏈表函數 參數: phead:鏈表頭節點 myprint:函數指針 data:要打印的數據 f:要打印的位置的行數 功能: 打印鏈表 **************************************************************************/void LinkPrint(struct NODE *phead, void(*myprint)(void* data,int f)){ int i=5; struct NODE *pTemp = phead->NEXT; while(pTemp != NULL) { Gotoxy(i++, 3); myprint(pTemp->data,i);  //在第i行打印數據 pTemp = pTemp->NEXT; }}/*******************************只打印在職人員信息節點函數******************************** 名稱:只打印在職人員信息節點函數 參數: phead:鏈表頭節點 myprint:函數指針 data:要打印的數據 f:要打印的位置的行數 功能: 只打印在職人員信息節點 **************************************************************************/void Man_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f)){ int i=5; struct NODE *pTemp = phead->NEXT; while(pTemp != NULL) { if(((struct MAN*)(pTemp->data))->flag==49) //判斷flag是否為1,若為1則為在職,將其打印 { Gotoxy(i++, 3); myprint(pTemp->data,i); } pTemp = pTemp->NEXT; }}/*******************************只打印在用會員信息節點函數******************************** 名稱:只打印在用會員信息節點函數 參數: phead:鏈表頭節點 myprint:函數指針 data:要打印的數據 f:要打印的位置的行數 功能: 只打印在用會員信息節點 **************************************************************************/void As_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f)){ int i=5; struct NODE *pTemp = phead->NEXT; while(pTemp != NULL) { if(((struct ASSOCIATOR*)(pTemp->data))->flag==49) { Gotoxy(i++, 3); myprint(pTemp->data,i); } pTemp = pTemp->NEXT; }}/*******************************只打印在用臺桌信息節點函數******************************** 名稱:只打印在用臺桌信息節點函數 參數: phead:鏈表頭節點 myprint:函數指針 data:要打印的數據 f:要打印的位置的行數 功能: 只打印在用臺桌信息節點 **************************************************************************/void Table_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f)){ int i=5; struct NODE *pTemp = phead->NEXT; while(pTemp != NULL) { if(((struct TABLE*)(pTemp->data))->role==49) { Gotoxy(i++, 3); myprint(pTemp->data,i); } pTemp = pTemp->NEXT; }}/*******************************只打印在用菜譜信息節點函數******************************** 名稱:只打印在用菜譜信息節點函數 參數: phead:鏈表頭節點 myprint:函數指針 data:要打印的數據 f:要打印的位置的行數 功能: 只打印在用菜譜信息節點 **************************************************************************/void Dish_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f)){ int i=4; struct NODE *pTemp = phead->NEXT; while(pTemp != NULL) { if(((struct DISH*)(pTemp->data))->flag==49) { Gotoxy(i++, 3); myprint(pTemp->data,i); } pTemp = pTemp->NEXT; }}/*******************************打印每個員工信息節點函數******************************** 名稱:打印每個員工信息節點函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印每個員工信息節點 **************************************************************************/void ManPrint(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct MAN*)data)->id); Gotoxy(i, 19); printf("%s",((struct MAN*)data)->name); Gotoxy(i, 35); printf("*******"); Gotoxy(i, 51); if(((struct MAN*)data)->role==48) printf("管理員"); if(((struct MAN*)data)->role==49) printf("經理"); if(((struct MAN*)data)->role==50) printf("服務員"); Gotoxy(i, 67); if(((struct MAN*)data)->flag==48) printf("離職"); if(((struct MAN*)data)->flag==49) printf("在職");}/*******************************打印每會員信息節點函數******************************** 名稱:打印每個會員信息節點函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印每個會員信息節點 **************************************************************************/void AsPrint(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct ASSOCIATOR*)data)->no); Gotoxy(i, 19); printf("%s",((struct ASSOCIATOR*)data)->name); Gotoxy(i, 35); printf("%s",((struct ASSOCIATOR*)data)->score); Gotoxy(i, 51); printf("%c",((struct ASSOCIATOR*)data)->flag);}/*******************************打印每個臺桌信息節點函數******************************** 名稱:打印每個臺桌信息節點函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印每個臺桌信息節點 **************************************************************************/void TablePrint(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct TABLE*)data)->no); Gotoxy(i, 24); printf("%s",((struct TABLE*)data)->flag); Gotoxy(i, 45); printf("%s",((struct TABLE*)data)->des);}/*******************************打印每個菜品信息節點函數******************************** 名稱:打印每個菜品信息節點函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印每個菜品信息節點 **************************************************************************/void DishPrint(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct DISH*)data)->no); Gotoxy(i, 24); printf("%s",((struct DISH*)data)->name); Gotoxy(i, 45); printf("¥%s",((struct DISH*)data)->price);}/*******************************點菜并顯示函數******************************** 名稱:點菜并顯示函數 參數: phead:鏈表頭結點 data:訂單中點的菜的節點數據 pTmp:指向菜譜節點的指針 money:點的菜的單價的合計 f:標志位 n:份數 功能: 點菜并顯示 **************************************************************************/void Link_Dish_Print(struct NODE *phead,void *data){ int i=5,j,n=0,money=0,f; struct NODE *pTemp = phead->NEXT; while(pTemp != NULL) { f=0; Gotoxy(i, 3); for(j=0;j<11;j++) { if(strcmp((((struct ORDER*)data)->x[j]).no,((struct DISH*)(pTemp->data))->no)==0) //找到訂單對應的 點的菜 的節點,并從菜譜中獲取該菜的單價 { n=number_change((((struct ORDER*)data)->x[j]).num)+n; money=number_change(((struct DISH*)(pTemp->data))->price)*number_change((((struct ORDER*)data)->x[j]).num)+money; order_dish_difprint(pTemp->data,i++,number_change((((struct ORDER*)data)->x[j]).num)); //有“*”號的打印函數 f=1; } } if(f==0 && ((struct DISH*)(pTemp->data))->flag==49) order_dish_print(pTemp->data,i++);    //無“*”號的打印函數 pTemp = pTemp->NEXT; //i++; } char_change(money,((struct ORDER*)data)->money);   //將char類型轉換為int類型的函數 Gotoxy(18, 44); printf("%d",money); Gotoxy(18, 66); printf("%d",n);}/*******************************打印點菜界面中每個菜品信息節點函數******************************** 名稱:打印點菜界面中每個菜品信息節點函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印點菜界面中每個菜品信息節點 **************************************************************************/void order_dish_print(void *data,int i){ Gotoxy(i, 4); printf("%s",((struct DISH*)data)->no); Gotoxy(i, 24); printf("%s",((struct DISH*)data)->name); Gotoxy(i, 45); printf("¥%s",((struct DISH*)data)->price); Gotoxy(i, 66); printf("%s",((struct DISH*)data)->num);}/*******************************打印點菜界面中帶“*”的每個菜品信息節點函數******************************** 名稱:打印點菜界面中帶“*”的每個菜品信息節點函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印點菜界面中帶“*”的每個菜品信息節點 **************************************************************************/void order_dish_difprint(void *data,int i,int num){ Gotoxy(i, 3); putchar('*'); Gotoxy(i, 4); printf("%s",((struct DISH*)data)->no); Gotoxy(i, 24); printf("%s",((struct DISH*)data)->name); Gotoxy(i, 45); printf("¥%s",((struct DISH*)data)->price); Gotoxy(i, 66); printf("%d",num);}/*******************************打印買單界面中每個訂單節點信息函數******************************** 名稱:打印買單界面中每個訂單節點信息函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印買單界面中每個訂單節點信息 **************************************************************************/void Order_Checkout_Print(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct ORDER*)data)->order_no); Gotoxy(i, 24); printf("¥%s",((struct ORDER*)data)->money); Gotoxy(i, 45); printf("%s",((struct ORDER*)data)->order_flag);}/*******************************打印營業額查詢界面中每個已買單訂單節點信息函數******************************** 名稱:打印營業額查詢界面中每個已買單訂單節點信息函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印營業額查詢界面中每個已買單訂單節點信息 **************************************************************************/void Order_Checkouted_Print(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct ORDER*)data)->order_no); Gotoxy(i, 24); printf("%s",((struct ORDER*)data)->time); Gotoxy(i, 45); printf("¥%s",((struct ORDER*)data)->money);}/*******************************打印訂單查詢界面中每個訂單節點信息函數******************************** 名稱:打印訂單查詢界面中每個訂單節點信息函數 參數: data:要打印的數據 i:在第i行打印 功能: 打印訂單查詢界面中每個訂單節點信息 **************************************************************************/void Check_Order_id(void *data,int i){ Gotoxy(i, 3); printf("%s",((struct ORDER*)data)->order_no); Gotoxy(i, 18); printf("%s",((struct ORDER*)data)->time); Gotoxy(i, 33); printf("¥%s",((struct ORDER*)data)->money); Gotoxy(i, 48); printf("%s",((struct ORDER*)data)->order_flag);}/*******************************從鏈表寫入數據到文件函數******************************** 名稱:從鏈表寫入數據到文件函數 參數: phead:鏈表頭指針 datalen:單個節點的大小 f:標志位,判斷要寫入哪個的文件 功能: 從鏈表寫入數據到文件 **************************************************************************/int linktofile(struct NODE *phead, int datalen,int f){ FILE *fp; struct NODE *pTemp = phead->NEXT; if(f==1) fp = fopen("./maninfo.txt", "wb+");  //寫入人員文件 else if(f==2) fp = fopen("./tableinfo.txt", "wb+");  //寫入臺桌文件 else if(f==3) fp = fopen("./dishinfo.txt", "wb+");  //寫入菜譜文件 else if(f==4) fp = fopen("./orderinfo.txt", "wb+");  //寫入訂單文件 else if(f==5) fp = fopen("./associatorinfo.txt", "wb+");   //寫入會員文件 if(fp == NULL) { perror("open file(man)"); return -1; } while(pTemp != NULL) {  fwrite(pTemp->data, 1, datalen, fp); pTemp = pTemp->NEXT; } LinkFreeNode(phead); if(f==4)           //釋放內存中的鏈表 orderhead = (struct NODE*)LinkInit(NULL); if(f==5) ashead = (struct NODE*)LinkInit(NULL); if(f!=4 && f!=5)  myhead = (struct NODE*)LinkInit(NULL); fclose(fp); return 0;}/*******************************從文件中讀出數據到鏈表函數******************************** 名稱:從文件中讀出數據到鏈表函數 參數: phead:鏈表頭指針 datalen:單個節點的大小 f:標志位,判斷要寫入哪個的文件 功能: 從文件中讀出數據到鏈表 **************************************************************************/void linkfromfile(struct NODE *phead,int datalen,int f){ int x,i; FILE *fp; void *q; q=(void *)malloc(datalen); //struct MAN *q; //q=new MAN; memset(q, 0, sizeof(datalen)); if(f==1) fp = fopen("./maninfo.txt", "rb+"); else if(f==2) fp = fopen("./tableinfo.txt", "rb+"); else if(f==3) fp = fopen("./dishinfo.txt", "rb+"); else if(f==4) fp = fopen("./orderinfo.txt", "rb+"); else if(f==5) fp = fopen("./associatorinfo.txt", "rb+"); if(fp == NULL) { return ; } fseek(fp,0,SEEK_END); x=ftell(fp); rewind(fp); //printf("%d/n",(x/datalen)); for(i=0;i<(x/datalen);i++) { fread(q,1,datalen,fp); if(q==NULL) { printf("無數據記錄/n"); } LinkAddNode(phead,q,datalen); } free(q); q=NULL; fclose(fp);}/*******************************從鏈表中獲取指定節點函數******************************** 名稱:從鏈表中獲取指定節點函數 參數: iIndex:指定位置的參數 phead:鏈表頭指針 f:標志位,判斷是對哪種鏈表的操作 功能: 從鏈表中獲取指定節點 **************************************************************************/NODE* LIST_GetNode(int iIndex,struct NODE *phead,int f){ int n; struct NODE *tmp=NULL; tmp=phead->NEXT; while(tmp!=NULL) { if(f==1) n=number_change(((struct MAN *)(tmp->data))->id); else if(f==2) n=number_change(((struct TABLE *)(tmp->data))->no); else if(f==3) n=number_change(((struct DISH *)(tmp->data))->no); else if(f==4) n=number_change(((struct ASSOCIATOR *)(tmp->data))->no); if(n==iIndex) break; tmp=tmp->NEXT; } if(tmp== NULL) { perror("未找到指定的結點索引"); return 0; } return tmp;}/*******************************從鏈表中刪除指定節點函數(真刪除)******************************** 名稱:從鏈表中刪除指定節點函數 參數: iIndex:指定位置的參數 phead:鏈表頭指針 f:標志位,判斷是對哪種鏈表的操作 功能: 從鏈表中刪除指定節點 **************************************************************************/void LIST_Del(int iIndex,struct NODE *phead,int f){ int n; struct NODE *tmp=NULL,*pre=NULL; tmp=phead->NEXT; pre=phead; while(tmp!=NULL) { if(f==1) n=number_change(((struct MAN *)(tmp->data))->id); else if(f==2) n=number_change(((struct TABLE *)(tmp->data))->no); else if(f==3) n=number_change(((struct DISH *)(tmp->data))->no); else if(f==4) n=number_change(((struct ASSOCIATOR *)(tmp->data))->no); if(n==iIndex) break; pre=tmp; tmp=tmp->NEXT; //tmp=tmp->NEXT; } //printf("%d/n",n); if(tmp== NULL) { perror("未找到指定的結點索引"); return ; } pre->NEXT=tmp->NEXT; free(tmp); return;}/*******************************從鏈表中刪除指定節點函數(假刪除)******************************** 名稱:從鏈表中刪除指定節點函數 參數: iIndex:指定位置的參數 phead:鏈表頭指針 f:標志位,判斷是對哪種鏈表的操作 功能: 從鏈表中刪除指定節點 **************************************************************************/void LIST_Del_FS(int iIndex,struct NODE *phead,int f){ int n; struct NODE *tmp; tmp=phead->NEXT; while(tmp!=NULL) { if(f==1) n=number_change(((struct MAN *)(tmp->data))->id); else if(f==2) n=number_change(((struct TABLE *)(tmp->data))->no); else if(f==3) n=number_change(((struct DISH *)(tmp->data))->no); else if(f==4) n=number_change(((struct ASSOCIATOR *)(tmp->data))->no); if(n==iIndex) break; tmp=tmp->NEXT; } if(tmp== NULL)     //改變節點的狀態 { perror("未找到指定的結點索引"); return ; } if(f==1) ((struct MAN *)(tmp->data))->flag=48; if(f==2) ((struct TABLE *)(tmp->data))->role=48; if(f==3) ((struct DISH *)(tmp->data))->flag=48; if(f==4) ((struct ASSOCIATOR *)(tmp->data))->flag=48; return;}/*******************************將char類型轉換為int類型的函數******************************** 名稱:將char類型轉換為int類型的函數 參數: id:char類型數組指針 功能: 將char類型轉換為int類型的 **************************************************************************/int number_change(char *id){ int num=0,i,n=1; for(i=0;i<strlen(id);i++) { num=(id[strlen(id)-i-1]-48)*n+num; n=n*10; } return num;}/*******************************將int類型轉換為char類型的函數******************************** 名稱:將int類型轉換為char類型的函數 參數: n: int類型數據 p:char類型數組指針 功能: 將int類型轉換為char類型的 **************************************************************************/void char_change(int n,char *p){ int num[10+1]; int i=0,j=0; memset(p,0,sizeof(p)); while(n) { num[i]=n%10; n=n/10; i++; } while(i) { p[j++]=num[--i]+48; }}/*******************************登錄時的人員識別函數******************************** 名稱:登錄時的人員識別函數 參數: acStr1[]: 輸入的用戶名 acStr2[]:輸入的密碼 datalen:單個節點的大小 功能: 登錄時的人員識別 **************************************************************************/char real_identifine(char acStr1[],char acStr2[],int datalen){ int f; struct NODE *tmp=NULL; if(!strcmp(acStr1,"admin"))    //超級用戶 { if(!strcmp(acStr2,"123456")) { return '3'; } else printf("密碼錯誤!"); } linkfromfile(myhead,datalen,1); tmp=myhead->NEXT; while(tmp)    //遍歷人員鏈表查找是否存在,如果存在返回其對應角色 { if(!strcmp(acStr1,((struct MAN *)(tmp->data))->id)) { if(!strcmp(acStr2,((struct MAN *)(tmp->data))->pwd)) { return ((struct MAN *)(tmp->data))->role; } else printf("密碼錯誤!"); } tmp=tmp->NEXT; } printf("用戶不存在!"); /*if(tmp== NULL) { perror("未找到指定的結點索引"); return 0; }*/}/*******************************初始化訂單節點函數******************************** 名稱:初始化訂單節點函數 參數: no:訂單對應的臺桌編號 n:記錄訂單個數的緩沖數據 m:創建的訂單節點 功能: 初始化訂單節點 **************************************************************************/void OrderData(char *no){ time_t t=time(0); char time[11]; int n; struct ORDER m; memset(&m,0,sizeof(struct ORDER)); n=1000+link_sum(orderhead,sizeof(struct ORDER),4); char_change(n,m.order_no); //memcpy(m.man_id,id,5); strcpy(m.man_id,waiter_ID); //strcpy(m.man_id,"1001"); memcpy(m.table_no,no,11); strftime(time, sizeof(time), "%Y%m%d",localtime(&t)); memset(m.time,0,sizeof(m.time)); strcpy(m.time,time); strcpy(m.order_flag,"未付款"); strcpy(m.money,"0"); memset(m.x,0,sizeof(m.x)); linkfromfile(orderhead,sizeof(m),4);    //從文件中讀出訂單鏈表 LinkAddNode(orderhead, &m, sizeof(m));   //在鏈表中加入新創建的訂單節點  linktofile(orderhead, sizeof(m),4);    //將鏈表寫入文件}/*******************************計算文件中節點個數函數******************************** 名稱:計算文件中節點個數函數 參數: phead:鏈表頭指針 datalen:單個節點的大小 f:標志位,判斷是哪個文件 功能: 計算文件中節點個數 **************************************************************************/int link_sum(struct NODE *phead,int datalen,int f){ int x,i; FILE *fp; if(f==1) fp = fopen("./maninfo.txt", "rb+"); else if(f==2) fp = fopen("./tableinfo.txt", "rb+"); else if(f==3) fp = fopen("./dishinfo.txt", "rb+"); else if(f==4) fp = fopen("./orderinfo.txt", "rb+"); else if(f==5) fp = fopen("./associatorinfo.txt", "rb+"); if(fp == NULL) { return 0; } fseek(fp,0,SEEK_END); x=ftell(fp); rewind(fp); return (x/datalen);  fclose(fp);}/*******************************在點菜界面中顯示被占用的臺桌的函數******************************** 名稱:在點菜界面中顯示被占用的臺桌的函數 參數: i:行數 pTemp:鏈表中節點的指針 功能: 在點菜界面中顯示被占用的臺桌的 **************************************************************************/void busy_table(){ int i=5; struct NODE *pTemp; ui_function_table(); linkfromfile(myhead,sizeof(struct TABLE),2);  //從文件中讀出臺桌鏈表 pTemp = myhead->NEXT; while(pTemp != NULL) { if(strcmp(((struct TABLE*)(pTemp->data))->flag,"占用")==0 && ((struct TABLE*)(pTemp->data))->role==49)//選取被占用且在用的臺桌將其打印 { Gotoxy(i++, 3); TablePrint(pTemp->data,i); } pTemp = pTemp->NEXT; } LinkFreeNode(myhead); myhead = (struct NODE*)LinkInit(NULL);}/*******************************在訂單查詢界面中顯示未買單的訂單信息函數******************************** 名稱:在訂單查詢界面中顯示未買單的訂單信息函數 參數: i:行數 pTemp:鏈表中節點的指針 功能: 在訂單查詢界面中顯示未買單的訂單信息 **************************************************************************/void un_checkout(){ int i=5; struct NODE *pTemp; ui_function_checkout(); linkfromfile(orderhead,sizeof(struct ORDER),4); pTemp = orderhead->NEXT; while(pTemp != NULL) { if(strcmp(((struct ORDER*)(pTemp->data))->order_flag,"未付款")==0) //選取未付款的訂單將其打印 { Gotoxy(i++, 3); Order_Checkout_Print(pTemp->data,i); } pTemp = pTemp->NEXT; } LinkFreeNode(orderhead); orderhead = (struct NODE*)LinkInit(NULL);}/*******************************在營業額查詢界面中顯示已買單的訂單信息函數******************************** 名稱:在營業額查詢界面中顯示已買單的訂單信息函數 參數: begin:開始時間 end: 結束時間 sum:總計金額 功能: 在營業額查詢界面中顯示已買單的訂單信息 **************************************************************************/void checkout_ed(char *begin,char *end){ int i=5,f=0,sum=0; struct NODE *pTemp; ui_function_checkmoney();  linkfromfile(orderhead,sizeof(struct ORDER),4); pTemp = orderhead->NEXT; while(pTemp != NULL) { if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end) && strcmp(((struct ORDER*)(pTemp->data))->order_flag,"已付款")==0) { Gotoxy(i++, 3); Order_Checkouted_Print(pTemp->data,i); f=1; sum=number_change(((struct ORDER*)(pTemp->data))->money)+sum; } pTemp = pTemp->NEXT; } Gotoxy(15, 60); printf("¥%d",sum); if(f==0) { Gotoxy(6, 20); printf("暫無數據!"); } LinkFreeNode(orderhead); orderhead = (struct NODE*)LinkInit(NULL);}/*******************************在訂單查詢界面中顯示已買單和未買單的訂單信息函數******************************** 名稱:在訂單查詢界面中顯示已買單和未買單的訂單信息 參數: begin:開始時間 end: 結束時間 g: 指定是要查詢已買單,還是未買單 功能: 在訂單查詢界面中顯示已買單和未買單的訂單信息 **************************************************************************/void check_order_id(char *begin,char *end,int g){ int i=5,f=0,j=5; struct NODE *pTemp,*p; ui_function_checkorderid();  linkfromfile(orderhead,sizeof(struct ORDER),4); linkfromfile(myhead,sizeof(struct MAN),1); pTemp = orderhead->NEXT; p=myhead->NEXT; while(pTemp != NULL && g==50) //打印已付款 { if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end) && strcmp(((struct ORDER*)(pTemp->data))->order_flag,"已付款")==0) { while(p != NULL) { if(strcmp(((struct MAN*)(p->data))->id,((struct ORDER*)(pTemp->data))->man_id)==0) {  Gotoxy(j++, 63);  printf("%s",((struct MAN*)(p->data))->name); } p=p->NEXT; } p=myhead->NEXT; Gotoxy(i, 3); Check_Order_id(pTemp->data,i++); f=1;  } pTemp = pTemp->NEXT; } pTemp = orderhead->NEXT; p=myhead->NEXT; while(pTemp != NULL && g==49)  //打印未付款 { if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end) && strcmp(((struct ORDER*)(pTemp->data))->order_flag,"未付款")==0) { while(p != NULL) { if(strcmp(((struct MAN*)(p->data))->id,((struct ORDER*)(pTemp->data))->man_id)==0) {  Gotoxy(j++, 63);  printf("%s",((struct MAN*)(p->data))->name); } p=p->NEXT; } p=myhead->NEXT; Gotoxy(i, 3); Check_Order_id(pTemp->data,i++); f=1; } pTemp = pTemp->NEXT; } if(f==0) { Gotoxy(6, 20); printf("暫無數據!"); } LinkFreeNode(orderhead); orderhead = (struct NODE*)LinkInit(NULL); LinkFreeNode(myhead); myhead = (struct NODE*)LinkInit(NULL);}/*******************************在營收查詢界面中顯示已買單和未買單的訂單信息函數******************************** 名稱:在營收查詢界面中顯示已買單的訂單信息函數 參數: begin:開始時間 end: 結束時間 sum:某服務員的總營業額 count:全體服務員的營收總額 功能: 在營收查詢界面中顯示已買單的訂單信息 **************************************************************************/void check_waiter_money(char *begin,char *end){ int i=5,sum,count=0; struct NODE *pTemp; struct NODE *p; ui_count_director();  linkfromfile(orderhead,sizeof(struct ORDER),4); linkfromfile(myhead,sizeof(struct MAN),1); pTemp = orderhead->NEXT; p=myhead->NEXT; while(p != NULL) { sum=0; if(((struct MAN*)(p->data))->role==50) { while(pTemp != NULL)   //選取訂單中時間符合要求的,已付款的,對應員工的訂單,并合計 { if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end))  if(strcmp(((struct ORDER*)(pTemp->data))->order_flag,"已付款")==0)  if(strcmp(((struct MAN*)(p->data))->id,((struct ORDER*)(pTemp->data))->man_id)==0)  {  sum=number_change(((struct ORDER*)(pTemp->data))->money)+sum;  }  pTemp = pTemp->NEXT; } pTemp = orderhead->NEXT; Gotoxy(i, 3); printf("%s",((struct MAN*)(p->data))->name); Gotoxy(i, 48); printf("¥%d",sum); i++; } count=count+sum; Gotoxy(16, 60); printf("¥%d",count); p=p->NEXT; } /*if(f==0) { Gotoxy(24, 10); printf("暫無數據!"); }*/ LinkFreeNode(orderhead); orderhead = (struct NODE*)LinkInit(NULL); LinkFreeNode(myhead); myhead = (struct NODE*)LinkInit(NULL);}/*******************************加菜函數******************************** 名稱:加菜函數 參數: data:訂單節點數據部分 no:要指定的菜品編號 num:點菜的份數 功能: 加菜 **************************************************************************/void add_dish(void *data,char *no,char *num){ int i,n; for(i=0;i<11;i++) { if(strcmp((((struct ORDER*)data)->x[i]).no,no)==0)  //找到菜品的單價 { n=number_change((((struct ORDER*)data)->x[i]).num)+number_change(num); char_change(n,(((struct ORDER*)data)->x[i]).num); //puts((((struct ORDER*)data)->x[i]).num); return; } } for(i=0;i<11;i++) { if((((struct ORDER*)data)->x[i]).no[0]=='/0')  //找到指定訂單節點,加入點的菜的編號和份數 { strcpy((((struct ORDER*)data)->x[i]).no,no); n=number_change((((struct ORDER*)data)->x[i]).num)+number_change(num); char_change(n,(((struct ORDER*)data)->x[i]).num); return; } }}/*******************************退菜函數******************************** 名稱:退菜函數 參數: data:訂單節點數據部分 no:要指定的菜品編號 num:點菜的份數 功能: 退菜 **************************************************************************/void sub_dish(void *data,char *no,char *num){ int i,n; for(i=0;i<11;i++) { if(strcmp((((struct ORDER*)data)->x[i]).no,no)==0) { n=number_change((((struct ORDER*)data)->x[i]).num)-number_change(num); char_change(n,((((struct ORDER*)data)->x[i]).num)); puts((((struct ORDER*)data)->x[i]).num); if(n==0) { char_change(n,(((struct ORDER*)data)->x[i]).num); memset((((struct ORDER*)data)->x[i]).no,0,sizeof((((struct ORDER*)data)->x[i]).no)); } return; } }}

更多學習資料請關注專題《管理系統開發》。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品一区二区三区在线播放视频| 日韩不卡在线观看| 日韩成人中文字幕| 国产+人+亚洲| 国产精品嫩草视频| 欧美人成在线视频| 精品中文视频在线| 97色在线视频| 欧美精品999| 精品在线小视频| 国产一区玩具在线观看| 国产日韩欧美在线视频观看| 久久久精品视频在线观看| 丝袜亚洲另类欧美重口| 久久国产精品久久久久久| 欧美又大又粗又长| 欧美在线视频一二三| 欧美一级大片视频| 国产欧美日韩中文字幕在线| 国产成人精品a视频一区www| 日韩精品免费在线视频| 亚洲视频在线观看| 欧美极品少妇与黑人| 青青精品视频播放| 日韩免费在线看| 亚洲第一天堂无码专区| 国产精品羞羞答答| 成人性生交xxxxx网站| 国产精品美女免费| 国产精品自产拍在线观| 久久久成人精品视频| 国产精品视频免费观看www| 91中文字幕在线观看| 亚洲一区亚洲二区| 亚洲free嫩bbb| 最近中文字幕日韩精品| 亚洲成人免费在线视频| 亚洲欧美一区二区精品久久久| 欧美日韩成人在线观看| xxx一区二区| 亚洲深夜福利网站| 欧美性高跟鞋xxxxhd| 欧美日韩在线看| 成人免费网站在线观看| 国产一区二区黄| 亚洲精品小视频在线观看| 91在线播放国产| 91精品国产91久久久| 91免费版网站入口| 亚洲精品久久久久久久久久久久久| 欧美电影免费播放| 欧美中文在线字幕| 久久久91精品国产一区不卡| 国产精品成人品| 亚洲性日韩精品一区二区| 精品亚洲va在线va天堂资源站| 国产在线精品播放| www.日本久久久久com.| 国产精品成人久久久久| 91久久精品国产91性色| 91av网站在线播放| 777国产偷窥盗摄精品视频| 国产精品九九久久久久久久| 日韩精品视频三区| 欧美最猛性xxxx| 国产日本欧美在线观看| 亚洲欧美成人精品| 欧美中文字幕在线播放| 国产91精品在线播放| 欧美国产精品va在线观看| 午夜精品一区二区三区视频免费看| 亚洲成人xxx| 欧美老肥婆性猛交视频| 亚洲欧美日韩在线一区| 欧洲成人在线观看| 日韩av电影国产| 日韩免费av片在线观看| 久久久免费在线观看| 亚洲人在线观看| 欧美中文字幕视频在线观看| 成人性生交xxxxx网站| 清纯唯美亚洲激情| 中日韩美女免费视频网址在线观看| 不卡伊人av在线播放| 亚洲美女在线观看| 欧美日韩国产精品一区| 日韩国产激情在线| 91成人在线视频| 日韩大片免费观看视频播放| 国产精品久久久久久久久久久不卡| 亚洲国产精品系列| 91精品久久久久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 国产精品福利网站| 色悠久久久久综合先锋影音下载| 成人疯狂猛交xxx| 91欧美日韩一区| 精品在线观看国产| 亚洲电影成人av99爱色| 91大神在线播放精品| 亚洲国产另类久久精品| 97免费中文视频在线观看| 亚洲人成伊人成综合网久久久| 日韩精品极品毛片系列视频| 国产精品视频久| 日日骚久久av| 性金发美女69hd大尺寸| 欧美福利视频网站| 国产玖玖精品视频| 欧美精品videofree1080p| 性日韩欧美在线视频| 97国产精品久久| 欧美激情视频在线| 成人黄色影片在线| 最近2019年日本中文免费字幕| 国产精品高潮呻吟视频| 亚洲欧美日韩精品久久| 国产精品久久久久久亚洲影视| 欧美另类暴力丝袜| 亚洲第一国产精品| 国产成人黄色av| 成人国产精品久久久久久亚洲| 亚洲自拍偷拍色图| 日韩www在线| 国产成人精品电影久久久| 91高清视频免费观看| 国产精品网址在线| 久久亚洲欧美日韩精品专区| 欧美人成在线视频| 精品久久香蕉国产线看观看亚洲| 欧美大片网站在线观看| 亚洲美女www午夜| 日韩视频在线免费观看| 中文字幕av日韩| 国产亚洲视频在线观看| 国产91热爆ts人妖在线| 国产亚洲视频在线观看| 久久久www成人免费精品| 久久久久久久激情视频| 国产精品久久激情| 久久色精品视频| …久久精品99久久香蕉国产| 欧美亚洲国产视频| 久久天天躁狠狠躁夜夜躁| 日韩美女视频中文字幕| 亚洲欧美国产精品专区久久| 亚洲影院在线看| 欧美激情视频三区| 国产日韩换脸av一区在线观看| 国产日韩在线亚洲字幕中文| 国产精品丝袜高跟| 宅男66日本亚洲欧美视频| 国产精品成av人在线视午夜片| 97国产真实伦对白精彩视频8| 伊是香蕉大人久久| 亚洲97在线观看| 国产精品久久久久久久久借妻| 最近更新的2019中文字幕| 26uuu久久噜噜噜噜| 日韩视频免费大全中文字幕| 中文字幕欧美日韩va免费视频| 久久久久久久av| 久久亚洲国产精品成人av秋霞| 欧美一性一乱一交一视频|