模拟停车场管理

停车场管理

试题描述:设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场内某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。试设计这样一个停车场模拟管理程序,要求有运行结果截图。

提示

  1. 为了便于区分每辆汽车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车当前的状态。 
  2. 为了便于停车场的管理,要为每个车位分配一个固定的编号。 
  3. 当停车场的停车位上都已停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次序放在便道上,为便道上的每个位置分配一个固定的编号。当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位。 
  4. 当某辆车离开停车场的时候,比他后进停车位的车要为他让路,而且当他开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为完成这项功能,定义一个结构体。

使用.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;

}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个可以停放n辆汽车狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。编制一程序模拟停车场管理。(2) 实现要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。(2) 实现提示:汽车模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(’A’,1,5)表示1号牌照车在5时刻到达,而(’D’,5,20)表示5号牌照车在20时刻离去。整个程序可以在输入信息为(’E’,0,0)时结束。本题可用顺序存储结构和链式存储结构来实现。本人的一个数据结构课程计(用C++源码实现,供大家学习参考之用,有不妥之处望指正)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值