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

📄 停车场管理.cpp

📁 有很多数据结构的课设
💻 CPP
字号:
// 停车场管理.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#define sizef 2

//////////////////////////////////////////////////////////////////////////////////
struct car
{
	int   name;//车牌
	int    place;//车位
	time_t   intime;//进入停车场时间
	char     intime2[9];
	time_t   outtime;//离开停车场时间
	int    time;//停车时间
	float cost_sole;//停车费用
	car * next;
	car * front;
};

struct sqlstack
{
	int top;
	int base;
};

struct queue
{
	car * head;
	car * rear;
};

queue que;
sqlstack sql;
car * car1[sizef];
int size;//记录停车场内部停的车辆

void enqueue_r(car * p)//入队函数、尾插法
{
	if(que.head==NULL)
	{
		que.head=que.rear=p;
		p->place=1;
	}
	else
	{
		p->next=que.rear;
		que.rear->front=p;
		que.rear=p;
		p->place=p->next->place+1;
	}
}
void enqueue_h(car * p)//入队函数、头插法
{
	if(que.head==NULL)
		que.head=que.rear=p;
	else
	{
		p->front=que.head;
		que.head->next=p;
		que.head=p;
	}
}
car * dequeue()//出队函数
{
	car * q=que.head;

	que.head=que.head->front;
	if(que.head==NULL)
		que.rear=NULL;
	else
		que.head->next=NULL;
	return q;
}


void push(car * p)//入栈
{   
	size++;

	if(sql.top==sql.base)
	{
		car1[sql.top]=p;
		car1[sql.base]=p;
		sql.top++;
		p->place=1;
		
	}
	else
	{
		p->place=car1[sql.top-1]->place+1;//车位是先进入的车的车位加一
		car1[sql.top]=p;
		sql.top++;
		
	}
}
car * pop()//出栈
{
	sql.top--;
	size--;//停车场内车的数量减一
	return car1[sql.top];
}

int quelength(car * p)//传入一个队的指针,返回队的长度函数
{
	int j=0;
	while(p)
	{
		j++;
		p=p->next;
	}
	return j;
}



///////////////////////////////////////////////////////////////////////////

