//从文件中读取菜谱
void Load_Dish(void){
FILE*fp;
int i;
fp=fopen("dish_name.txt","r");
for(i=0;i<D;i++)
{
fscanf(fp,"%d\t%s\t%f\n",&dish[i].Dish_ID,dish[i].Dish_Name,
&dish[i].Dish_Price);
}
}
//餐桌初始化
void Table_Init()
{
tb[0].Capacity=1;tb[0].Table_ID=1;
tb[1].Capacity=1;tb[1].Table_ID=2;
tb[2].Capacity=2;tb[2].Table_ID=3;
tb[3].Capacity=2;tb[3].Table_ID=4;
tb[4].Capacity=2;tb[4].Table_ID=5;
tb[5].Capacity=3;tb[5].Table_ID=6;
tb[6].Capacity=4;tb[6].Table_ID=7;
tb[7].Capacity=4;tb[7].Table_ID=8;
tb[8].Capacity=4;tb[8].Table_ID=9;
tb[9].Capacity=4;tb[9].Table_ID=10;
}
//显示菜谱
void Dish_Menu(void){
int i;
printf("*********欢迎选购本店菜**********\n");
printf("菜编号\t 菜名\t 菜单价\n");
printf("1\t虎皮凤爪\t16.00\n");
printf("2\t糖醋排骨\t16.00\n");
printf("3\t麻婆豆腐\t10.00\n");
printf("4\t紫菜蛋花汤\t10.00\n");
printf("5\t宫保鸡丁\t12.00\n");
printf("6\t鱼香肉丝\t13.00\n");
printf("7\t西红柿炒鸡蛋\t8.00\n");
printf("8\t农家小炒肉\t8.00\n");
for(i=0;i<D;i++)
printf("%d\t%s\t%f\n",dish[i].Dish_ID,dish[i].Dish_Name,dish[i].Dish_Price);
}
//查找有没有匹配的餐桌
int search(void)
{
int Cust_Num;
int i;
printf("请输入来客数量:\n");
scanf("%d",&Cust_Num);
if(MaxCapacity<Cust_Num)
{
printf("抱歉,本店没有容纳%d的餐桌!",Cust_Num);
return -1;
}
while(Cust_Num<=MaxCapacity)
{
for(i=0;i<H;i++)
{
if(tb[i].Table_State==0)
{
if(tb[i].Capacity==Cust_Num)
return (tb[i].Table_ID);
}
}
printf("抱歉,现在没有%d人桌",Cust_Num);
Cust_Num+=1;
}
printf("餐桌已满,请客人稍等一会。");
return -1;
}
//创建一份订单
ORDER*CreateOne(int result)
{
ORDER*P;
int i;
P=ASK;
if(result!=-1)
{
P->Table_ID=result;
for(i=0;i<D;i++)
{
printf("请输入菜的编号,按0结束输入:");
scanf("%d",&P->Dish_ID[i]);
if(P->Dish_ID[i]<0||P->Dish_ID[i]>10)
{
printf("超出菜谱的范围,请重新输入\n");
i--;
}
else if(P->Dish_ID[i]==0)
break;
else;
}
tb[result-1].Table_State=1;
}
P->next=NULL;
return P;
}
//添加到主链
ORDER*Dish_Order(ORDER *head,ORDER *P)
{
ORDER*pl;
pl=head;
if(pl!=NULL)
{
if(P!=NULL)
{
while(pl->next!=NULL)
{
pl=pl->next;
}
pl->next=P;
printf("订单创建成功\n");
}
else
printf("订单创建失败\n");
}
else
{
if(head==NULL&&P!=NULL)
head=P;
}
return head;
}
//根据菜的编号打印一道菜的信息
void Display(int ID)
{
int i=0;
for(i=0;i<D;i++)
{
if(dish[i].Dish_ID==ID)
{
printf("%d\t%s\t%f\n",dish[i].Dish_ID,dish[i].Dish_Name,dish[i].Dish_Price);
break;
}
}
}
//将消费额写入账单
void saveInList(float pay)
{
FILE*fp;
time_t timer;
timer=time(NULL);
if((fp=fopen("账本.txt","a"))==NULL)
{
printf("操作失败\n");
exit(1);
}
fprintf(fp,"%f\t%s\n",pay,ctime(&timer));//系统时间有问题
printf("账本保存成功\n");
fclose(fp);
}
//将已帐客户写入历史记录
void Save_Inform(ORDER *p,int m)
{
FILE*fp;
time_t timer;
int i=0;
timer=time(NULL);
if((fp=fopen("历史记录.txt","a"))==NULL)
{
printf("操作失败\n");
exit(1);
}
fprintf(fp,"%d\n",m);
while(p->Dish_ID[i]>0)
{
fprintf(fp,"%d\t%s\t%f\n",dish[p->Dish_ID[i]-1].Dish_ID,
dish[p->Dish_ID[i]-1].Dish_Name,
dish[p->Dish_ID[i]-1].Dish_Price);
i++;
}
fprintf(fp,"%s",ctime(&timer));
printf("历史记录保存成功\n");
fclose(fp);
}
//结账
ORDER *Payment(ORDER *head)
{
int i=0;
int count=0;
float pay=0.0;
float Pay;
int ID;
ORDER *p,*p1;
p=head;
printf("请输入您的餐桌号\n");
fflush(stdin);
scanf("%d",&ID);
while(p!=NULL)
{
if(p->Table_ID==ID)
{
printf("您点的菜情况如下:\n");
printf("编号\t 菜名\t 价格\n");
while(p->Dish_ID[i]!=0)
{
Display(p->Dish_ID[i]);
pay+=dish[p->Dish_ID[i]-1].Dish_Price;
i++;
count++;
}
printf("您一共点了%d道菜\n",count);
printf("您本次的消费额为%f元\n",pay);
printf("您是实际的付款:\n");
scanf("%f",&Pay);
if(Pay > pay)
printf("找您%f\n",Pay-pay);
printf("谢谢您的惠顾,欢迎您下次光临\n");
if(count>0)
{
saveInList(pay);
Save_Inform(p,count);
}
tb[p->Table_ID].Table_State=0;
break;
}
else
{
p1=p;
p=p->next;
}
}
if(p==head)
head=head->next;
else
p1->next=p->next;
free(p);
return head;
}
最好先描述一下有什么问题,或者报错信息。