停车场管理
试题描述:设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场内某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。试设计这样一个停车场模拟管理程序,要求有运行结果截图。
提示:
- 为了便于区分每辆汽车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车当前的状态。
- 为了便于停车场的管理,要为每个车位分配一个固定的编号。
- 当停车场的停车位上都已停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次序放在便道上,为便道上的每个位置分配一个固定的编号。当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位。
- 当某辆车离开停车场的时候,比他后进停车位的车要为他让路,而且当他开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为完成这项功能,定义一个结构体。
使用.cpp文件编译
#include <bits/stdc++.h>
using namespace std;
int used_place, wait_place;
string car_name;
typedef struct node {
string license;
string status;
} car;
int main() {
vector<car> parking;
vector<car>::iterator iter;
car new_car,tmp;
char c = 'y';
while (c == 'y') {
system("cls");
cout << endl << endl << " ====================欢迎来到Eumenides的停车场=================== " << endl;
if (parking.size() >= 7) {
used_place = 7;
wait_place = parking.size() - 7;
} else {
wait_place = 0;
used_place = parking.size();
}
cout << " 当前停车场上共有" << wait_place + used_place << "辆车" << endl << endl;
cout << " 车场内共有" << used_place << "辆车" << endl;
int i = 1;
for (vector<car>::iterator iter = parking.begin(); iter != parking.begin() + 7 && iter != parking.end(); ++iter, ++i) {
cout << " " << i << ".停车位编号:used" << i << ",车辆" << iter->license << endl;
}
cout << endl << endl << " 等候车共有" << wait_place << "辆车" << endl;
i = 1;
if (wait_place != 0)
for (vector<car>::iterator iter = parking.begin() + 7; iter < parking.end(); ++iter, ++i) {
cout << " " << i << ".停车位编号:wait" << i << ",车辆" << iter->license << endl << endl;
}
cout << endl << "输入对应字母完成操作:" << endl;
cout << " e:入场" << endl;
cout << " o:出场" << endl;
cout << " q:查询车辆信息" << endl;
cin >> c;
switch (c) {
case 'e':
cout << "请输入车牌号: ";
cin >> car_name;
new_car.license = car_name;
parking.push_back(new_car);
cout<<"车辆以入站!"<<endl;
break;
case 'o':
if (parking.empty()) {
cout << "停车场中无车辆" << endl;
break;
}
tmp = parking.front();
parking.erase(parking.begin());
cout << "车辆" << tmp.license << "已出站!" << endl;
break;
case 'q':
cout << "请输入需要查询的车牌号:";
cin >> car_name;
for (iter = parking.begin() ; iter < parking.end(); ++iter, ++i) {
if (iter->license == car_name) break;
}
cout << "车牌号:" << car_name;
if (iter <= parking.begin() + 7) {
cout << "处于停车状态" << endl;
} else {
cout << "处于等待状态" << endl;
}
break;
default:
cout<<"无该选项!"<<endl;
}
cout<<endl<<"继续或退出(y/n):";
cin>>c;
}
return 0;
}