模拟停车场管理

停车场管理

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

提示

  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
    评论
停车场管理系统通常包括车辆和停车场两个主要的实体。 对于车辆,我们需要记录车牌号、入场时间、停车时长等信息。对于停车场,我们需要记录停车场的总车位数、当前空闲车位数、停车费用等信息。 以下是一个简单的 C 语言代码示例,模拟停车场管理系统: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_SIZE 100 // 停车场最大容量 // 车辆结构体 typedef struct Car { char license[10]; // 车牌号 time_t enter_time; // 入场时间 int parked_time; // 停车时长(分钟) } Car; // 停车场结构体 typedef struct ParkingLot { int total_space; // 总车位数 int available_space; // 空闲车位数 float fee_rate; // 停车费率(每小时多少元) Car cars[MAX_SIZE]; // 停车场中的车辆数组 } ParkingLot; // 初始化停车场 void init_parking_lot(ParkingLot *parking_lot, int total_space, float fee_rate) { parking_lot->total_space = total_space; parking_lot->available_space = total_space; parking_lot->fee_rate = fee_rate; } // 进入停车场 void enter_parking_lot(ParkingLot *parking_lot, char *license) { if (parking_lot->available_space <= 0) { printf("停车场已满,无法进入!\n"); return; } // 生成随机入场时间 srand((unsigned int)time(NULL)); time_t enter_time = time(NULL) - rand() % 3600; // 添加车辆到停车场 Car car = { .enter_time = enter_time, .parked_time = 0 }; strcpy(car.license, license); parking_lot->cars[parking_lot->total_space - parking_lot->available_space] = car; parking_lot->available_space--; printf("车辆 %s 进入停车场,入场时间:%s", license, ctime(&enter_time)); } // 离开停车场 void leave_parking_lot(ParkingLot *parking_lot, char *license) { int i; for (i = 0; i < parking_lot->total_space; i++) { if (strcmp(parking_lot->cars[i].license, license) == 0) { // 计算停车费用 int parked_time = (int)difftime(time(NULL), parking_lot->cars[i].enter_time) / 60; float fee = parked_time * parking_lot->fee_rate; printf("车辆 %s 离开停车场,停车时长:%d分钟,停车费用:%.2f元\n", license, parked_time, fee); // 从停车场中删除车辆 int j; for (j = i; j < parking_lot->total_space - 1; j++) { parking_lot->cars[j] = parking_lot->cars[j + 1]; } parking_lot->available_space++; return; } } printf("未找到车辆 %s,无法离开停车场!\n", license); } // 显示停车场信息 void show_parking_lot_info(ParkingLot *parking_lot) { printf("停车场总车位数:%d,当前空闲车位数:%d,停车费率:%.2f元/小时\n", parking_lot->total_space, parking_lot->available_space, parking_lot->fee_rate); } int main() { ParkingLot parking_lot; init_parking_lot(&parking_lot, 100, 5); enter_parking_lot(&parking_lot, "京A12345"); enter_parking_lot(&parking_lot, "京B67890"); show_parking_lot_info(&parking_lot); leave_parking_lot(&parking_lot, "京A12345"); show_parking_lot_info(&parking_lot); return 0; } ``` 以上代码中,我们定义了两个结构体 `Car` 和 `ParkingLot`,分别表示车辆和停车场。在 `main` 函数中,我们先初始化了一个停车场,然后模拟了两辆车进入停车场,并输出了停车场当前的信息。接着,我们让一辆车离开了停车场,并再次输出了停车场的信息。 这只是一个简单的停车场管理系统代码示例,实际的停车场管理系统还需要考虑很多其他因素,比如停车场的收费策略、车辆进出的安全性等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值