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

📄 实训课实验三:停车场管理.cpp

📁 停车场管理,进出停车厂的数据模型,先进先出,后进后出
💻 CPP
字号:
#include<iostream.h>
#define TingCheWei 10
#define BianDaoWei 5
typedef struct//车的信息
{
    int PaiHao;
    int ArriveTime,LeaveTime;
}CarType;

typedef struct//模拟停车位和临时栈
{
   CarType data[TingCheWei];
   int YNum;//已停车的数量
}Stack1;

typedef struct//便道(循环队列)
{
   int front,rear,count;
   CarType data[BianDaoWei];
}CirQueue;

void InputCarMessage(CarType *c,int f);//输入车的信息
void Arrive(Stack1 *s1,CirQueue *q1,CarType c);//车辆c到达
void Leave(Stack1 *s1,CirQueue *q1,Stack1 *s2,CarType c);//车辆c离开
void InitStack(Stack1 *s1);//初始栈
int StackEmpty(Stack1 *s1);//判栈空
void Push(Stack1 *s1,CarType c);//进栈
CarType Pop(Stack1 *s1);//出栈
int ShouFei(CarType c,CarType cc);//收费
void InitQueue(CirQueue *q1);//初始队列
int QueueEmpty(CirQueue *q1);//判队空
void EnQueue(CirQueue *q1,CarType c);//入队
CarType DeQueue(CirQueue *q1);//出队

void main()
{
    int flag;//标记
    Stack1  s1;//停车场的栈
	InitStack(&s1);
    CirQueue q1;//便道队列
    InitQueue(&q1);
    Stack1  s2;//临时栈
	InitStack(&s2);
    CarType c;//车信息

    while(flag!=0)
    {
        cout<<"\n1. 到达    2.离去     0.退出\n";
        cout<<"请选择:";
        cin>>flag;
        switch(flag)
         {
             case 1: InputCarMessage(&c,1);
                     Arrive(&s1,&q1,c);
                     break;
             case 2: InputCarMessage(&c,2);
                     Leave(&s1,&q1,&s2,c);
                     break;

          }
    }
}

void InputCarMessage(CarType *c,int f)
//输入车的信息
{
	int p,a,l;
	cout<<"请输入车牌号:";
	cin>>p;
	c->PaiHao=p;
	if(f==1)//当标记为1时
	{
		cout<<"请输入到达时间:";
		cin>>a;
		c->ArriveTime=a;
	}
	else
	{
		cout<<"请输入离开时间:";
		cin>>l;
		c->LeaveTime=l;
	}
	
}

void Arrive(Stack1 *s1,CirQueue *q1,CarType c)
//车辆c到达
{
	if(s1->YNum<TingCheWei-1)
	{
		s1->data[++s1->YNum]=c;
	}
	else
	{
		if(q1->count==BianDaoWei)
			cout<<"对不起,没有车位给您停放!";
		else
		{
			cout<<"停车场已满,请到便车道等候!";
			q1->count++;
			q1->data[q1->rear]=c;
			q1->rear=(q1->rear+1)%BianDaoWei;
		}
	}
}

void Leave(Stack1 *s1,CirQueue *q1,Stack1 *s2,CarType c)
//车辆c离开
{
	CarType cc;
	int z;//车辆滞留时间

	if (StackEmpty(s1))
	{
		cout<<"对不起,您所查找的车不存在!";
		return;
	}
    cc=Pop(s1);
	while(!StackEmpty(s1) && cc.PaiHao!=c.PaiHao)
	{
		Push(s2,cc);
		cc=Pop(s1);
	}
	if(cc.PaiHao==c.PaiHao)
	{
		z=ShouFei(cc,c);
		if(z>0)
        cout<<"您已在停车场停留:"<<z<<"小时!"<<"您应付款:"<<z*10<<"元";
		else
			cout<<"您已在停车场停留:"<<z+24<<"小时!"<<"您应付款:"<<(z+24)*10<<"元";
		while(!StackEmpty(s2))
		{
			Push(s1,Pop(s2));
		}
		if(!QueueEmpty(q1))
		{
			Push(s1,DeQueue(q1));
		}
	}
	else if (StackEmpty(s1))
	{
        Push(s2,cc);
		cout<<"对不起,您所查找的车不存在";
        while(!StackEmpty(s2))
		{
			Push(s1,Pop(s2));
		}
	}
}

void InitStack(Stack1 *s1)//初始栈
{
	s1->YNum=-1;
}

int StackEmpty(Stack1 *s1)//判栈空
{
	return s1->YNum==-1;
}

void Push(Stack1 *s1,CarType c)//进栈
{
	if(s1->YNum==TingCheWei-1)
	{
		cout<<"error!";
		return;
	}
	s1->data[++s1->YNum]=c;
}

CarType Pop(Stack1 *s1)//出栈
{
	if(StackEmpty(s1))
	{
		cout<<"Error!";
	}
	return s1->data[s1->YNum--];
}

int ShouFei(CarType c,CarType cc)//收费
{
	if(c.ArriveTime>0 && cc.LeaveTime>0)
		return cc.LeaveTime-c.ArriveTime;
	else 
		return -1;
}

void InitQueue(CirQueue *q1)//初始队列
{
	q1->front=q1->rear=0;
	q1->count=0;
}

int QueueEmpty(CirQueue *q1)//判队空
{
	return q1->count==0;
}

void EnQueue(CirQueue *q1,CarType c)//入队
{
	if(q1->count==BianDaoWei)
	{
		cout<<"error";
		return;
	}
	q1->count++;
	q1->data[q1->rear]=c;
	q1->rear=(q1->rear+1)%BianDaoWei;
}

CarType DeQueue(CirQueue *q1)//出队
{
	CarType temp;
	if(QueueEmpty(q1))
	{
		cout<<"Error";
	}
	temp=q1->data[q1->front];
	q1->count--;
	q1->front=(q1->front+1)%BianDaoWei;
	return temp;
}







⌨️ 快捷键说明

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