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

📄 停车场管理.cpp

📁 该程序可以模拟停车场的管理过程。为各位管理停车场的管理员提供方便。
💻 CPP
字号:
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
/*------------------------------------------------------------------------------*/ 
#define MAX 2 /*车库容量*/ 
#define price 2 /*每车每小时费用*/ 
typedef struct time
{ 
	float hour;
}Time; /*时间结点*/ 
typedef struct node
{ 
    char num[2]; 
    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 main() 
{
    SeqStackCar Enter,Temp; 
    LinkQueueCar Wait; 
    int ch; 
    InitStack(&Enter); /*初始化车站*/ 
    InitStack(&Temp); /*初始化让路的临时栈*/ 
    InitQueue(&Wait); /*初始化通道*/ 
    while(1) 
	{
		printf("\n              ** 停车场管理程序 **                \n");
        printf("====================================================\n");
        printf("** **\n");
	    printf(" 1 --- 汽车进车场"); 
        printf(" 2 --- 汽车出车场");        
		printf("** **\n");
        printf(" 3 --- 退出程序\n"); 
		printf("====================================================\n");
		printf("请选择:(1,2,3):");
        while(1) 
		{ 
             scanf("%d",&ch); 
             if(ch>=1&&ch<=4)break; 
             else printf("请选择: 1|2|3.\n"); 
		} 
        switch(ch) 
		{ 
            case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ 
            case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/            
            case 3:exit(0); /*退出主程序*/ 
            default: break; 
		} 
	} 
} 
/*------------------------------------------------------------------------------*/ 
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) /*打印出站车的信息*/ 
{ 
    float A1,B1,money; 
    printf("汽车离开的时刻为:"); 
    scanf("%f",&(p->leave.hour)); 
	A1=p->reach.hour; 
    B1=p->leave.hour; 
	money=(B1-A1) *price;
	printf("\n\n                 收 据                \n");
	printf(" ---------------------------------------------\n");
    printf(" |进车场时刻:%1.2f|出车场时刻:%1.2f||应付%1.2f元|\n",p->reach.hour, p->leave.hour,money);   
	printf(" ---------------------------------------------\n");
    free(p); 
} 

//*****模块二:对进入停车场的汽车的处理*****//
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ 
{ 
    CarNode *p; 
    QueueNode *t; 
    p=(CarNode *)malloc(sizeof(CarNode)); 
    flushall(); 
    printf("请输入车牌号:"); 
    scanf("%d",&(p->num)); 
    if(Enter->top<MAX) /*车场未满,车进车场*/ 
	{ 
        Enter->top++; 
        printf("汽车所在车场位置 : %d",Enter->top); 
        printf("\n汽车进场的时刻为:"); 
        scanf("%f",&(p->reach.hour)); 
        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("请输入车在车场的位置/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\n便道的车进入车场第%d位置\n",Enter->top); 
           printf("\n请输入现在的时间:"); 
           scanf("%f",&(t->reach.hour)); 
           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"); /*没车*/ 
} 



⌨️ 快捷键说明

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