#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int count;//用这个来表示今日有多少菜品
int count1=0;//这个来表示这在用餐的人数
int count2[200];//这个来表示菜品销量
int *gettime()
{
time_t rawtime;//时间类型
struct tm *ptminfo;//时间结构体,指针变量
static int today[3];
time(&rawtime);
ptminfo=localtime(&rawtime);
printf("%02d-%02d-%02d %02d:%02d:%02d",ptminfo->tm_year+1900,ptminfo->tm_mon+1,ptminfo->tm_mday,ptminfo->tm_hour,ptminfo->tm_min,ptminfo->tm_sec);
today[0]=ptminfo->tm_year+1900;
today[1]=ptminfo->tm_mon+1;
today[2]=ptminfo->tm_mday;
return today;
}
struct menu1
{
int bianma;//编码
char leixing[1000];
char caiming[1000];
char zhuangtai[1000];
int price;
}caipin[200];
struct desk
{
int people;
int grcd[50];//个人菜单的里的编码
int sl;//点菜的数量
int sum;
}can_desk[200];
void save()//保存函数
{
FILE *fp;
fp=fopen("菜单.txt","wb+");
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
fwrite(caipin,sizeof(struct menu1),200,fp);//把菜品名给存储
fprintf(fp, "\n%d", count);
fclose(fp);//先保存
printf("文件保存成功!\n");
}
void load()//读取函数
{
int i;
FILE *fp;
system("cls");//清屏
fp=fopen("菜单.txt","rb");
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
fread(caipin,sizeof(struct menu1),200,fp);
fscanf(fp, "%d",&count);
fclose(fp);
printf("数据读取成功!\n");
system("pause");
}
void output()
{
int i;
printf("%-15s","编码");
printf("%-15s","类型");
printf("%-15s","菜名");
printf("%-15s","状态");
printf("%-5s","价格");
printf("\n");
for(i=0;i<count;i++)
{
printf("%-15d",caipin[i].bianma);
printf("%-15s",caipin[i].leixing);
printf("%-15s",caipin[i].caiming);
printf("%-15s",caipin[i].zhuangtai);
printf("%-5d",caipin[i].price);
printf("\n");
}
system("pause");//暂停窗口
}
void cansave()
{
//存储
FILE *fp;
fp=fopen("餐桌信息.txt","wb");
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","rb");
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
fread(can_desk,sizeof(struct desk),200,fp);
fscanf(fp,"%d",&count1);//读取正在用餐的餐桌信息
fclose(fp);
}
void menu2()
{
int sel,n,x,i,j;
int flag;
system("cls"); //清屏
printf("----------------------------------------\n");
printf("| 欢迎来到龙凤阁 |\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("\n请你输入你当前所坐桌的桌号【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;//寻找到就改变状态
count2[i]++;
if(flag==1)
{
printf("非常抱歉亲爱的顾客,你所输入编码对应的菜品今日不供应!!!\n");
printf("请重新输入你第%d道菜的编码:",j+1);
goto here;//无条件跳转到here,goto语句可以使程序在无任何的条件下跳转到指定位置 在此及回到输入餐品编码。
}
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);
gettime(); //调用时间函数
printf("\n%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;//寻找到就改变状态
count2[i]++;
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;
count2[i]--;
}
}
}
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");//暂停窗口
}
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("| 5.热销菜品 |\n");
printf("----------------------------------\n");
printf("已有菜品%d个:\n",count);
output();
printf("请输入管理员登入密码:");
scanf("%d",&code);
if(code==8520)//在这里可以自己设置管理员密码
{
printf("恭喜你登入成功!!!\n");
printf("请输入你的选择【1-5】:");
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("请输入菜品类型:");
gets(caipin[count].leixing);
printf("请输入第%d个菜品名:",i+1);
gets(caipin[count].caiming);
printf("请输入菜品状态:");
gets(caipin[count].zhuangtai);
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");
}
}
}
else if(j==5)
{
int i,z=0;
for(i=1;i<count;i++)
{
if(count2[i]>count2[i-1])//通过比较来找寻热销
z=i;
}
printf("热销菜品是:%s\n",caipin[z].caiming);
}
system("pause");
}
else
{
printf("啊哦~密码输入错误无法进入\n");
system("pause");
}
}
void menu()
{
int sel;
system("cls"); //清屏
printf("----------------------------------------\n");
printf("| 欢迎来到龙凤阁 |\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;
}
}
int main()
{
canload();
load();//打开就读取文档
menu();
return 0;
}
作为一个课程需要答辩的餐厅点菜系统争对这个代码有什么需要 改进的或者能否专门针对这个代码来提几个答辩可能会遇到的提问