C语言点餐系统

C语言点餐系统

这是功能:
1、主菜单可以进入顾客选择菜单和商家管理员菜单
2、管理员菜单,输入登入密码,实现今日菜品的录入(编号、菜名、价格)和今日菜品的删除
3、管理员可以查看本餐厅有多少餐桌在使用,以及各桌的点餐情况
4、在顾客结账后可以清除掉餐桌信息,方便之后来的客人使用
5、顾客可以看到菜单的显示,选择菜品
6、每桌客人记账功能,结算功能
7、选择菜品后可看自己餐桌已经选定的菜品,可考虑加菜和减菜
8、数据的保存和读取

首先先创建一个头文件,数据用结构体来储存,创建一个“餐桌及菜单.h”

struct menu1
{
	int bianma;//编码 
	char caiming[1000]; 
	int price; 
}caipin[200];

int count;//用这个来表示今日有多少菜品

struct desk
{
	int people;
	int grcd[50];//个人菜单的里的编码 
	int sl;//点菜的数量 
	int sum; 
}can_desk[200]; 

创建“菜单保存读取输出.h”头文件

void save()//保存函数
{
	FILE *fp;
	fp=fopen("菜单.txt","w");
	
	if(fp==NULL)
	{
		printf("文件打开失败!\n");
		exit(0);
	}
	fwrite(caipin,sizeof(struct menu1),200,fp);//把菜品名给存储
	fprintf(fp, "\n%d", count);
	fclose(fp);//先保存
	
	printf("哈哈o(* ̄▽ ̄*)ブ文件保存成功!!!\n");
}
void load()//读取函数
{
	int i;
	FILE *fp;
	system("cls");
	
	fp=fopen("菜单.txt","r");
	
	if(fp==NULL)
	{
		printf("文件打开失败!\n");
		exit(0);
	}
	
	fread(caipin,sizeof(struct menu1),200,fp);
	fscanf(fp, "%d",&count);
	fclose(fp);
	printf("o(* ̄▽ ̄*)ブ数据读取成功!!!\n");
	
	system("pause");
}
void output()
{
	int i;
	printf("%-15s","编码");
	printf("%-15s","菜名");	
	printf("%-5s","价格");		
	printf("\n");

	for(i=0;i<count;i++)
	{	
		printf("%-15d",caipin[i].bianma);
		printf("%-15s",caipin[i].caiming);
		printf("%-5d",caipin[i].price);
		printf("\n");
	}
	system("pause");
}

创建“餐桌信息存储读取.h”

void cansave()
{
	//存储 
	FILE *fp;
	fp=fopen("餐桌信息.txt","w");
	
	if(fp==NULL)
	{
		printf("文件打开失败!\n");
		exit(0);
	}
	fwrite(can_desk,sizeof(struct desk),200,fp);//把菜品名给存储
	fprintf(fp,"\n%d",count1);
	fclose(fp);//先保存
}
void canload()
{
	int i;
	FILE *fp; 
	fp=fopen("餐桌信息.txt","r");
	
	if(fp==NULL)
	{
		printf("文件打开失败!\n");
		exit(0);
	}
	fread(can_desk,sizeof(struct desk),200,fp);
	fscanf(fp,"%d",&count1);//读正在用餐的餐桌 
	fclose(fp);
}

创建“顾客界面.h”

