餐馆点菜系统C语言源代码
餐馆点菜系统c语言的源代码,一些封装的函数,对链表的操作,还有文件的存取,供大家参考,具体内容如下
#include"public.h" structNODE*myhead; structNODE*orderhead; structNODE*ashead; charwaiter_ID[4+1]; /*******************************设置输入框颜色******************************************* 名称:设置输入框颜色 参数: iNum表示:编辑框的长度 功能: *************************************************************************************/ voidSetColorEdit(intiNum) { SetColor(4,14); while(iNum--) { putchar(''); } } voidSetColor(unsignedshortForeColor,unsignedshortBackGroundColor) { HANDLEhCon=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16)); } /*******************************编辑框aUI函数******************************************* 名称:编辑框aUI函数 参数: iLong表示:编辑框的长度 iWide表示:编辑框的宽度 x表示:编辑框起始行位置 y表示:编辑框起始列位置 acBuffer 表示:编辑框显示的内容 功能: 在x行y列制作一个长为iLong宽为iWide的编辑框,框中文本显示acBuffer字符串的内容 *************************************************************************************/ voidUI_EditBox(intiLong,intiWide,intx,inty,characBuffer[30]) { inti;/*宽*/ intj;/*长*/ 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("┏"); } elseif(i==0&&j==iLong) { printf("┓"); } elseif(i==iWide&&j==0) { printf("┗"); } elseif(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字符串的内容 *************************************************************************************/ voidUI_TestBox(intx,inty,characBuffer[30]) { Gotoxy(x,y); printf("%s",acBuffer); } /*******************************光标移动函数******************************** 名称:光标移动函数 参数: x表示:行 y表示:列 功能: 将光标移动至x行y列位置 **************************************************************************/ voidGotoxy(intx,inty) { CONSOLE_SCREEN_BUFFER_INFOcsbiInfo; HANDLEhConsoleOut; 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(无控制) **********************************************************************************/ intGlb_putString(characStr[],intiMaxLen,intiPutType,intisPlaintext,intiTmp) { charTmp; inti=0; intj; intflg; for(j=0;j0) { printf("\b\b"); acStr[--i]='\0'; } } else { if(i ='0'&&Tmp<='9') { if(isPlaintext==NotPwd) { putchar(Tmp); } else { putchar('*'); } acStr[i++]=Tmp; } }break; caseChar: { if((Tmp>='A'&&Tmp<='Z')||(Tmp>='a'&&Tmp<='z')) { if(isPlaintext==NotPwd) { putchar(Tmp); } else { putchar('*'); } acStr[i++]=Tmp; } }break; caseIntOrChar: { 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'; return0; } /*******************************链表初始化函数******************************** 名称:链表初始化函数 参数: data:数据 head:链表头指针 功能: 链表初始化 **************************************************************************/ void*LinkInit(void*data) { structNODE*head; head=(structNODE*)malloc(sizeof(structNODE)); if(head==NULL) { perror("linkiniterror"); returnNULL; } head->data=data; head->NEXT=NULL; returnhead; } /*******************************增加链表节点函数******************************** 名称:增加链表节点函数 参数: phead:链表头节点 data:数据 len:要操作的链表节点数据结构的大小 功能: 增加链表节点 **************************************************************************/ voidLinkAddNode(structNODE*phead,void*data,intlen) { structNODE*pNew; structNODE*pTemp; pTemp=phead; while(pTemp->NEXT!=NULL) { pTemp=pTemp->NEXT; } pNew=(structNODE*)malloc(sizeof(structNODE)); if(pNew==NULL) { perror("LindAddNodeerror"); return; } else { pNew->data=malloc(len); if(pNew->data==NULL) { perror("LindAddNodeerror"); return; } } memcpy(pNew->data,data,len); pNew->NEXT=NULL; pTemp->NEXT=pNew; return; } /*intDataInit() { inti; structMANm[]= { {"1001","admin","123456",0,1}, {"1002","manager","123456",1,1}, {"1003","waiter","123456",2,1} }; i=0; myhead=(structNODE*)LinkInit(NULL); for(i=0;i<3;i++) { LinkAddNode(myhead,&m[i],sizeof(m[i])); } return0; }*/ /*******************************释放链表函数******************************** 名称:释放链表函数 参数: phead:链表头节点 功能: 释放链表 **************************************************************************/ voidLinkFreeNode(structNODE*phead) { structNODE*pTemp=phead; //staticintaaa=0; while(pTemp!=NULL) { phead=phead->NEXT; free(pTemp->data); free(pTemp); pTemp=phead; //printf("释放次数=%d\n",++aaa); } return; } /*******************************打印链表函数******************************** 名称:打印链表函数 参数: phead:链表头节点 myprint:函数指针 data:要打印的数据 f:要打印的位置的行数 功能: 打印链表 **************************************************************************/ voidLinkPrint(structNODE*phead,void(*myprint)(void*data,intf)) { inti=5; structNODE*pTemp=phead->NEXT; while(pTemp!=NULL) { Gotoxy(i++,3); myprint(pTemp->data,i);//在第i行打印数据 pTemp=pTemp->NEXT; } } /*******************************只打印在职人员信息节点函数******************************** 名称:只打印在职人员信息节点函数 参数: phead:链表头节点 myprint:函数指针 data:要打印的数据 f:要打印的位置的行数 功能: 只打印在职人员信息节点 **************************************************************************/ voidMan_Half_Print(structNODE*phead,void(*myprint)(void*data,intf)) { inti=5; structNODE*pTemp=phead->NEXT; while(pTemp!=NULL) { if(((structMAN*)(pTemp->data))->flag==49)//判断flag是否为1,若为1则为在职,将其打印 { Gotoxy(i++,3); myprint(pTemp->data,i); } pTemp=pTemp->NEXT; } } /*******************************只打印在用会员信息节点函数******************************** 名称:只打印在用会员信息节点函数 参数: phead:链表头节点 myprint:函数指针 data:要打印的数据 f:要打印的位置的行数 功能: 只打印在用会员信息节点 **************************************************************************/ voidAs_Half_Print(structNODE*phead,void(*myprint)(void*data,intf)) { inti=5; structNODE*pTemp=phead->NEXT; while(pTemp!=NULL) { if(((structASSOCIATOR*)(pTemp->data))->flag==49) { Gotoxy(i++,3); myprint(pTemp->data,i); } pTemp=pTemp->NEXT; } } /*******************************只打印在用台桌信息节点函数******************************** 名称:只打印在用台桌信息节点函数 参数: phead:链表头节点 myprint:函数指针 data:要打印的数据 f:要打印的位置的行数 功能: 只打印在用台桌信息节点 **************************************************************************/ voidTable_Half_Print(structNODE*phead,void(*myprint)(void*data,intf)) { inti=5; structNODE*pTemp=phead->NEXT; while(pTemp!=NULL) { if(((structTABLE*)(pTemp->data))->role==49) { Gotoxy(i++,3); myprint(pTemp->data,i); } pTemp=pTemp->NEXT; } } /*******************************只打印在用菜谱信息节点函数******************************** 名称:只打印在用菜谱信息节点函数 参数: phead:链表头节点 myprint:函数指针 data:要打印的数据 f:要打印的位置的行数 功能: 只打印在用菜谱信息节点 **************************************************************************/ voidDish_Half_Print(structNODE*phead,void(*myprint)(void*data,intf)) { inti=4; structNODE*pTemp=phead->NEXT; while(pTemp!=NULL) { if(((structDISH*)(pTemp->data))->flag==49) { Gotoxy(i++,3); myprint(pTemp->data,i); } pTemp=pTemp->NEXT; } } /*******************************打印每个员工信息节点函数******************************** 名称:打印每个员工信息节点函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印每个员工信息节点 **************************************************************************/ voidManPrint(void*data,inti) { Gotoxy(i,3); printf("%s",((structMAN*)data)->id); Gotoxy(i,19); printf("%s",((structMAN*)data)->name); Gotoxy(i,35); printf("*******"); Gotoxy(i,51); if(((structMAN*)data)->role==48) printf("管理员"); if(((structMAN*)data)->role==49) printf("经理"); if(((structMAN*)data)->role==50) printf("服务员"); Gotoxy(i,67); if(((structMAN*)data)->flag==48) printf("离职"); if(((structMAN*)data)->flag==49) printf("在职"); } /*******************************打印每会员信息节点函数******************************** 名称:打印每个会员信息节点函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印每个会员信息节点 **************************************************************************/ voidAsPrint(void*data,inti) { Gotoxy(i,3); printf("%s",((structASSOCIATOR*)data)->no); Gotoxy(i,19); printf("%s",((structASSOCIATOR*)data)->name); Gotoxy(i,35); printf("%s",((structASSOCIATOR*)data)->score); Gotoxy(i,51); printf("%c",((structASSOCIATOR*)data)->flag); } /*******************************打印每个台桌信息节点函数******************************** 名称:打印每个台桌信息节点函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印每个台桌信息节点 **************************************************************************/ voidTablePrint(void*data,inti) { Gotoxy(i,3); printf("%s",((structTABLE*)data)->no); Gotoxy(i,24); printf("%s",((structTABLE*)data)->flag); Gotoxy(i,45); printf("%s",((structTABLE*)data)->des); } /*******************************打印每个菜品信息节点函数******************************** 名称:打印每个菜品信息节点函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印每个菜品信息节点 **************************************************************************/ voidDishPrint(void*data,inti) { Gotoxy(i,3); printf("%s",((structDISH*)data)->no); Gotoxy(i,24); printf("%s",((structDISH*)data)->name); Gotoxy(i,45); printf("¥%s",((structDISH*)data)->price); } /*******************************点菜并显示函数******************************** 名称:点菜并显示函数 参数: phead:链表头结点 data:订单中点的菜的节点数据 pTmp:指向菜谱节点的指针 money:点的菜的单价的合计 f:标志位 n:份数 功能: 点菜并显示 **************************************************************************/ voidLink_Dish_Print(structNODE*phead,void*data) { inti=5,j,n=0,money=0,f; structNODE*pTemp=phead->NEXT; while(pTemp!=NULL) { f=0; Gotoxy(i,3); for(j=0;j<11;j++) { if(strcmp((((structORDER*)data)->x[j]).no,((structDISH*)(pTemp->data))->no)==0)//找到订单对应的点的菜的节点,并从菜谱中获取该菜的单价 { n=number_change((((structORDER*)data)->x[j]).num)+n; money=number_change(((structDISH*)(pTemp->data))->price)*number_change((((structORDER*)data)->x[j]).num)+money; order_dish_difprint(pTemp->data,i++,number_change((((structORDER*)data)->x[j]).num));//有“*”号的打印函数 f=1; } } if(f==0&&((structDISH*)(pTemp->data))->flag==49) order_dish_print(pTemp->data,i++);//无“*”号的打印函数 pTemp=pTemp->NEXT; //i++; } char_change(money,((structORDER*)data)->money);//将char类型转换为int类型的函数 Gotoxy(18,44); printf("%d",money); Gotoxy(18,66); printf("%d",n); } /*******************************打印点菜界面中每个菜品信息节点函数******************************** 名称:打印点菜界面中每个菜品信息节点函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印点菜界面中每个菜品信息节点 **************************************************************************/ voidorder_dish_print(void*data,inti) { Gotoxy(i,4); printf("%s",((structDISH*)data)->no); Gotoxy(i,24); printf("%s",((structDISH*)data)->name); Gotoxy(i,45); printf("¥%s",((structDISH*)data)->price); Gotoxy(i,66); printf("%s",((structDISH*)data)->num); } /*******************************打印点菜界面中带“*”的每个菜品信息节点函数******************************** 名称:打印点菜界面中带“*”的每个菜品信息节点函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印点菜界面中带“*”的每个菜品信息节点 **************************************************************************/ voidorder_dish_difprint(void*data,inti,intnum) { Gotoxy(i,3); putchar('*'); Gotoxy(i,4); printf("%s",((structDISH*)data)->no); Gotoxy(i,24); printf("%s",((structDISH*)data)->name); Gotoxy(i,45); printf("¥%s",((structDISH*)data)->price); Gotoxy(i,66); printf("%d",num); } /*******************************打印买单界面中每个订单节点信息函数******************************** 名称:打印买单界面中每个订单节点信息函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印买单界面中每个订单节点信息 **************************************************************************/ voidOrder_Checkout_Print(void*data,inti) { Gotoxy(i,3); printf("%s",((structORDER*)data)->order_no); Gotoxy(i,24); printf("¥%s",((structORDER*)data)->money); Gotoxy(i,45); printf("%s",((structORDER*)data)->order_flag); } /*******************************打印营业额查询界面中每个已买单订单节点信息函数******************************** 名称:打印营业额查询界面中每个已买单订单节点信息函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印营业额查询界面中每个已买单订单节点信息 **************************************************************************/ voidOrder_Checkouted_Print(void*data,inti) { Gotoxy(i,3); printf("%s",((structORDER*)data)->order_no); Gotoxy(i,24); printf("%s",((structORDER*)data)->time); Gotoxy(i,45); printf("¥%s",((structORDER*)data)->money); } /*******************************打印订单查询界面中每个订单节点信息函数******************************** 名称:打印订单查询界面中每个订单节点信息函数 参数: data:要打印的数据 i:在第i行打印 功能: 打印订单查询界面中每个订单节点信息 **************************************************************************/ voidCheck_Order_id(void*data,inti) { Gotoxy(i,3); printf("%s",((structORDER*)data)->order_no); Gotoxy(i,18); printf("%s",((structORDER*)data)->time); Gotoxy(i,33); printf("¥%s",((structORDER*)data)->money); Gotoxy(i,48); printf("%s",((structORDER*)data)->order_flag); } /*******************************从链表写入数据到文件函数******************************** 名称:从链表写入数据到文件函数 参数: phead:链表头指针 datalen:单个节点的大小 f:标志位,判断要写入哪个的文件 功能: 从链表写入数据到文件 **************************************************************************/ intlinktofile(structNODE*phead,intdatalen,intf) { FILE*fp; structNODE*pTemp=phead->NEXT; if(f==1) fp=fopen("./maninfo.txt","wb+");//写入人员文件 elseif(f==2) fp=fopen("./tableinfo.txt","wb+");//写入台桌文件 elseif(f==3) fp=fopen("./dishinfo.txt","wb+");//写入菜谱文件 elseif(f==4) fp=fopen("./orderinfo.txt","wb+");//写入订单文件 elseif(f==5) fp=fopen("./associatorinfo.txt","wb+");//写入会员文件 if(fp==NULL) { perror("openfile(man)"); return-1; } while(pTemp!=NULL) { fwrite(pTemp->data,1,datalen,fp); pTemp=pTemp->NEXT; } LinkFreeNode(phead); if(f==4)//释放内存中的链表 orderhead=(structNODE*)LinkInit(NULL); if(f==5) ashead=(structNODE*)LinkInit(NULL); if(f!=4&&f!=5) myhead=(structNODE*)LinkInit(NULL); fclose(fp); return0; } /*******************************从文件中读出数据到链表函数******************************** 名称:从文件中读出数据到链表函数 参数: phead:链表头指针 datalen:单个节点的大小 f:标志位,判断要写入哪个的文件 功能: 从文件中读出数据到链表 **************************************************************************/ voidlinkfromfile(structNODE*phead,intdatalen,intf) { intx,i; FILE*fp; void*q; q=(void*)malloc(datalen); //structMAN*q; //q=newMAN; memset(q,0,sizeof(datalen)); if(f==1) fp=fopen("./maninfo.txt","rb+"); elseif(f==2) fp=fopen("./tableinfo.txt","rb+"); elseif(f==3) fp=fopen("./dishinfo.txt","rb+"); elseif(f==4) fp=fopen("./orderinfo.txt","rb+"); elseif(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(intiIndex,structNODE*phead,intf) { intn; structNODE*tmp=NULL; tmp=phead->NEXT; while(tmp!=NULL) { if(f==1) n=number_change(((structMAN*)(tmp->data))->id); elseif(f==2) n=number_change(((structTABLE*)(tmp->data))->no); elseif(f==3) n=number_change(((structDISH*)(tmp->data))->no); elseif(f==4) n=number_change(((structASSOCIATOR*)(tmp->data))->no); if(n==iIndex) break; tmp=tmp->NEXT; } if(tmp==NULL) { perror("未找到指定的结点索引"); return0; } returntmp; } /*******************************从链表中删除指定节点函数(真删除)******************************** 名称:从链表中删除指定节点函数 参数: iIndex:指定位置的参数 phead:链表头指针 f:标志位,判断是对哪种链表的操作 功能: 从链表中删除指定节点 **************************************************************************/ voidLIST_Del(intiIndex,structNODE*phead,intf) { intn; structNODE*tmp=NULL,*pre=NULL; tmp=phead->NEXT; pre=phead; while(tmp!=NULL) { if(f==1) n=number_change(((structMAN*)(tmp->data))->id); elseif(f==2) n=number_change(((structTABLE*)(tmp->data))->no); elseif(f==3) n=number_change(((structDISH*)(tmp->data))->no); elseif(f==4) n=number_change(((structASSOCIATOR*)(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:标志位,判断是对哪种链表的操作 功能: 从链表中删除指定节点 **************************************************************************/ voidLIST_Del_FS(intiIndex,structNODE*phead,intf) { intn; structNODE*tmp; tmp=phead->NEXT; while(tmp!=NULL) { if(f==1) n=number_change(((structMAN*)(tmp->data))->id); elseif(f==2) n=number_change(((structTABLE*)(tmp->data))->no); elseif(f==3) n=number_change(((structDISH*)(tmp->data))->no); elseif(f==4) n=number_change(((structASSOCIATOR*)(tmp->data))->no); if(n==iIndex) break; tmp=tmp->NEXT; } if(tmp==NULL)//改变节点的状态 { perror("未找到指定的结点索引"); return; } if(f==1) ((structMAN*)(tmp->data))->flag=48; if(f==2) ((structTABLE*)(tmp->data))->role=48; if(f==3) ((structDISH*)(tmp->data))->flag=48; if(f==4) ((structASSOCIATOR*)(tmp->data))->flag=48; return; } /*******************************将char类型转换为int类型的函数******************************** 名称:将char类型转换为int类型的函数 参数: id:char类型数组指针 功能: 将char类型转换为int类型的 **************************************************************************/ intnumber_change(char*id) { intnum=0,i,n=1; for(i=0;i NEXT; while(tmp)//遍历人员链表查找是否存在,如果存在返回其对应角色 { if(!strcmp(acStr1,((structMAN*)(tmp->data))->id)) { if(!strcmp(acStr2,((structMAN*)(tmp->data))->pwd)) { return((structMAN*)(tmp->data))->role; } else printf("密码错误!"); } tmp=tmp->NEXT; } printf("用户不存在!"); /*if(tmp==NULL) { perror("未找到指定的结点索引"); return0; }*/ } /*******************************初始化订单节点函数******************************** 名称:初始化订单节点函数 参数: no:订单对应的台桌编号 n:记录订单个数的缓冲数据 m:创建的订单节点 功能: 初始化订单节点 **************************************************************************/ voidOrderData(char*no) { time_tt=time(0); chartime[11]; intn; structORDERm; memset(&m,0,sizeof(structORDER)); n=1000+link_sum(orderhead,sizeof(structORDER),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:标志位,判断是哪个文件 功能: 计算文件中节点个数 **************************************************************************/ intlink_sum(structNODE*phead,intdatalen,intf) { intx,i; FILE*fp; if(f==1) fp=fopen("./maninfo.txt","rb+"); elseif(f==2) fp=fopen("./tableinfo.txt","rb+"); elseif(f==3) fp=fopen("./dishinfo.txt","rb+"); elseif(f==4) fp=fopen("./orderinfo.txt","rb+"); elseif(f==5) fp=fopen("./associatorinfo.txt","rb+"); if(fp==NULL) { return0; } fseek(fp,0,SEEK_END); x=ftell(fp); rewind(fp); return(x/datalen); fclose(fp); } /*******************************在点菜界面中显示被占用的台桌的函数******************************** 名称:在点菜界面中显示被占用的台桌的函数 参数: i:行数 pTemp:链表中节点的指针 功能: 在点菜界面中显示被占用的台桌的 **************************************************************************/ voidbusy_table() { inti=5; structNODE*pTemp; ui_function_table(); linkfromfile(myhead,sizeof(structTABLE),2);//从文件中读出台桌链表 pTemp=myhead->NEXT; while(pTemp!=NULL) { if(strcmp(((structTABLE*)(pTemp->data))->flag,"占用")==0&&((structTABLE*)(pTemp->data))->role==49)//选取被占用且在用的台桌将其打印 { Gotoxy(i++,3); TablePrint(pTemp->data,i); } pTemp=pTemp->NEXT; } LinkFreeNode(myhead); myhead=(structNODE*)LinkInit(NULL); } /*******************************在订单查询界面中显示未买单的订单信息函数******************************** 名称:在订单查询界面中显示未买单的订单信息函数 参数: i:行数 pTemp:链表中节点的指针 功能: 在订单查询界面中显示未买单的订单信息 **************************************************************************/ voidun_checkout() { inti=5; structNODE*pTemp; ui_function_checkout(); linkfromfile(orderhead,sizeof(structORDER),4); pTemp=orderhead->NEXT; while(pTemp!=NULL) { if(strcmp(((structORDER*)(pTemp->data))->order_flag,"未付款")==0)//选取未付款的订单将其打印 { Gotoxy(i++,3); Order_Checkout_Print(pTemp->data,i); } pTemp=pTemp->NEXT; } LinkFreeNode(orderhead); orderhead=(structNODE*)LinkInit(NULL); } /*******************************在营业额查询界面中显示已买单的订单信息函数******************************** 名称:在营业额查询界面中显示已买单的订单信息函数 参数: begin:开始时间 end:结束时间 sum:总计金额 功能: 在营业额查询界面中显示已买单的订单信息 **************************************************************************/ voidcheckout_ed(char*begin,char*end) { inti=5,f=0,sum=0; structNODE*pTemp; ui_function_checkmoney(); linkfromfile(orderhead,sizeof(structORDER),4); pTemp=orderhead->NEXT; while(pTemp!=NULL) { if(number_change(((structORDER*)(pTemp->data))->time)>=number_change(begin)&&number_change(((structORDER*)(pTemp->data))->time)<=number_change(end)&&strcmp(((structORDER*)(pTemp->data))->order_flag,"已付款")==0) { Gotoxy(i++,3); Order_Checkouted_Print(pTemp->data,i); f=1; sum=number_change(((structORDER*)(pTemp->data))->money)+sum; } pTemp=pTemp->NEXT; } Gotoxy(15,60); printf("¥%d",sum); if(f==0) { Gotoxy(6,20); printf("暂无数据!"); } LinkFreeNode(orderhead); orderhead=(structNODE*)LinkInit(NULL); } /*******************************在订单查询界面中显示已买单和未买单的订单信息函数******************************** 名称:在订单查询界面中显示已买单和未买单的订单信息 参数: begin:开始时间 end:结束时间 g:指定是要查询已买单,还是未买单 功能: 在订单查询界面中显示已买单和未买单的订单信息 **************************************************************************/ voidcheck_order_id(char*begin,char*end,intg) { inti=5,f=0,j=5; structNODE*pTemp,*p; ui_function_checkorderid(); linkfromfile(orderhead,sizeof(structORDER),4); linkfromfile(myhead,sizeof(structMAN),1); pTemp=orderhead->NEXT; p=myhead->NEXT; while(pTemp!=NULL&&g==50)//打印已付款 { if(number_change(((structORDER*)(pTemp->data))->time)>=number_change(begin)&&number_change(((structORDER*)(pTemp->data))->time)<=number_change(end)&&strcmp(((structORDER*)(pTemp->data))->order_flag,"已付款")==0) { while(p!=NULL) { if(strcmp(((structMAN*)(p->data))->id,((structORDER*)(pTemp->data))->man_id)==0) { Gotoxy(j++,63); printf("%s",((structMAN*)(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(((structORDER*)(pTemp->data))->time)>=number_change(begin)&&number_change(((structORDER*)(pTemp->data))->time)<=number_change(end)&&strcmp(((structORDER*)(pTemp->data))->order_flag,"未付款")==0) { while(p!=NULL) { if(strcmp(((structMAN*)(p->data))->id,((structORDER*)(pTemp->data))->man_id)==0) { Gotoxy(j++,63); printf("%s",((structMAN*)(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=(structNODE*)LinkInit(NULL); LinkFreeNode(myhead); myhead=(structNODE*)LinkInit(NULL); } /*******************************在营收查询界面中显示已买单和未买单的订单信息函数******************************** 名称:在营收查询界面中显示已买单的订单信息函数 参数: begin:开始时间 end:结束时间 sum:某服务员的总营业额 count:全体服务员的营收总额 功能: 在营收查询界面中显示已买单的订单信息 **************************************************************************/ voidcheck_waiter_money(char*begin,char*end) { inti=5,sum,count=0; structNODE*pTemp; structNODE*p; ui_count_director(); linkfromfile(orderhead,sizeof(structORDER),4); linkfromfile(myhead,sizeof(structMAN),1); pTemp=orderhead->NEXT; p=myhead->NEXT; while(p!=NULL) { sum=0; if(((structMAN*)(p->data))->role==50) { while(pTemp!=NULL)//选取订单中时间符合要求的,已付款的,对应员工的订单,并合计 { if(number_change(((structORDER*)(pTemp->data))->time)>=number_change(begin)&&number_change(((structORDER*)(pTemp->data))->time)<=number_change(end)) if(strcmp(((structORDER*)(pTemp->data))->order_flag,"已付款")==0) if(strcmp(((structMAN*)(p->data))->id,((structORDER*)(pTemp->data))->man_id)==0) { sum=number_change(((structORDER*)(pTemp->data))->money)+sum; } pTemp=pTemp->NEXT; } pTemp=orderhead->NEXT; Gotoxy(i,3); printf("%s",((structMAN*)(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=(structNODE*)LinkInit(NULL); LinkFreeNode(myhead); myhead=(structNODE*)LinkInit(NULL); } /*******************************加菜函数******************************** 名称:加菜函数 参数: data:订单节点数据部分 no:要指定的菜品编号 num:点菜的份数 功能: 加菜 **************************************************************************/ voidadd_dish(void*data,char*no,char*num) { inti,n; for(i=0;i<11;i++) { if(strcmp((((structORDER*)data)->x[i]).no,no)==0)//找到菜品的单价 { n=number_change((((structORDER*)data)->x[i]).num)+number_change(num); char_change(n,(((structORDER*)data)->x[i]).num); //puts((((structORDER*)data)->x[i]).num); return; } } for(i=0;i<11;i++) { if((((structORDER*)data)->x[i]).no[0]=='\0')//找到指定订单节点,加入点的菜的编号和份数 { strcpy((((structORDER*)data)->x[i]).no,no); n=number_change((((structORDER*)data)->x[i]).num)+number_change(num); char_change(n,(((structORDER*)data)->x[i]).num); return; } } } /*******************************退菜函数******************************** 名称:退菜函数 参数: data:订单节点数据部分 no:要指定的菜品编号 num:点菜的份数 功能: 退菜 **************************************************************************/ voidsub_dish(void*data,char*no,char*num) { inti,n; for(i=0;i<11;i++) { if(strcmp((((structORDER*)data)->x[i]).no,no)==0) { n=number_change((((structORDER*)data)->x[i]).num)-number_change(num); char_change(n,((((structORDER*)data)->x[i]).num)); puts((((structORDER*)data)->x[i]).num); if(n==0) { char_change(n,(((structORDER*)data)->x[i]).num); memset((((structORDER*)data)->x[i]).no,0,sizeof((((structORDER*)data)->x[i]).no)); } return; } } }
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。