第1个回答 2011-06-26
我这有个停车场管理系统跟你的轮船渡口管理系统差不多!!改一下就能用!!
#include<iostream.h>
#include<string.h>
#include<stdlib.h> //free()函数功能
const int Max_Park=1;
int biandao=0;//便道上有多少车
//.................................................................
struct Car
{
char pattent;//车辆类型,a=小轿车,b=客车,c=大卡车
int number;//车辆牌照
int intime;//车进入的时间,用整数表示
};
typedef struct Queue
{
Car car;
Queue*next;
}Queue,*LQueue;//模拟停车场外的便道
typedef struct Stack
{
Car *car;
int top;
}Stack,*LStack;//模拟停车场的栈
//..................................................................
class Road
{
public:
Queue q1;
LQueue q2;
public:
void InitQ(LQueue&Head,LQueue&Rear);//队列的初始化
void InQ(LQueue&Rear,Car pacr);//入队列
void FindQ(LQueue Head,int num);//在便道上查找车辆信息
void OutQ(LQueue Head,int num);//出便道
};//便道类结束
//...................................便道类函数定义
void Road::InitQ(LQueue&Head,LQueue&Rear)
{
Rear->next=NULL;
Head=Rear;
}//队列的初始化
void Road::InQ(LQueue&Rear,Car pacr)
{
LQueue Node=new Queue;
Node->car=pacr;
Node->next=NULL;
Rear->next=Node;
Rear=Rear->next;
biandao++;
}//入队列
void Road:: FindQ(LQueue Head,int num)
{
int pos=0;
for(LQueue q=Head;q->next!=NULL;q=q->next,pos++)
{
if(q->next->car.number==num)
{
cout<<"要查找的车在便道"<<pos+1<<"位"<<" 车类型为";
switch(q->next->car.pattent)
{
case'a':cout<<"小轿车";break;
case'b':cout<<"客车";break;
case'c':cout<<"大卡车";break;
}
cout<<"此车进入的时间为"<<q->next->car.intime<<endl;
}
}
cout<<"此车不在停车场!!"<<endl;
}//在便道上查找车辆信息
void Road:: OutQ(LQueue Head,int num)
{
LQueue p=new Queue;
for(LQueue q=Head;q->next!=NULL;q=q->next)
{
if(q->next->car.number==num)
{
p=q->next;
q->next=p->next;
free(p);
biandao--;
break;
}
}
}
//........................................................
class Park
{
public:
Stack s1;
Stack s2;
Road R7;
public:
void OutputS(Car e);
void InputS(Car&e);
void InitS(LStack ss1);
Car PopS(LStack ss1);
int PushS(LStack ss1,Car car);
int FindS(LStack ss1,int number);
void InPark(LStack ss1,LQueue &Rear);
void Delete(LStack ss1,LStack ss2,int n);
void OutPark(LStack ss1,LStack ss2,LQueue Head);
void Search(LStack ss1,LQueue Head,LQueue Rear);
};//车位类结束
//......................................车位类函数的定义
void Park::OutputS(Car e)
{
cout<<"这辆车的牌照是:"<<e.number<<endl<<"这辆车的类型是:";
switch(e.pattent)
{
case'a':cout<<"小轿车";break;
case'b':cout<<"客车";break;
case'c':cout<<"大卡车";break;
}
cout<<"进入时间为:"<<e.intime<<endl;
}//查询停车场的车
void Park:: InputS(Car&e)
{
cout<<"请输入此车的类型a=小轿车,b=客车,c=大客车"<<endl;
cin>>e.pattent;
cout<<"请输入此此车的牌照号:"<<endl;
cin>>e.number;
cout<<"请输入入场时间:"<<endl;
cin>>e.intime;
}//进入停车场的车
void Park::InitS(LStack ss)
{
ss->car=new Car[Max_Park];
ss->top=-1;
}//初始化栈
Car Park:: PopS(LStack ss)
{
Car eee=ss->car[ss->top];
ss->top--;
return eee;
}//出栈
int Park::PushS(LStack ss,Car car)
{
if(ss->top<Max_Park-1)
{
ss->top++;
ss->car[ss->top].intime=car.intime;
ss->car[ss->top].number=car.number;
ss->car[ss->top].pattent=car.pattent;
return 0;
}
else
return -1;
}//车位已满,则进入便道
int Park::FindS(LStack ss,int number)
{
for(int i=0;i<=ss->top;i++)
{
if(ss->car[i].number==number)
return i;
}
return -1;//在便道上查找要找的车
}//在车位上查找要找的车辆
void Park::InPark(LStack ss1,LQueue &Rear)
{
Car ee;
InputS(ee);
int n=PushS(ss1,ee);
if(n<0)
{
Car rcar;
rcar.number=ee.number;
rcar.pattent=ee.pattent;
rcar.intime=ee.intime;
R7.InQ(Rear ,rcar);
}
}//车辆进场,有车位如车位,无车位进便道
void Park::Delete(LStack ss1,LStack ss2,int n)
{
int size=ss1->top;
for(int i=0;i<size-n;i++)
PushS(ss2,PopS(ss1));
PopS(ss1);
for( i=0;i<size-n;i++)
PushS(ss1,PopS(ss2));
}//以一个栈为中转,将任意为的车出场
void Park::OutPark(LStack ss1,LStack ss2,LQueue Head)
{
cout<<"请输入要出场的车的车牌号:"<<endl;
int num;
cin>>num;
int nn;
nn=FindS(ss1,num);
if(nn>=0)
{
cout<<"这辆车在车位上"<<endl;
OutputS(ss1->car[nn]);
Delete(ss1,ss2,nn);
if(ss1->top<=Max_Park-1)
if(Head->next!=NULL)
{
cout<<"\n便道上的车要进车位!"<<endl;
LQueue p=new Queue;
p=Head->next;
Head->next=p->next;
PushS(ss1,p->car);
free(p);
biandao--;
}
}
else
{
R7.FindQ( Head, num);
R7.OutQ( Head,num);
}
}//输出要出场的车
void Park::Search(LStack ss1,LQueue Head,LQueue Rear)
{
cout<<"停车场中现有"<<ss1->top+1<<"辆车"<<endl;
if(Head==Rear)
cout<<"便道上没有车!"<<endl;
else
cout<<"便道上停了"<<biandao<<"辆车"<<endl;
}//输出停车场的车辆信息
//............................................................
void show()
{
cout<<"*********************本停车场信息**************************"<<endl;
cout<<"本停车场共有"<<Max_Park<<"个车位"<<endl;
cout<<"只允许停放小轿车,客车,大卡车"<<endl;
cout<<"车辆进入要做车辆类型,车牌,进入时间的记录"<<endl;
cout<<"***********************************************************"<<endl;
}
/*void choise()
{
if(Max_Park-(ss1->top+1)>0)
{
cout<<"停车场中"<<ss1->top+1<<"辆车"<<endl;
cout<<"还可以停放"<<Max_Park-(ss1->top+1)<<"辆车"<<endl;
}
else
cout<<"\n停车场已满,再来的车只能放在便道上!"<<endl;
cout<<"输入要进行的操作:"<<endl
<<"A=进场"<<endl
<<"D=出场"<<endl
<<"F=查询车辆信息"<<endl
<<"E=结束程序!"<<endl;
}*/
void main()
{
Road R6;
show();
LStack ss1=new Stack;//停车场的栈
LStack ss2=new Stack;//作为车辆中转的栈
LQueue Head=new Queue;//队列的头
LQueue Rear=new Queue;//队列的尾
R6.InitQ( Head, Rear);//队列初始化
Park park;
park.InitS(ss1);
park.InitS(ss2);
while(1)
{
if(Max_Park-(ss1->top+1)>0)
{
cout<<"停车场中"<<ss1->top+1<<"辆车"<<endl;
cout<<"还可以停放"<<Max_Park-(ss1->top+1)<<"辆车"<<endl;
}
else
cout<<"\n停车场已满,再来的车只能放在便道上!"<<endl;
cout<<"输入要进行的操作:"<<endl
<<"A=进场"<<endl
<<"D=出场"<<endl
<<"F=查询车辆信息"<<endl
<<"E=结束程序!"<<endl;
char demand;
cin>>demand;
switch(demand)
{
case 'A':
{
int w=1;
while(w)
{
park.InPark(ss1,Rear);
cout<<"车辆继续进场按1,要进行其他操作按0!"<<endl;
if(Max_Park-(ss1->top+1)>0)
{
cout<<"停车场中"<<ss1->top+1<<"辆车"<<endl;
cout<<"还可以停放"<<Max_Park-(ss1->top+1)<<"辆车"<<endl;
}
else
cout<<"\n停车场已满,再来的车只能放在便道上!"<<endl;
cout<<"输入要进行的操作:"<<endl
<<"A=进场"<<endl
<<"D=出场"<<endl
<<"F=查询车辆信息"<<endl
<<"E=结束程序!"<<endl;
cin>>w;
}
};break;
case 'D': park.OutPark(ss1,ss2, Head);break;
case'F':park.Search(ss1, Head, Rear) ; break;
case'E':exit(0);
}
}
}本回答被提问者采纳