int _tmain(int argc, _TCHAR* argv[])
{
	system("color 3e");                            //利用DOS命令设定背景,文字颜色
	cout<<endl;
	
	for(int i=0;i<sizef;i++)
		car1[i]=NULL;

	
	que.head=que.rear=NULL;


	sql.top=0;
	sql.base=0;
	size=0;

	
A:
	cout<<endl;
	cout<<"                           欢迎进入停车场管理系统                              "<<endl<<endl<<endl;
	cout<<"请选择操作:1,进车   2,出车   3,车场内车辆查询   4,退出"<<endl;
	int opinion;
	cin>>opinion;
	//////////////////////////////////////////////////////


	if(opinion==1)
	{
		car * p=new car;
		cout<<"请输入车辆的相关信息:   "<<endl<<endl;
		cout<<"车牌号:      ";
		cin>>p->name;
		cout<<endl;
		cout<<"停车单价(每小时):";
		cin>>p->cost_sole;
		p->front=NULL;
		p->next=NULL;

		if(size==sizef)
		{
			cout<<endl<<endl;
			cout<<"停车场内部暂时没空位,暂时停在外面,从进入停车厂开始记时"<<endl;
			enqueue_r(p);
			cout<<endl<<"停放完毕"<<endl;
		}
		else
		{
			p->intime=time(NULL);//调用库函数获取系统时间,从1970年到现在的秒数
			char time_now[9];
			_strtime(time_now);//调用库函数获取系统时间
			strcpy(p->intime2,time_now);
			cout<<"                                      车辆进入停车场时间是:   "<<time_now<<endl;

			push(p);//入栈
			cout<<"                                      车辆进入完毕"<<endl;

		}

	}
	////////////////////////////////////////////////////////////////////



	else if(opinion==2)
	{
		cout<<"请输入要出去的车牌号:";
		int name1;
		cin>>name1;

		int place1=100;//记录找到的车的位置
		car * place2=NULL;//同上

		for(int i=0;i<sizef;i++)//先在栈中查找
		{
			if(size==0)
			{
				cout<<endl<<"停车场内部现在没有车,请确认后再进行操作!"<<endl;
				goto B;
			}
			else if(sql.top==i)
				break;
			else if(car1[i]->name==name1) 
			{
				place1=i;
				break;
			}
		}
		if(place1==100)//证明停车场内部没有,则查找便道上有没有
		{
			car * q=que.rear;
			while(q)
			{
				if(q->name==name1)
				{
					place2=q;
					break;
				}
				q=q->next;
			}
		}
		else//证明车在停车场内,出栈
		{
			float cost=0;
			car1[place1]->outtime=time(NULL);//调用库函数获取系统时间,从1970年到现在的秒数
			float ti=difftime(car1[place1]->outtime,car1[place1]->intime);

			char time_now[9];
			_strtime(time_now);//调用库函数获取系统时间
			cout<<endl<<"你的出车时间是    "<<time_now;
			cout<<endl<<"停车单价是        "<<car1[place1]->cost_sole<<"   元/小时"<<endl;
			cout<<endl<<"总共停车时间是:   "<<ti/3600<<"   小时"<<",应收    "<<(ti/3600)*car1[place1]->cost_sole<<"  元"<<endl;
			cout<<endl<<"你的车在停车厂内    "<<car1[place1]->place<<"    号车位上,请提车!一路走好,欢迎下次再来!";
			int k=0;//记录出去了多少辆车,以备等会出队用
			while(sql.top!=place1+1)
			{
				enqueue_h(pop());//出栈入队
				k++;
			}
			car * p2=pop();
			delete p2;
			if(quelength(que.rear)==k)
				k--;
			for(int i=0;i<k+1;i++)
			{
				if(i==k)
				{
					p2=dequeue();
					p2->intime=time(NULL);
					_strtime(p2->intime2);
					push(p2);
				}
				else
					push(dequeue());//出队入栈
			}

		
		}
		if(place2!=NULL)
		{
			cout<<endl<<"此车还在便道上,所以不收钱"<<endl;
			int position;
			position=((que.rear->place)-(que.head->place)+1);
			cout<<endl<<"此车在便道的  "<<position<<"  车位上,请提车!一路走好,欢迎下次再来!"<<endl;
			
			car * p1=place2->front;
			car * p2=place2->next;
			if(place2->front==NULL)
			{
				delete que.head;
				que.head=que.rear=NULL;
			}
			else
			{
				p1->next=p2;
				p2->front=p1;
				delete place2;
			}
			while(p1)//便道上出车后的车辆的车位都要往前移动一位
			{
				p1->place--;
				p1=p1->front;
			}
			cout<<endl<<"出车完毕"<<endl;
		}
		if(place1==100 && place2==NULL)
		{
			cout<<endl<<"经查询无此车,请确认一下你的车牌号!"<<endl;
		}
	}
	else if(opinion==3)
	{
		if(size==0)
		{
			cout<<endl<<"停车厂内现在没有车,请确认后再操作"<<endl;
			goto B;
		}
		for(int i=0;i<sql.top;i++)
		{
			cout<<endl<<endl<<"1,   "<<"车牌号:  "<<car1[i]->name<<endl;
			cout<<"     车位:     "<<car1[i]->place<<endl;
			cout<<"     进车时间: "<<car1[i]->intime2<<endl;
			cout<<"     停车单价: "<<car1[i]->cost_sole<<" 元/小时"<<endl<<endl;
			cout<<"************************************************************"<<endl;
		}
	}
	else if(opinion==4)
		exit(1);
	else
		cout<<endl<<"错误的操作指令,请确认后再操作"<<endl;
	

	///////////////////////////////////////////////////////
B:
	cout<<endl<<endl<<endl;
	cout<<"操作完毕,按任意键进入下一次操作!→"<<endl;
	while (!kbhit());                             //调用库函数,等待用户按键
	system("cls");
	goto A;
	return 0;
}

⌨️ 快捷键说明

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