⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 停车场管理.cpp

📁 数据结构的课程设计
💻 CPP
字号:
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

#define MAX 2 /*车库容量*/ 
#define price 0.1 /*每车每分钟费用*/

/*----------------------------------定义数据类型----------------------------------*/ 

/*时间结点*/  
typedef struct time{ 
  int hour; 
  int min; 
}Time; 

/*车辆信息结点*/
typedef struct node{ 
  char num[10]; 
  Time reach; 
  Time leave; 
}CarNode; 

/*模拟车站*/
typedef struct NODE{ 
  CarNode *stack[MAX+1]; 
  int top; 
}SeqStackCar;  

/*车道结点*/
typedef struct car{ 
  CarNode *data; 
  struct car *next; 
}QueueNode; 

/*模拟通道*/ 
typedef struct Node{ 
  QueueNode *head; 
  QueueNode *rear; 
}LinkQueueCar; 

/*--------------------------------预定义函数---------------------------------*/ 

void InitStack(SeqStackCar *); /*初始化栈*/ 
int InitQueue(LinkQueueCar *); /*初始化便道*/ 
int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ 
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ 

/*-------------------------------自定义函数-----------------------------------*/ 


/*初始化栈*/
void InitStack(SeqStackCar *s)  
{ 
	int i; 
    s->top=0; 
    for(i=0;i<=MAX;i++) 
    s->stack[s->top]=NULL; 
} 


/*初始化便道*/
int InitQueue(LinkQueueCar *Q)  
{ 
	Q->head=(QueueNode *)malloc(sizeof(QueueNode)); 
    if(Q->head!=NULL) 
    { 
      Q->head->next=NULL; 
      Q->rear=Q->head; 
      return(1); 
    } 
    else return(-1); 
} 


/*打印出站车的信息*/
void PRINT(CarNode *p,int room) 
{ 
	int A1,A2,B1,B2; 
    printf("\nplease input thedepart time:/**:**/"); 
    scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); 
    printf("\nthe number of the car:"); 
    puts(p->num); 
    printf("\nthe time the car arrive: %d:%d",p->reach.hour,p->reach.min); 
    printf("the depart time: %d:%d",p->leave.hour,p->leave.min); 
    A1=p->reach.hour; 
    A2=p->reach.min; 
    B1=p->leave.hour; 
    B2=p->leave.min; 
    printf("\nthe fee: %2.1f元",((B1-A1)*60+(B2-A2))*price); 
    free(p); 
} 


 /*车辆到达*/
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) 
{ 
    CarNode *p; 
    QueueNode *t; 
    p=(CarNode *)malloc(sizeof(CarNode)); 
    flushall(); 
    printf("\ninput the number of the car(例:1234):"); 
    gets(p->num); 
    if(Enter->top<MAX) /*车场未满,车进车场*/ 
    { 
      Enter->top++; 
      printf(" \nthe place of the car: %d ",Enter->top);
      printf("\nthe time thecar arrive:/**:**/"); 
      scanf("%d:%d",&(p->reach.hour),&(p->reach.min)); 
      Enter->stack[Enter->top]=p; 
      return(1); 
    } 
    else /*车场已满,车进便道*/ 
    { 
      printf("\n该车须在便道等待."); 
      t=(QueueNode *)malloc(sizeof(QueueNode)); 
      t->data=p; 
      t->next=NULL; 
      W->rear->next=t; 
      W->rear=t; 
      return(1); 
    } 
} 


/*车辆离开*/
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) 
{  
	int  room; 
    CarNode *p,*t; 
    QueueNode *q; 
    /*判断车场内是否有车*/ 
    if(Enter->top>0) /*有车*/
    { 
      while(1) /*输入离开车辆的信息*/ 
      { 
        printf("\n请输入车在车场的位置/1--%d/:",Enter->top); 
        scanf("%d",&room); 
        if(room>=1&&room<=Enter->top) break; 
      } 
      while(Enter->top>room) /*车辆离开*/ 
      { 
        Temp->top++; 
        Temp->stack[Temp->top]=Enter->stack[Enter->top]; 
        Enter->stack[Enter->top]=NULL; 
        Enter->top--; 
      } 
      p=Enter->stack[Enter->top]; 
      Enter->stack[Enter->top]=NULL; 
      Enter->top--; 
      while(Temp->top>=1) 
      { 
        Enter->top++; 
        Enter->stack[Enter->top]=Temp->stack[Temp->top]; 
        Temp->stack[Temp->top]=NULL; 
        Temp->top--; 
      } 
      PRINT(p,room); 
      /*判断通道上是否有车及车站是否已满*/ 
      if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/ 
      { 
        q=W->head->next; 
        t=q->data; 
        Enter->top++; 
        printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top); 
        printf("\n请输入现在的时间/**:**/:"); 
        scanf("%d:%d",&(t->reach.hour),&(t->reach.min)); 
        W->head->next=q->next; 
        if(q==W->rear) W->rear=W->head; 
        Enter->stack[Enter->top]=t; 
        free(q); 
      } 
      else printf("\n便道里没有车.\n"); 
    } 
    else printf("\n车场里没有车."); /*没车*/ 
} 

/*--------------------------------主函数-------------------------------------*/ 

void main() 
{ 
	SeqStackCar Enter,Temp; 
    LinkQueueCar Wait; 
    int ch; 
    InitStack(&Enter); /*初始化车站*/ 
    InitStack(&Temp); /*初始化让路的临时栈*/ 
    InitQueue(&Wait); /*初始化通道*/ 
    while(1) 
  { 
	printf("\n**********************************************");
	printf("\n  1. the car arrive"); 
    printf(" 2. the car leave"); 
    printf(" 3. quit\n"); 
    printf("**********************************************\n");
    while(1) 
    { 
	  scanf("%d",&ch); 
      if(ch>=1&&ch<=4)break; 
      else printf("\nplease choose: 1|2|3"); 
    } 
    switch(ch) 
    { 
      case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ 
      case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ 
      case 3:exit(0); /*退出程序*/ 
      default: break; 
    } 
  } 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -