附录 {
int number,time_a; cout<<\车牌为:\ cin>>number;
cout<<\进场的时刻:\ cin>>time_a;
if(st.stacksize_curren<2){ zanInode e;
e.number=number; e.ar_time=time_a;
push(st,e);
cout<< \该车已进入停车场在: \号车道\
} else{
enqueue(q,number,time_a);//插入元素time_a为q的新的队尾元素 cout<<\停车场已满,该车先停在便道的第\个位置上\
} }
void likai(stackhead &st,stackhead &sl,linkqueue &q) //对离开的汽车的处理 { //st堆栈为停车场,sl堆栈为倒车场
int number,time_d,flag=1,money,arrivaltime; //q为便道队列 cout<<\车牌为:\ cin>>number;
cout<<\出场的时刻:\ cin>>time_d; zanInode e,q_to_s;
queueptr w;
while(flag) { //找到要开出的车,并弹出停车场栈 pop(st,e);
push(sl,e);
if(e.number==number) {
flag=0;
money=(time_d-e.ar_time)*2; arrivaltime=e.ar_time;
- 27 -
经济管理学院本科课程设计论文 } }
pop(sl,e); //把临时堆栈的第一辆车(要离开的)去掉; while(sl.stacksize_curren) //把倒车场的车倒回停车场 {
pop(sl,e); push(st,e);
}
if(st.stacksize_curren<2&&q.length!=0)
//停车场有空位,便道上的车开进停车场 {
popqueue(q,w); q_to_s.ar_time=time_d;
q_to_s.number=w->number; push(st,q_to_s);
cout<<\车牌为\的车已从通道进入停车场,所在的停车位为:\
}
cout<<\ 收 据\
cout<<\ ====================== 车牌号: \
cout<<\dl;
cout<<\进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\
cout<<\ndl;
cout<<\ \ | \ | \ | \ |\
cout<<\}
int main()//主函数 {
int m=100;
char flag; //进入或离开的标识;
stackhead sting,slinshi; //停车场和临时倒车场堆栈的定义; linkqueue line; //队列的定义;
- 28 -
附录 initstack(sting); //构造停车场堆栈sting initstack(slinshi); //构造倒车场堆栈slinshi initqueue(line); //构造便道队列line while(m)
{
cout<<\ ** 停车场管理程序 **\ cout<<\=\
cout<<\ **\
cout<<\ A --- 汽车 进 车场 D --- 汽车 出 车场 **\ cout<<\ **\
cout<<\ E --- 退出 程序 **\
cout<<\=\
cout<<\请选择 :(A,D,E): \ cin>>flag; switch(flag)
{
case 'A': jinru(sting,line);break; //汽车进车场 case 'D': likai(sting,slinshi,line);break; //汽车出车场 case 'E': exit(0); } m--; }
return 0; }
- 29 -