📄 停车场管理.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 + -