急··急····帮忙!!!

下个这个程序  运行没错 ,但是停车场出车的时候总是检测不到车辆!! 不知道是怎么回事,希望各位老师 师兄  师姐  指点!!!!  我明天要交程序了     急啊··· 谢了#include <stdio.h>
#include <stdlib.h>

#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

#define STACK_INIT_SIZE 2


typedef struct
{
 int id;
 float time;
}Car1,Car2;


typedef struct
{
 Car1 *fcar;
 Car1 *lcar;
 int stacksize;
}SqStack1;//停车场

typedef struct
{
 Car2 *fcar;
 Car2 *lcar;
 int stacksize;
}SqStack2;//备用停车场

typedef struct QNode
{
 Car2 date;
 struct QNode *next;
}QNode, *QueuePtr;
 
typedef struct
{
 QueuePtr front;
 QueuePtr rear;
}LinkQueue;

 

 

int main()


{
 int choice1=1;
 int i,choice,carw=1;

 float time,money;
 SqStack1 S3;
 SqStack2 S4;
 LinkQueue Q;  
 Car1 car1_A,car1_B,car1_C;

   InitStack1(&S3);
 InitStack2(&S4);
 InitQueue(&Q);

 

 while(choice1==1)
 {
        fflush(stdin);  
  system("cls");
  printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/n");
  printf("        ***   欢迎来到XX停车场   ***/n");
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/n"); 
  printf("  请按键选择:/n 1 进入停车场/n 2 离开停车场/n 0 退出系统/n");

  scanf("%d",&choice);
  
  if(choice!=1 && choice!=2 && choice!=0)
  {
   printf("对不起,您的输入有误!请确认后重新输入!/n");
  }
  else
  {
   printf("选择成功/n");
            switch(choice)

  
   { 
          case 1:
   
           printf(" 请输入您的车牌号:/n");
     printf("ID:");
           scanf("%d",&car1_A.id);
           printf(" 请输入您的入场时间:/n");
     printf("时间:");
           scanf("%f",&car1_A.time);

          if(!StackFull1(S3))
       {


           Push1(&S3,car1_A);
           printf("*******************XX停车场停车凭据************************/n");
        printf("   *                                                  */n");
        printf("   * 你的车牌是:%d                                     */n",car1_A.id);
        printf("   * 进入时间是:%.2f                                  */n",car1_A.time);
        printf("   * 您的车的位子是:%d                                 */n",carw);
           printf("   *                                     2009年9月12日*/n");
        printf("   *                                                  */n");
           printf("************************************************************/n");
        carw++;

       }
          else
       {
              printf("停车场已满,请停入临时车道,待主停车场有空位将及时讲您的车移入主停车场./n");
              EnQueue(&Q, car1_A);
           printf("……");
           printf("您已成功停入本停车场临时车道/n");
       }
           break;
         case 2:

          printf ("输入你要开走的车的车牌ID和时间/n");
          printf("ID:");
          scanf("%d",&car1_B.id);
          printf("/n");
          printf("时间:");
          scanf("%f",&car1_B.time);
          printf("/n");

 


       //do
       //{
          //Pop1(&S3,&car1_C);   /*出站*/
          //if(car1_B.id!=car1_C.id)
       //Push2(&S4,car1_C); /*进备用站*/
       //else
        // car1_A.time=car1_C.time;
       //}while(car1_B.id!=car1_C.id);

 

          for(i=0;i<=3;i++)
       {
          Pop1(&S3,&car1_C);
          if(car1_B.id==car1_C.id)
       {
          printf("找到您要的车辆/n");
             printf("*****************XX停车场清单*********************************/n");
             printf("你的车牌是%d",car1_B.id);
          printf("你的入场时间:%f/n 你离开时间是%f/n",car1_C.time,car1_B.time);
          time=car1_B.time-car1_A.time;
          money=time*2;
          printf("你总共用时间%f/n",time);
          printf("你需缴纳的停车费为%f",money);
          printf("欢迎下次再来!/n");
       }
       else
        Push2(&S4, car1_C);
       // printf("停入备用车道/n");

       }
          if(car1_B.id!=car1_C.id && StackEmpty1(S3))
       {
          printf("抱歉,没有找到您要的车辆.请确认您的车牌号码是否有误!/n");
       }
          while(!StackEmpty2(S4))
       {
            Pop2(&S4,car1_C);
            Push1(&S3,car1_C);  
       }
          while(!QueueEmpty(Q)&&!StackFull1(S3))
       {
            DeQueue(&Q,&car1_C);
            if(!StackFull1(S3))
      { 
            Push1(&S3,car1_C);
      }
       }
          break;


             case 0:
              break;
   }
  }
  printf("是否继续? 请选择:1 继续 0 退出/n");
  scanf("%d",&choice1);
  if(!choice1==1)
  {
   printf("########欢迎下次再来!########/n");
   exit(0);
  }
  
  
 }
 return 0;
}

 

 


