停车场管理
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车出进。汽车在停车场内按车辆到达的时间先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在他之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它的车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。试为停车场编制按上述要求进行管理的模拟程序
VC6.0
Hparking.h
#include<string>
#ifndef Hparking_H
#define Hparking_H
//汽车信息结点
struct Car
{
char ADinfor; //车到达或离去的标志
string Carnumber; //车牌号码
int ADtime; //车到达或离去的时刻
};
//便道汽车数据
struct BCar
{
Car bcar; //车的信息数据
BCar *next; //指向本身数据的一个指针
};
//停车场大类
class Parking
{
public:
Parking();
~Parking();
void cararrive(); //车刚到,即将分配位置
void Sroad(Car aCar); //南便道停车
void Nroad(Car aCar); //北便道停车
void Sparkingin(Car aCar); //南门进车
void Sparkingout(Car aCar); //南门出车
void Nparkingin(Car aCar); //北门进车
void Nparkingout(Car aCar); //北门出车
void Allshow(); //显示整个车场的状况
private:
Car aCar; //接收刚到来的车
Car *park; //停车场动态一维数组栈
Car *parkrec; //临时转车场动态一维数组栈
BCar *Northroad; //北门便道起始指针
BCar *Northtail; //北门便道尾指针
BCar *Southroad; //南门便道起始指针
BCar *Southtail; //南门便道尾指针
int n; //停车场车位数
int fee; //单位时间的停车费用
int Stop; //停车场栈南头指针
int Ntop; //停车场栈北头指针
int Temptop; //临时转车场栈头指针
int Sum; //出车时应缴的总费用
};
#endif
Mainparking.cpp
#include<iostream>
using namespace std;
#include "Hparking.h"
int main()
{
char m = '0';
Parking parking;
while(1)
{
cout<<"操作选项:"<<endl;
cout<<"******************"<<endl;
cout<<"1 进出车场操作"<<endl;
cout<<"2 整个车场状况显示"<<endl;
cout<<"3 退出"<<endl;
cout<<"******************"<<endl;
cout<<"请输入操作选项: ";
cin>>m;
switch(m)
{
case '1':
parking.cararrive();
break;
case '2':
parking.Allshow();
break;
case '3':
break;
default:
cout<<"没有此选项!"<<endl;
break;
}
if (m == '3')
{
break;
}
}
return 0;
}
North.cpp
#include<iostream>
using namespace std;
#include "Hparking.h"
//北门进车操作
void Parking::Nparkingin(Car aCar)
{
Ntop--;
park[Ntop].ADinfor = aCar.ADinfor;
park[Ntop].Carnumber = aCar.Carnumber;
park[Ntop].ADtime = aCar.ADtime;
cout<<"车进入北门第"<<n - Ntop<<"个位置,";
cout<<"进入停车场的时间是"<<aCar.ADtime<<endl;
}
//北门出车操作
void Parking::Nparkingout(Car aCar)
{
int time = 0;
int j = 0;
BCar *p;
p =new BCar;
while(Ntop < n)
{
if(park[Ntop].Carnumber == aCar.Carnumber)
{
time = aCar.ADtime - park[Ntop].ADtime;
j = Ntop;
Ntop++;
// delete
cout<<"应缴纳的停车费:"<<time*fee<<endl;
}
else
{
Temptop++;
parkrec[Temptop].ADinfor = park[Ntop].ADinfor;
parkrec[Temptop].Carnumber = park[Ntop].Carnumber;
parkrec[Temptop].ADtime = park[Ntop].ADtime;
Ntop++;
}
}
while(Temptop >= 0)
{
Ntop--;
park[Ntop].ADinfor = parkrec[Temptop].ADinfor;
park[Ntop].Carnumber = parkrec[Temptop].Carnumber;
park[Ntop].ADtime = parkrec[Temptop].ADtime;
Temptop--;
}
if(Stop + 2 == Ntop)
{
if(Northroad->next != NULL && Southroad->next==NULL)
{
Ntop--;
p = Northroad->next;
park[Ntop].ADinfor = p->bcar.ADinfor;
park[Ntop].Carnumber = p->bcar.Carnumber;
park[Ntop].ADtime = aCar.ADtime;
Northroad->next = p->next;
delete p;
}
if(Southroad->next != NULL && Northroad->next == NULL)
{
Stop++;
p = Southroad->next;
park[Stop].ADinfor = p->bcar.ADinfor;
park[Stop].Carnumber = p->bcar.Carnumber;
park[Stop].ADtime = aCar.ADtime;
Southroad->next = p->next;
delete p;
}
if (Northroad->next != NULL && Southroad->next != NULL)
{
if(Northroad->next->bcar.ADtime > Southroad->next->bcar.ADtime)
{
Stop++;
p =Southroad->next;
park[Stop].ADinfor = p->bcar.ADinfor;
park[Stop].Carnumber = p->bcar.Carnumber;
park[Stop].ADtime = aCar.ADtime;
Southroad->next = p->next;
delete p;
}
else
{
Ntop--;
p= Northroad->next;
park[Ntop].ADinfor = p->bcar.ADinfor;
park[Ntop].Carnumber = p->bcar.Carnumber;
park[Ntop].ADtime = aCar.ADtime;
Northroad->next = p->next;
delete p;
}
}
}
}
//北门便道停车
void Parking::Nroad(Car aCar)
{
int i = 0;
BCar *temp;
BCar *p;
temp = new BCar;
p = Northroad;
while(p != NULL)
{
i++;
p = p->next;
}
cout<<"车将进入北门便道第"<<i<<"个位置"<<endl;
temp->bcar.ADinfor = aCar.ADinfor;
temp->bcar.ADtime = aCar.ADtime;
temp->bcar.Carnumber = aCar.Carnumber;
temp->next = NULL;
Northtail->next = temp;
Northtail = temp;
}
Parking.cpp
#include<iostream>
using namespace std;
#include "Hparking.h"
//构造函数
Parking::Parking()
{
int i = 0;
Temptop = -1;
cout<<"请输入单位时间的停车费用:";
cin>>fee;
cout<<"请输入停车场车位数: ";
cin >> n;
Stop = -1;
Ntop = n;
park = new Car [n];
parkrec = new Car [n];
Northroad = new BCar;
Northroad->next = NULL;
Northtail = Northroad;
Southroad = new BCar;
Southroad->next = NULL;
Southtail = Southroad;
}
//车刚到的选择处理
void Parking::cararrive()
{
int i = 0;
int j = 0;
BCar *p;
p = new BCar;
char NS;
cout<<"车的信息,包括:"<<endl;
cout<<"该车是到达(A)还是离去(D),车牌号码,车到达或离去的时间"<<endl;
cout<<"例如:A 123456 12其中以空格间隔"<<endl;
cout<<"输入:E 0 0表示输入完毕!"<<endl;
while(1)
{
cout<<"请输入车的信息:"<<endl;
cin>>aCar.ADinfor;
cin>>aCar.Carnumber;
cin>>aCar.ADtime;
if (aCar.ADinfor == 'E'|| aCar.ADinfor =='e')
{
break;
}
else if (aCar.ADinfor == 'A'||aCar.ADinfor=='a')
{
//排除时间,车牌号码的逻辑错误
if (Stop > -1)
{
if(park[Stop].ADtime > aCar.ADtime)
{
cout<<"车到达时间输入有误!(时间要小于之前车辆到达的时间)"<<endl;
cout<<"重新输入车的信息!"<<endl;
continue;
}
for(i = 0;i <= Stop;i++)
{
if(park[i].Carnumber == aCar.Carnumber)
{
cout<<"车牌号码已经存在!重新输入车的信息!"<<endl;
j = 1;
break;
}
}
if (1 == j)
{
continue;
}
}
j = 0;
if (Ntop < n)
{
if (park[Ntop].ADtime > aCar.ADtime)
{
cout<<"车到达时间输入有误!(时间要小于之前车辆到达的时间)"<<endl;
cout<<"重新输入车的信息!"<<endl;
continue;
}
for(i = Ntop;i < n;i++)
{
if(park[i].Carnumber == aCar.Carnumber)
{
cout<<"车牌号码已经存在!重新输入车的信息!"<<endl;
j = 1;
break;
}
}
if (1 == j)
{
continue;
}
}
j = 0;
if (Southroad->next != NULL)
{
if(Southtail->bcar.ADtime > aCar.ADtime)
{
cout<<"车到达时间输入有误!(时间要小于之前车辆到达的时间)"<<endl;
cout<<"重新输入车的信息!"<<endl;
continue;
}
p = Southroad->next;
while(p != NULL)
{
if (p->bcar.Carnumber == aCar.Carnumber)
{
cout<<"车牌号码已经存在!重新输入车的信息!"<<endl;
j = 1;
break;
}
p = p->next;
}
if (1 == j)
{
continue;
}
}
j = 0;
if (Northroad->next != NULL)
{
if (Northtail->bcar.ADtime > aCar.ADtime)
{
cout<<"车到达时间输入有误!(时间要小于之前车辆到达的时间)"<<endl;
cout<<"重新输入车的信息!"<<endl;
cout<<endl;
continue;
}
p = N