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