C++实现复杂停车场

用C++实现

问题描述
【问题描述】设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入停车场;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时,必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

【实验目的】利用栈和队列解决实际问题。

[实验内容及要求]
l以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:(1) 汽车“到达”(A)或“离去”(D)或“展示当前停车场及便道的信息”(S)信息,(2) 汽车牌照号码(整数),(3)到达或离去的时刻(整数)。
l对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间(单位是小时)和应交纳的费用(在便道上停留的时间不收费),假设停车费为每小时m元。
说明:输入‘A’表示到达(Arrival);‘D’表示离去(Departure);‘S’表示展示当前停车场及便道的信息(Show);‘E’表示程序结束(End)。停车场从北至南的序号依次为1(栈底)~n(栈顶);便道上的停车序号从1(队列头)开始,往后依次增一。到达停车场时,若该车车牌号在停车场或者便道上已经存在,则表示误输入,跳过此次输入。
l等候在便道上的汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。
l栈和队列均采用链表结构实现。
输入
输入数据:

第1行包含两个正整数n和m(n,m<=10)分别表示停车场的容量和每小时停车费用。

从第2行开始,每行表示一组输入数据,由三项内容构成:

(1) 一个大写英文字母,表示汽车“到达”或“离开”信息,输入'A'时,表示汽车达到(Arrival),输入'D'时,表示汽车离开(Departure),输入‘S’时,表示展示当前停车场及便道的停车信息,先展示停车场信息。输入'E'时,表示程序结束(End);

(2) 一个正整数X,表示汽车牌照号;

(3) 一个正整数T,表示汽车到达或离开的时刻。这三项内容之间以一个空格间隔。

输出
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离开,则输出汽车在停车场内停留的时间(单位是小时)和应交纳的费用(在便道上停留的时间不收费),假设停车费为每小时m元。具体分为如下几种情况:
(1)如果汽车X到达,且停车场未满,则输出如下信息:“汽车X停靠在停车场Y号位置”(其中:X为汽车牌照号,Y为停车场车位序号,1≤Y≤n)
(2)如果汽车X到达,但停车场已满,则输出如下信息:“汽车X停靠在便道的Z号位置”(其中:X为汽车牌照号,Z为便道的车位序号,1≤Z)
(3)如果汽车X离开,且X在停车场内,则输出如下信息:“汽车X停车H小时,缴纳停车费M元”(其中:X为汽车牌照号,H为停车时间,M为停车费用)
(3.1)如果此时便道上的停车队列不为空,则将便道上的第一辆汽车停入停车场,并输出如下信息:“汽车X停靠在停车场Y号位置”(其中:X为汽车牌照号,Y为停车场车位序号,1≤Y≤n)

(4)如果汽车X离开,但停车场没有牌照X的汽车,则输出如下信息:“汽车X不在停车场”(其中:X为汽车牌照号)

(5)如果输入S时,停车场内没有车,则输出“此时停车场内没有停靠车辆”,如果有车则先输出“停车场:”再按照停车场由南向北输出停靠的车辆牌照号即可,车辆之间牌照号用空格分开。假设:停车场此时由南向北停靠的车辆车牌为:1 2 3 4 5。则输出“停车场:1 2 3 4 5”。

如果便道内没有车,则输出“此时便道内没有停靠车辆”,如果有车则输出“便道:”再按照便道从前往后的顺序输出停靠的车辆牌照号即可,车辆之间牌照号用空格分开。假设:便道此时从前往后停靠的车辆车牌号为:1 2 3 4 5。则输出“便道:1 2 3 4 5”

样例输入
2 5
A 1 10
A 2 15
A 3 17
A 4 18
A 5 20
D 4 22
D 1 23
S
A 6 25
A 7 30
D 5 31
A 8 33
D 7 40
S
E
样例输出
汽车1停靠在停车场1号位置
汽车2停靠在停车场2号位置
汽车3停靠在便道的1号位置
汽车4停靠在便道的2号位置
汽车5停靠在便道的3号位置
汽车4不在停车场
汽车1停车13小时,缴纳停车费65元
汽车5停靠在停车场2号位置
停车场:5 2
便道:3
汽车6停靠在便道的2号位置
汽车7停靠在便道的3号位置
汽车5停车8小时,缴纳停车费40元
汽车3停靠在停车场2号位置
汽车8停靠在便道的3号位置
汽车7不在停车场
停车场:3 2
便道:8 6