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

📄 tingchechangwenti.cpp

📁 本程序是一个对停车场问题的演示程序
💻 CPP
字号:
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h>  
#define MAX 10 /*车库容量*/ 
#define price 0.05 /*每车每分钟费用*/ 
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 List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ 
/*---------------------------主函数----------------------------------------*/ 
int main() 
{
    SeqStackCar Enter,Temp; 
    LinkQueueCar Wait; 
    int i; 
    char ch;
    InitStack(&Enter); /*初始化车站*/ 
    InitStack(&Temp); /*初始化让路的临时栈*/ 
    InitQueue(&Wait); /*初始化通道*/  
	printf("\n\n                       停车场管理系统:\n\n");
	for(i=1;i<60;i++) printf("*");
    printf("\n\nA. 车辆到达"); 
    printf(" D. 车辆离开"); 
    printf(" E.退出系统\n"); 
    while(1) 
	{
	    
        while(1) 
		{
			 fflush(stdin);   
			 printf("\n请选择操作: AorDorCorE\n");
             scanf("%c",&ch); 
           	 fflush(stdin);
             if(ch==65||ch==68||ch==69||ch==67)
				 break; 
            
		} 
        switch(ch) 
		{ 
            case'A':
				Arrival(&Enter,&Wait);
				break; /*车辆到达*/ 
            case'D':
				Leave(&Enter,&Temp,&Wait);
				break; /*车辆离开*/ 
            case'E':
				return 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(0); 
}


 
void PRINT(CarNode *p,int room) /*打印出站车的信息*/ 
{ 

    int A1,A2,B1,B2; 
    printf("\n请输入离开时间:"); 
    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",p->reach.hour); 
    printf("the depart time: %d",p->leave.hour); 
    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("\n请输入车牌号码(for example:鲁Q1234):"); 
    gets(p->num); 
    if(Enter->top<MAX) /*车场未满,车进车场*/ 
	{ 
        Enter->top++; 
		printf("\nthe time the car arrive:"); 
        scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
		printf("\n该车在车库的位置是 : %d.",Enter->top); 
        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车场里没有车."); /*没车*/ 

} 


⌨️ 快捷键说明

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