void menu2()
{
	int sel,n,x,i,j;
	int flag;
	system("cls"); 
	printf("----------------------------------------\n");
	printf("|         欢迎来到米其林8星餐厅        |\n"); 
	printf("----------------------------------------\n");
	printf("今日菜品有如下:\n");
	output();
	//餐桌信息 
	printf("----------------------------------------\n");
	printf("|****          1.点餐              ****|\n"); 
	printf("|****          2.查询              ****|\n"); 
	printf("----------------------------------------\n");
	printf("请输入你的选择【1 or 2】:");
	scanf("%d",&sel);
	//判断是否输入错误
	while(sel!=1 && sel!=2)
	{
		printf("输入错误,请重新再输入:");
		scanf("%d",&sel);
	} 
	
	if(sel==1)
	{
		printf("请你输入你当前所坐桌的桌号【1~199】:");
	tt:	scanf("%d",&n);
		//判断一下输入的桌号是否正确
		if(can_desk[n].people!=0)
		{
			printf("啊呜!?这个餐桌号已经有人,请输入你自己所处的餐桌位:");
			goto tt;
		}
		
		//先将餐桌的用餐额赋值为0
		can_desk[n].sum=0;
		//将餐桌的book[]数组赋值为0,给他标记 
		printf("请你输入用餐人数:");
		scanf("%d",&can_desk[n].people);
		printf("请你输入点菜的个数:");
		scanf("%d",&can_desk[n].sl);
		x=can_desk[n].sl;//将数量赋值给x好看一点 
		
		for(j=0;j<x;j++) 
		{
			printf("----------------------------------------\n");
			printf("第%d个菜品的编码:",j+1);
	here:	scanf("%d",&can_desk[n].grcd[j]);
			//判断是否有此编码 
			flag=1;//假设为不存在的状态 
			for(i=0;i<count;i++)
				if(can_desk[n].grcd[j]==caipin[i].bianma)
					flag=0;//寻找到就改变状态
			if(flag==1)
			{
				printf("非常抱歉亲爱的顾客,你所输入编码对应的菜品今日不供应!!!\n"); 
				printf("请重新输入你第%d道菜的编码:",j+1);
				goto here;	
			} 
			for(i=0;i<count;i++) //查找菜品的金额
				if(can_desk[n].grcd[j]==caipin[i].bianma)
					can_desk[n].sum+=caipin[i].price;
		}
		printf("你当前所需要支付的金额:%d\n",can_desk[n].sum);
		printf("是否选择提交订单【1 or 2】:");
		scanf("%d",&sel);
		while(sel!=1 && sel!=2)
		{
			printf("输入错误,请重新再输入:");
			scanf("%d",&sel);
		} 
		if(sel==1)
		{
			count1++;
			cansave();
		}
		else
			menu2();
	}
	else if(sel==2)//客人查询自己餐桌的信息 
	{
		printf("输入当前的所在桌位:");
		scanf("%d",&n); 
		printf("%5s","餐桌号码");
		printf("%15s","餐桌人数");
		printf("%13s","点菜道数");
		printf("%11s","需付金额");
		printf("%20s","所点菜品"); 
		printf("\n"); 
		
		printf("%4d号",n);
		printf("%11d人",can_desk[n].people);
		printf("%11d道",can_desk[n].sl);
		printf("%11dRmb",can_desk[n].sum);
		//找菜名 
		flag=1;//标记一下,用来美化一下界面 
		for(x=0;x<can_desk[n].sl;x++)
		for(i=0;i<count;i++)
			if(can_desk[n].grcd[x]==caipin[i].bianma)
			{
				if(flag==1)
				{
					printf("%20s",caipin[i].caiming);
					flag=0;
				}
				else
					printf(" %s",caipin[i].caiming);
			}
		printf("\n"); 
		//顾客点单完查看后,根据需要加餐和减餐 
		printf("----------------------------------------\n");
		printf("|****          1.加菜              ****|\n"); 
		printf("|****          2.减菜              ****|\n"); 
		printf("|****          3.返回              ****|\n"); 
		printf("----------------------------------------\n");
		printf("请输入你的选择【1 or 2 or 3】:");
		scanf("%d",&sel);
		//判断是否输入错误
		while(sel!=1 && sel!=2 && sel!=3)
		{
			printf("输入错误,请重新再输入:");
			scanf("%d",&sel);
		}
		printf("----------------------------------------\n");
		switch(sel)
		{	//加菜 
			case 1:
				{ 	
					int c;
					
					printf("请输入您想添加菜的编码:");
			aaa:	scanf("%d",&can_desk[n].grcd[j]);
					//判断是否有此编码 
					flag=1;//假设为不存在的状态 
					for(i=0;i<count;i++)
						if(can_desk[n].grcd[j]==caipin[i].bianma)
							flag=0;//寻找到就改变状态
					if(flag==1)
					{
						printf("非常抱歉亲爱的顾客,你所输入编码对应的菜品今日不供应!!!\n"); 
						printf("请重新输入你第%d道菜的编码:",j+1);
						goto aaa;	
					}
					can_desk[n].sl++;//菜数增加 
					for(i=0;i<count;i++) //查找菜品的金额
						if(can_desk[n].grcd[j]==caipin[i].bianma)
							can_desk[n].sum+=caipin[i].price;
							
					//保存
					printf("是否选择提交订单【1 or 2】:");
					scanf("%d",&sel);
					while(sel!=1 && sel!=2)
					{
						printf("输入错误,请重新再输入:");
						scanf("%d",&sel);
					} 
					if(sel==1)
						cansave();
				}
					break;
			case 2:	//减菜 
				{
					int code;
					printf("请输入你想删去菜品的编码:");
					scanf("%d",&code);
					flag=1;//给标记看是否能找到
					for(i=0;i<can_desk[n].sl;i++)
					{
						if(code==can_desk[n].grcd[i])
						{
							flag=0;
							int j;
							for(j=i;j<can_desk[n].sl;j++)
							{
								if(j<can_desk[n].sl-1)
									can_desk[n].grcd[j]=can_desk[n].grcd[j+1];
								if(j==can_desk[n].sl-1)
									can_desk[n].grcd[j]=0;
							}
						}
					}
					
					if(flag==1)
						printf("您的订单中尚未添加该菜\n");
					else
					{
						can_desk[n].sl--;//所点菜品数减去一道
						//再把所需要的金额减去所删去的菜品对应的价格
						for(i=0;i<count;i++) //查找菜品的金额
						if(code==caipin[i].bianma)
							can_desk[n].sum-=caipin[i].price;
					}
						
					printf("是否选择提交订单【1 or 2】:");
					scanf("%d",&sel);
					while(sel!=1 && sel!=2)
					{
						printf("输入错误,请重新再输入:");
						scanf("%d",&sel);
					} 
					if(sel==1)
						cansave();
				}
					break;
			case 3:menu2();break;
		}  
		
	}
	system("pause");
}

