能帮我找找问题在哪吗?

我打的代码运行后有一个功能没用
//从文件中读取菜谱
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;
}

用这个代码点完餐后不能结账
无,刚学c语言很多不懂
可以结账,谢谢

最好先描述一下有什么问题,或者报错信息。