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

📄 parking.cpp

📁 一 问题描述 1 题目内容 设停车场内只有一个可停放n辆汽车的狭长通道
💻 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 = Northroad->next;
				while(p != NULL)
				{
					if (p->bcar.Carnumber == aCar.Carnumber)
					{
						cout<<"车牌号码已经存在!重新输入车的信息!"<<endl;
						j = 1;
						break;
					}
					p = p->next;
				}
				if (1 == j)
				{
					continue;
				}
			}
			//进出车场的操作(包括进,出车场,进便道)
			do
			{
				i = 0;
				cout<<"请选择车到来的方向:"<<endl;
				cout<<"北门(North)或南门(South)"<<endl;
				cout<<"****************"<<endl;
				cout<<"1 北门(North)"<<endl;
				cout<<"2 南门(South)"<<endl;
				cout<<"****************"<<endl;
				cout<<"请输入你选择的编号:"<<endl;
				cin>>NS;
				if (NS != '1' && NS != '2')
				{
					i = 1;
					cout<<"没有此选项"<<endl;					
				}
			}while(i == 1);
			if (Stop + 1 == Ntop)
			{
				cout<<"车场已满,车将进入便道"<<endl;
				switch(NS)
				{
				case '1':
					Nroad(aCar);
					break;
				case '2':
					Sroad(aCar);
					break;
				}
			}
			else
			{
				switch(NS)
				{
				case '1':
					Nparkingin(aCar);
					break;
				case '2':
					Sparkingin(aCar);
					break;
				default:
					break;
				}
			}
		}
		else if (aCar.ADinfor == 'D'||aCar.ADinfor=='d')
		{
			int judge = 0;
			int judge1 = 0;
			for(i = 0;i <= Stop;i++)
			{
				if (park[i].Carnumber == aCar.Carnumber)
				{
					if (park[i].ADtime > aCar.ADtime)
					{
						cout<<"输入时间有误(可能是离开时间小于到来时间)"<<endl;
						cout<<"检查输入信息,重新输入车的信息"<<endl;
						cout<<endl;
						judge1 = 1;
						break;
					}
					else
					{
						Sparkingout(aCar);
						judge = 1;
						break;
					}
				}
			}
			for(i = n - 1;i >= Ntop;i--)
			{
				if(park[i].Carnumber == aCar.Carnumber)
				{
					if (park[i].ADtime > aCar.ADtime)
					{
						cout<<"输入时间有误(可能是离开时间小于到来时间)"<<endl;
						cout<<"检查输入信息,重新输入车的信息"<<endl;
						cout<<endl;
						judge1 = 1;
						break;
					}
					else
					{
						Nparkingout(aCar);
						judge = 1;
						break;
					}
				}
			}
			if(judge1 == 1)
			{
				continue;
			}
			if (judge == 0)
			{
				cout<<"此车场中没有牌号为"<<aCar.Carnumber<<"的车!重新输入车的信息!"<<endl;
			}
		}
		else
		{
			cout<<"车的到达或离去信息错误!重新输入车的信息!"<<endl;
		}
	}
}

//整个车场状况
void Parking::Allshow()
{
	int i = 0;
	BCar *p;
	p = new BCar;
	if(Stop == -1)
	{
		cout<<"南门入口未有车进入"<<endl;
	}
	else
	{
		for(i = 0;i <= Stop;i++)
		{		
			cout<<"车位: 南门第"<<i + 1<<"个位置"<<endl;
			cout<<"车牌号是"<<park[i].Carnumber<<endl;
			cout<<"该车到达时间是"<<park[i].ADtime<<endl;
		}
	}
	cout<<endl;
	if (Ntop == n)
	{
		cout<<"北门入口未有车进入"<<endl;
	}
	else
	{
		for(i = n - 1;i >= Ntop;i--)
		{		
			cout<<"车位: 北门第"<<n - i<<"个位置"<<endl;
			cout<<"车牌号是"<<park[i].Carnumber<<endl;
			cout<<"该车到达时间是"<<park[i].ADtime<<endl;
		}
	}
	cout<<endl;
	i = 0;
	p = Southroad->next;
	if (p == NULL)
	{
		cout<<"南门便道没有车在等候"<<endl;
	}
	else
	{
		while(p!=NULL)
		{
			cout<<"南便道第"<<i + 1<<"位置";
			cout<<"车牌号:"<<p->bcar.Carnumber<<endl;
			cout<<"该车到达时间是:"<<p->bcar.ADtime<<endl;
			i++;
			p = p->next;
		}
	}
	cout<<endl;
	i = 0;
	p = Northroad->next;
	if (p == NULL)
	{
		cout<<"北门便道没有车在等候"<<endl;
	}
	else
	{
		while(p!=NULL)
		{
			cout<<"北便道第"<<i + 1<<"位置";
			cout<<"车牌号:"<<p->bcar.Carnumber<<endl;
			cout<<"进入北门便道时间是:"<<p->bcar.ADtime<<endl;
			i++;
			p = p->next;
		}
	}
	cout<<endl;
}

//析构函数
Parking::~Parking()
{
	BCar *p;
	p = new BCar;
	while(Northroad->next != NULL)
	{
		p = Northroad->next;
		Northroad->next = p->next;
		delete p;
	}
	while(Southroad->next != NULL)
	{
		p = Southroad->next;
		Southroad->next = p->next;
		delete p;
	}
	delete Northroad;
	delete Southroad;
}

⌨️ 快捷键说明

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