创建“管理员输入.h”界面,在此界面自己设定管理员密码,我的程序的密码是8848(保密性极强)

void input()
{
	int n,sel,i,j,zhuohao,x; 
	int name,flag;//用来标志 
	int code;//用来输入密码用 
	system("cls");
	printf("----------------------------------\n");
	printf("|       欢迎来到管理者系统界面   |\n");
	printf("----------------------------------\n");
	printf("|          1.添加菜品            |\n"); //ok 
	printf("|          2.删除菜品            |\n"); //ok 
	printf("|          3.结账删除            |\n");
	printf("|          4.查看订单            |\n");
	printf("----------------------------------\n");
	printf("已有菜品%d个:\n",count);
	output();
	printf("请输入管理员登入密码:");
	scanf("%d",&code);
	if(code==8848)//在这里可以自己设置管理员密码
	{
		printf("恭喜你登入成功!!!\n");
		printf("请输入你的选择【1-4】:");
		scanf("%d",&j);
		if(j==1)//添加菜品 
		{
			printf("请输入今日可增加添做的菜品数:");
			scanf("%d",&n);
			//getchar();
			//循环输入
			for(i=0;i<n;i++)
			{
			it:	printf("----------------------------------------\n");
				printf("请输入第%d个菜品编码:",i+1);
				scanf("%d",&caipin[count].bianma);
				//来判断一下编码是否以存在
				flag=1;//表示不存在 
				for(x=0;x<count;x++)
					if(caipin[count].bianma==caipin[x].bianma)
						flag=!flag;
				
				//如果存在则返回
				if(flag==0)
				{
					printf("此编码已经被其它的菜品所征用!>﹏<\n"); 
					goto it;
				} 
				getchar();
				printf("请输入第%d个菜品名:",i+1);
				gets(caipin[count].caiming);
				printf("请输入价格:");
				scanf("%d",&caipin[count].price);
				count++;
				//getchar();
			}
			//输入菜品后存储 
			save();//保存一下输入的 
			
			printf("是否需要核对今日菜单【1 or 2】:");
			
			scanf("%d",&sel);
			
			while(sel!=1 && sel!=2)
			{
				printf("输入错误,请重新再输入:");
				scanf("%d",&sel);
			}
			
			if(sel==1)
				output(); 
			
		}
		else if(j==2)//删除菜品
		{
			getchar();
			printf("----------------------------------------\n");
			printf("输入要删除的菜品编码:");
			scanf("%d",&name);
			for(i=0;i<count;i++)
			{
				if(name==caipin[i].bianma)
				{
					if(i==199)
					{
						//如果是int 或者 double  直接给0
						//如果是char 字符串 直接给"" 空串
						caipin[i].price=0;
						strcpy(caipin[i].caiming,"");											
					}
					else
					{
						//把 i+1到199的同学所有信息整体往前赋值
						int j;//定义局部变量
						for(j=i+1;j<=199;j++)
							caipin[j-1]=caipin[j];
					}
					
					count--; 
					printf("数据已经删除!\n");
					system("pause");
					save();//需要调用保存函数 
				}	
			} 
		}
		else if(j==3)
		{
			printf("--------------------------------------\n");
			printf("请输入结账走人的桌号:");
			scanf("%d",&i); 
			//判断输入的桌号是否未结账并用过餐 
			while(can_desk[i].sum==0)
			{
				printf("为查询到此餐桌用餐情况,请重新查询:");
				scanf("%d",&i);
			}
			//显示一下餐桌,并询问是否删除
			printf("%5s","餐桌号码");
			printf("%15s","餐桌人数");
			printf("%13s","点菜道数");
			printf("%11s","需付金额");
			printf("%20s","所点菜品"); 
			printf("\n"); 
			
			printf("%4d号",i);
			printf("%11d人",can_desk[i].people);
			printf("%11d道",can_desk[i].sl);
			printf("%11dRmb",can_desk[i].sum);
			//找菜名
			flag=1; 
			for(x=0;x<can_desk[i].sl;x++)
			for(n=0;n<count;n++)
				if(can_desk[i].grcd[x]==caipin[n].bianma)
				{
					if(flag==1)
					{
						printf("%20s",caipin[n].caiming);
						flag=0;
					}
					else
						printf(" %s",caipin[n].caiming);
				}
			printf("\n"); 
			
			printf("是否需要删除[1 or 2]:");
			scanf("%d",&sel);
			
			while(sel!=1 && sel!=2)
			{
				printf("输入错误,请重新再输入:");
				scanf("%d",&sel);
			} 
			if(sel==1)
			{
				can_desk[i].people=0;
				can_desk[i].sum=0;
				for(n=0;n<can_desk[i].sl;i++)
					can_desk[i].grcd[n]=0;
				can_desk[i].sl=0;
				count1--;
			}
			cansave();
			canload();
				
		}
		else if(j==4)
		{
			system("cls");
			printf("当前还有%d桌:\n",count1); 
			printf("%5s","餐桌号码");
			printf("%15s","餐桌人数");
			printf("%13s","点菜道数");
			printf("%11s","需付金额");
			printf("%20s","所点菜品"); 
			printf("\n"); 
			printf("-------------------------------------------------------------------------\n");
			
			for(i=0;i<200;i++)
			{
				if(can_desk[i].sum!=0)
				{
					printf("%4d号",i);
					printf("%11d人",can_desk[i].people);
					printf("%11d道",can_desk[i].sl);
					printf("%11dRmb",can_desk[i].sum);
					//找菜名 
					flag=1;
					for(x=0;x<can_desk[i].sl;x++)
					for(n=0;n<count;n++)
						if(can_desk[i].grcd[x]==caipin[n].bianma)
						{
							if(flag==1)
							{
								printf("%20s",caipin[n].caiming);
								flag=0;
							}
							else
								printf(" %s",caipin[n].caiming);
						}
					printf("\n"); 
				}
			}
		}	
		system("pause");
	}
	else
	{
		printf("啊哦~密码输入错误无法进入\n");
		system("pause");
	} 
}


