餐厅管理系统

发布时间:2025-12-10 11:28:11 浏览次数:6

简易餐厅管理系统

#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#include <windows.h>#define N 15 //最大点菜数#define H 15 //餐桌数#define D 20 //最大菜数typedef struct Order{int Table_ID;int Dish_ID[N];struct Order *next;}ORDER;typedef struct Table{int Table_ID;int Capacity;int Table_State;}TABLE;TABLE tb[H];typedef struct Dish{int Dish_ID;char Dish_Name[15];float Dish_price;int cishu;}DISH;DISH dish[D];struct mydate{unsigned year;unsigned month;unsigned day;};void Table_Init();//餐桌信息初始化void Load_Dish();//从文件中读取菜谱void creatdishfile();//创建菜谱文件void Dish_Menu();//打印菜单void Display(int Dish_ID);//打印菜的信息int search();//查找可用的餐桌void Main_Menu();//打印系统菜单void Menu_select(void); //完成系统的各项功能void Dish_Order(ORDER *jiedain);//点菜点菜void lbcsh();//链表初始化void Payment();//结账void Save_Inform(int Dish_ID);//写入历史记录ORDER*CreatOne(int Table_ID);//创建用户节点void saveInList(float sum);//写入账本文件void List_Management();//账目管理的门void ListMenu();//账目管理的功能void ModifyPW();//修改密码void Observe();//查看账目int Pass_Word();//密码验证void panduanmima(char *p);////密码强度判断void Get_Rank();//对菜进行统计排名void printstar(int num);//打印*void deleteorder(int Table_ID);//删除用户节点void adddish();//增加菜谱void resetdish();//重置菜谱void cshdish();//初始化菜结构体ORDER*head;ORDER*wei;int main(){lbcsh();Table_Init();Load_Dish();Menu_select();return 0;}//链表初始化void lbcsh(){head=malloc(sizeof(ORDER));wei=head;wei->next=NULL;}//餐桌信息初始化void Table_Init(){for(int i=0;i<5;i++){tb[i].Capacity=8;}for(int i=5;i<10;i++){tb[i].Capacity=12;}for(int i=10;i<15;i++){tb[i].Capacity=16;}for(int i=0;i<15;i++){}}//从文件中读取菜谱void Load_Dish(){cshdish();FILE *fp=fopen("caipu.txt","r");if(fp!=NULL)fclose(fp);while(fp==NULL) {printf("未发现菜谱文件,请创建菜谱\n");creatdishfile(); fp=fopen("caipu.txt","r");}//检查文件中菜谱的行数int line=0;char c;while((c = fgetc(fp)) != EOF) if(c == '\n') line++;//检查完后文件指针来到了尾部,要进行重置rewind(fp);//为每一个结构体赋值for(int i=0;i<line;i++){fscanf(fp,"%s %f",&dish[i].Dish_Name,&dish[i].Dish_price);dish[i].Dish_ID=i+1;}fclose(fp);system("cls");}//创建一个菜谱文件void creatdishfile(){float price=1;char name[10];FILE *fp=fopen("caipu.txt","a");printf("创建菜谱(请按 菜名 价格 形式输入菜谱,输入00 00退出):\n");while(price!=0){scanf("%s %f",&name,&price);if(price!=0){fprintf(fp,"%s %f\n",name,price);printf("输入成功!\n");}}printf("创建菜谱成功\n");fclose(fp);}//打印菜单void Dish_Menu(){int i=0;printf("****************欢迎光临本店****************\n");printf("菜编号\t\t菜名\t\t价格\n");while(dish[i].Dish_price!=0){printf("%-15d %-15s %-4.1f\n",dish[i].Dish_ID,dish[i].Dish_Name,dish[i].Dish_price);i++;}}//打印菜的信息void Display(int Dish_ID){printf("%-15d %-15s %-4.1f\n",dish[Dish_ID].Dish_ID,dish[Dish_ID].Dish_Name,dish[Dish_ID].Dish_price);}//查找可用的餐桌int search(){int Table_ID=-1,mannum,i=0;do{printf("\n请输入顾客数量:");scanf("%d",&mannum);if(i>0)printf("请重新输入:\n");i++;}while(mannum<0);if(mannum<=8&&mannum>0){for(i=0;i<15;i++){if(tb[i].Table_State==0){Table_ID=i;break;}}}else if(mannum>8&&mannum<=12){for(i=5;i<15;i++){if(tb[i].Table_State==0){Table_ID=i;break;}}}else if(mannum>12&&mannum<=16){for(i=10;i<15;i++){if(tb[i].Table_State==0){Table_ID=i;break;}}}if(Table_ID==-1)printf("抱歉,本店暂时不支持这么多人就餐\n");else {printf("您可到%d号桌就餐\n",Table_ID+1);tb[Table_ID].Table_State=1;}return Table_ID;}//打印系统菜单void Main_Menu(){printf("*****************************\n");printf("\t餐厅服务系统\n");printf("*****************************\n");printf("1.点菜\n");printf("2.客户结账\n");printf("3.账目管理\n");printf("4.餐馆统计\n");printf("5.退出\n");printf("请选择:");}//创建客户节点ORDER* CreatOne(int Table_ID){ORDER*jiedian=malloc(sizeof(ORDER));wei->next=jiedian;wei=jiedian;wei->next=NULL;jiedian->Table_ID=Table_ID;for(int i=0;i<N;i++){jiedian->Dish_ID[i]=-1;}return jiedian;}//点菜void Dish_Order(ORDER *jiedain){FILE *fp1=fopen("caipu.txt","r");//检查文件中菜谱的行数int line1=0;char c1;while((c1 = fgetc(fp1)) != EOF) if(c1 == '\n') line1++;fclose(fp1);int caibianhao,i=0;printf("点菜(输入0退出)\n");scanf("%d",&caibianhao);while(caibianhao!=0){if(caibianhao>0&&caibianhao<line1+1){jiedain->Dish_ID[i]=caibianhao-1;i++;printf("点菜成功!\n");}else printf("点菜错误,请重新输入!!\n");scanf("%d",&caibianhao);}}//写入历史记录void Save_Inform(int Dish_ID){FILE *fp=fopen("historyrecord.txt","a");fprintf(fp,"%-15d %-15s %-4.1f\n",dish[Dish_ID].Dish_ID,dish[Dish_ID].Dish_Name,dish[Dish_ID].Dish_price);fclose(fp);}//写入账本文件void saveInList(float sum){time_t nowtime;struct tm * timeinfo;time( &nowtime );timeinfo = localtime(&nowtime);FILE *fp=fopen("zhangben.txt","a");fprintf(fp,"%-20.1f %-16s\n",sum,asctime(timeinfo));fclose(fp);printf("账本保存成功!\n");}//结账void Payment(){printf("请输入餐桌号码(按0退出);\n");float sum=0;int Table_ID;do{scanf("%d",&Table_ID);Table_ID--;if(Table_ID==-1)break;else if(Table_ID<-1||Table_ID>14)printf("无此餐桌,请重新输入:\n");else if(tb[Table_ID].Table_State==0)printf("此餐桌没有人使用,请重新输入;\n");}while(tb[Table_ID].Table_State==0||Table_ID<0||Table_ID>14);if(Table_ID!=-1){ORDER*fuzhu=head->next;while(fuzhu!=NULL){if( fuzhu->Table_ID==Table_ID)break;else fuzhu=fuzhu->next;}printf("***************************************\n");printf("您点的菜为:\n");printf("***************************************\n");int i=0;while(fuzhu->Dish_ID[i]!=-1){Display(fuzhu->Dish_ID[i]);Save_Inform(fuzhu->Dish_ID[i]);sum=sum+dish[fuzhu->Dish_ID[i]].Dish_price;i++;}float qian;do{printf("总计%.1f元,请输入支付金额:\n",sum);scanf("%f",&qian);if(qian<sum)printf("请重新输入\n");}while(qian<sum);printf("找您%.1f元\n",qian-sum);saveInList(sum);deleteorder(Table_ID);Sleep(1000);}}//账目管理的门void List_Management(){FILE *fp=fopen("mima.txt","r");if(fp!=NULL)fclose(fp);if(fp==NULL){FILE *fp1=fopen("mima.txt","a");fprintf(fp1,"123456");fclose(fp1);}int m=Pass_Word();if(m==1){Sleep(200);system("cls");ListMenu();}if(m==0){printf("密码输入失败\n");Sleep(200);system("cls");}}//账目管理的功能void ListMenu(){do{printf("***************************************\n");printf("欢迎进入账目管理系统\n");printf("***************************************\n");printf("1.修改密码\n");printf("2.查看账本\n");printf("3.增加菜谱\n");printf("4.重置菜谱\n");printf("5.返回\n");printf("请选择:");int choose;scanf("%d",&choose);if(choose==1)ModifyPW();if(choose==2)Observe();if(choose==3)adddish();if(choose==4)resetdish();if(choose==5){system("cls");break;}}while(1);}//修改密码void ModifyPW(){FILE *fp=fopen("mima.txt","r");char ch[20],ch1[20],ch2[20],str[20];fgets(str,20,fp);fclose(fp);do{printf("请输入原来的密码:\n");scanf("%s",ch);if(strcmp(ch,str)==0)printf("密码输入成功!\n");else {printf("密码输入失败!是否重新输入?\n");printf("1.是 2.否\n");int choose;scanf("%d",&choose);if(choose==2)break;}}while(strcmp(ch,str)!=0);if(strcmp(ch,str)==0){do{ printf("请输入新的密码:\n");scanf("%s",&ch);printf("请再一次输入新的密码:\n");scanf("%s",&ch1);if(strcmp(ch,ch1)!=0){printf("两次密码输入不一致! 是否重新修改密码?\n");printf("1.是 2.否\n");int choose;scanf("%d",&choose);if(choose==2)break;}}while(strcmp(ch,ch1)!=0);if(strcmp(ch,ch1)==0) {fp=fopen("mima.txt","w");fprintf(fp,"%s",ch);fclose(fp);panduanmima(&ch1[0]);printf("密码修改成功,请牢记密码\n");}else printf("密码修改失败\n");}Sleep(1500);system("cls");}//查看账目void Observe(){system("cls");FILE *fp=fopen("zhangben.txt","r");if(fp==NULL)printf("账本为空\n");else{char str[100];printf("***********************************************\n");printf("账本如下:\n");printf("***********************************************\n");printf("单笔总金额 消费时间\n");printf("***********************************************\n");while(fgets(str, N, fp) != NULL){printf("%s", str);}fclose(fp);}getchar(); getchar();system("cls");}//密码强度判断void panduanmima(char *p){int a=0,b=0,c=0,d=0,i=0,sum=0;while((*p)!='\0'){if((*p)>='0'&&(*p)<='9')a++;else if((*p)>='a'&&(*p)<='z')b++;else if((*p)>='A'&&(*p)<='Z')c++;else d++;i++;p++;}if(i>6)sum++;if(a>0)sum++;if(b>0)sum++;if(c>0)sum++;if(d>0)sum++;if(sum==1)printf("密码强度:弱\n");if(sum==2)printf("密码强度:中\n");if(sum==3)printf("密码强度:良\n");if(sum==4)printf("密码强度:强\n");if(sum==5)printf("密码强度:优\n");}//密码验证int Pass_Word(){FILE *fp=fopen("mima.txt","r");char ch[20],str[20];fgets(str,20,fp);do{printf("请输入密码(初始密码为123456):\n");scanf("%s",&ch);if(strcmp(ch,str)==0)printf("密码正确!\n");else {printf("密码错误!是否重新输入?\n");printf("1.是 2.否\n");int choose;scanf("%d",&choose);if(choose==2)break;}}while(strcmp(ch,str)!=0);if(strcmp(ch,str)==0)return 1;else return 0;}//对菜进行统计排名void Get_Rank(){FILE *fp1=fopen("caipu.txt","r");//检查文件中菜谱的行数int line1=0;char c1;while((c1 = fgetc(fp1)) != EOF) if(c1 == '\n') line1++;fclose(fp1);int dishnum[line1];for(int i=0;i<line1;i++){dishnum[i]=0;}FILE *fp=fopen("historyrecord.txt","r");if(fp==NULL)printf("暂无历史记录\n");else {int temp1;char temp2[15];float temp3;//检查文件中历史记录的行数int line=0;char c;while((c = fgetc(fp)) != EOF) if(c == '\n') line++;//检查完后文件指针来到了尾部,要进行重置rewind(fp);for(int i=0;i<line;i++){fscanf(fp,"%d %s %f",&temp1,&temp2,&temp3);temp1--;for(int i=0;i<line1;i++){if(strcmp(temp2,dish[i].Dish_Name)==0){dishnum[i]++; break;}}}for(int i=0;i<line1;i++){printf("%-10s",dish[i].Dish_Name);printstar(dishnum[i]);}fclose(fp);}}//打印*void printstar(int num){for(int i=0;i<num;i++)printf("*");printf("\n");}//删除用户节点void deleteorder(int Table_ID){if(head->next->Table_ID==wei->Table_ID&&wei->Table_ID==Table_ID){tb[Table_ID].Table_State=0;free(wei);wei=head;printf("删除节点成功\n");}else{ORDER *fuzhu1=head;ORDER *fuzhu2=head->next;ORDER *fuzhu3;do{if(fuzhu2->Table_ID==Table_ID){fuzhu3=fuzhu2;printf("删除节点成功\n");fuzhu2=fuzhu2->next;fuzhu1->next=fuzhu2;tb[Table_ID].Table_State=0;free(fuzhu3);printf("删除节点成功\n");break;}else{fuzhu1=fuzhu1->next;fuzhu2=fuzhu2->next;}}while(fuzhu2==NULL);}}//添加菜谱void adddish(){float price=1;char name[10];FILE *fp=fopen("caipu.txt","a");printf("增加菜谱(请按 菜名 价格 形式输入菜谱,输入00 00退出):\n");while(price!=0){scanf("%s %f",&name,&price);if(price!=0){fprintf(fp,"%s %f\n",name,price);printf("输入成功!\n");}}printf("增加菜谱成功\n");fclose(fp);Load_Dish();}//重置菜谱void resetdish(){float price=1;char name[10];int b=0;FILE *fp=fopen("caipu.txt","w");printf("重置菜谱(请按 菜名 价格 形式输入菜谱,最少输入1道,输入00 00退出):\n");while(price!=0||b==0){scanf("%s %f",&name,&price);if(price!=0){fprintf(fp,"%s %f\n",name,price);printf("输入成功!\n");b--;}}printf("重置菜谱成功\n");fclose(fp);Load_Dish();}//初始化菜结构体void cshdish(){for(int i=0;i<D;i++){dish[i].Dish_price=0;}}//完成系统的各项功能void Menu_select(void){int cho,Table_ID;while(1){Main_Menu();scanf("%d",&cho);if(cho==1){system("cls");Table_ID=search();if(Table_ID!=-1){Dish_Menu();ORDER*jiedian=CreatOne(Table_ID);Dish_Order(jiedian);}system("cls");}if(cho==2){system("cls");Payment();system("cls");}if(cho==3){List_Management();}if(cho==4){system("cls");Get_Rank();getchar(); getchar();system("cls");}if(cho==5) {system("cls");printf("正在退出...");Sleep(1000);break;}}}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477