int InitStack1 (SqStack1 *S1)
{
 (*S1).fcar=(Car1 *) malloc(STACK_INIT_SIZE * sizeof (Car1));
 if (!(*S1).fcar) exit (OVERFLOW);
 (*S1).lcar=(*S1).fcar;
 (*S1).stacksize=STACK_INIT_SIZE;
 return OK;
}//构建空栈为停车场

int StackEmpty1(SqStack1 S1)
{
 if (S1.fcar==S1.lcar)
  return OK;
}


int StackFull1(SqStack1 S1)    /*查看停车厂是否已满*/
{
 if(S1.lcar-S1.fcar>=STACK_INIT_SIZE)                                                                           /*若栈顶与栈底之差大于等于栈的最大存储空间,则已满*/
  return OK;
 else
  return ERROR;
}

int Push1(SqStack1 *S1,Car1 e)
{
 if ((*S1).lcar -(*S1).fcar >=STACK_INIT_SIZE)
  return OVERFLOW;
 else
 {
  *(*S1).lcar++=e;
      return OK;
 }
}//停入停车场

int Pop1(SqStack1 *S1,Car1 *e)
{
 if((*S1).lcar ==(*S1).fcar)
  return ERROR;
 else
  (*S1).lcar=(*S1).lcar-1;
     e=(*S1).lcar;
  //*e=*--(*S1).lcar;//先把S.lcar减减,再减的S.lcar指针赋值为E
 return OK;
}//出主停车场


/*``````````````````````````停车场````````````````````````````*/

int InitStack2 (SqStack2 *S2)
{
 (*S2).fcar=(Car2 *) malloc(STACK_INIT_SIZE * sizeof (Car2));
 if (!(*S2).fcar) exit (OVERFLOW);
 (*S2).lcar=(*S2).fcar;
 (*S2).stacksize=STACK_INIT_SIZE;
 return OK;
}

int StackEmpty2(SqStack2 S2)
{
 if (S2.fcar==S2.lcar)
  return OK;
}

int Push2(SqStack2 *S2,Car2 e)
{
 if ((*S2).lcar -(*S2).fcar >=(*S2).stacksize )

  return OVERFLOW;
 else{
      *(*S2).lcar ++=e;
      return OK;
 }
}


int Pop2(SqStack2 *S2,Car2 *e)
{
 if((*S2).lcar ==(*S2).fcar)
  return ERROR;
 else
  *e=*--(*S2).lcar;//先把S.lcar减减,再减的S.lcar指针赋值为E
 return OK;
}
/*````````````````````````````````备用停车道````````````````````````*/

int InitQueue(LinkQueue *Q)
{
 (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
 if(!(*Q).front)exit(OVERFLOW);
 (*Q).front->next=NULL;
 return OK;
}//构建一条临时车道

int EnQueue(LinkQueue *Q, Car1 e)
{
 QueuePtr p;
 p=(QueuePtr)malloc(sizeof(QNode));
 if(!p)exit(OVERFLOW);
 p->date=e;
 p->next=NULL;
 Q->rear->next=p;
 Q->rear=p;
 return OK;
 
}

int DeQueue(LinkQueue *Q,Car1 *e)
{
 QueuePtr P;
 if (Q->front==Q->rear)
  return ERROR;
 P=Q->front->next;
 *e=P->date;
 Q->front->next=P->next;//??
    if (Q->rear==P)
  Q->rear=Q->front;
 free(P);
 return OK;
}

int QueueEmpty(LinkQueue Q)
{
 if (Q.front==Q.rear)
  return OK;
 else
  return ERROR;

}


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值