创建“主菜单.h”头文件

void menu()
{
	int sel;
	system("cls"); 
	printf("----------------------------------------\n");
	printf("|         欢迎来到米其林8星餐厅        |\n"); 
	printf("----------------------------------------\n");
	printf("请问你是餐厅管理者还是点餐者【1 or 2】:\n");
	scanf("%d",&sel);
	//选择是管理员还是顾客
	//判断是否输入错误 
	while(sel!=1 && sel!=2)
	{
		printf("输入错误,请重新再输入:");
		scanf("%d",&sel);
	}
	
	switch(sel)
	{
		case 1:input();menu();break;
		case 2:menu2();menu();break;
	}
}

.c文件的内容,在.文件运行的时候记得创建对应的“菜单.txt”和“餐桌信息.txt”文件,不然读取会出错,导致程序无法运行。

#include"stdio.h"
#include"windows.h"
#include"string.h"
int count1=0;//这个来表示这在用餐的人数
#include"餐桌及菜单.h"
#include"菜单保存读取输出.h"

#include"餐桌信息存储读取.h"
#include"顾客界面.h"

#include"管理员输入.h"
#include"主菜单.h"
int main()
{
	canload();
	load();//打开就读取文档 
	menu();
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码放百度网盘:
链接:https://pan.baidu.com/s/1j43DvihtFT1qxjxyyX3LmA
提取码:hhhh

  • 75
    点赞
  • 478
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
下面是一个简单的C语言点餐系统程序设计的示例代码,仅供参考: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_MENU_ITEMS 10 #define MAX_NAME_LENGTH 20 typedef struct { char name[MAX_NAME_LENGTH]; double price; } MenuItem; MenuItem menu[MAX_MENU_ITEMS] = { {"Hamburger", 10.0}, {"Cheeseburger", 12.0}, {"Fries", 5.0}, {"Onion Rings", 6.0}, {"Coke", 3.0}, {"Pepsi", 3.0}, {"Water", 2.0}, {"Ice Cream", 4.0}, {"Cake", 5.0}, {"Coffee", 4.0} }; int main() { int option; int quantity; double total = 0.0; printf("Welcome to our restaurant!\n"); printf("Here is our menu:\n"); for (int i = 0; i < MAX_MENU_ITEMS; i++) { printf("%d. %s ($%.2f)\n", i + 1, menu[i].name, menu[i].price); } while (1) { printf("Enter the item number you want to order (0 to finish): "); scanf("%d", &option); if (option == 0) { break; } if (option < 1 || option > MAX_MENU_ITEMS) { printf("Invalid option!\n"); continue; } printf("Enter the quantity: "); scanf("%d", &quantity); if (quantity <= 0) { printf("Invalid quantity!\n"); continue; } total += menu[option - 1].price * quantity; printf("%d x %s added to your order.\n", quantity, menu[option - 1].name); } printf("Your total is: $%.2f\n", total); return 0; } ``` 这个程序定义了一个 `MenuItem` 结构体,包含了菜品名称和价格。然后定义了一个 `menu` 数组,包含了所有菜品的信息。在主函数中,使用一个循环来不断接收用户的点餐信息,直到用户输入 0 结束点餐。在每次循环中,先让用户输入要点的菜品的序号和数量,然后计算出本次订单的总价。最后输出订单的总价。 需要注意的是,这个程序非常简单,只是一个基本的点餐系统程序设计示例,实际应用中可能需要更复杂的功能和逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值