// 车辆进入停车场停车 void Park(LinkQueue *wait, LinkQueue *park) {
printf("请输入车号和停车时间\n");
int num, t;
scanf("%d,%d", &num, &t);
if (linklength(*park) >= MAX) { // 如果停车场已满,车辆进入等待区
printf("停车场已满,进入等待区!\n");
enqueue(wait, num, t);
} else { // 否则车辆直接进入停车场
enqueue(park, num, t);
}
}
/*TODO: 功能描述:当停车场内某辆车要离开时,在它之前进入的车辆必须先退出车场为它让路,待该辆车开出大门后,其它让路的车辆再按先出后入的次序重新进入车场,然后便道上的车辆才能进入车场。 每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。 参数说明:*wait-LinkQueue过道的车辆链队列 *park-停车场的车辆链队列 *giveway链栈-车辆离开的时候,用于保存在该车之前的车辆信息 num-int型车辆号 t-int型时间 如果查询到停车场中车辆号,则输入离开的时间printf(“请输入离开时间(以整数输入):\n”); scanf(“%d”,//TODO:车辆离开停车场的时间); 并计算和输出停车费用 停车费=1.2*(离开时间-停入停车场的时间) printf(“序号为%d的车停车时间%d小时,应收费%3.2f元\n”,num,time,fee); 如果停车场中没有输入的车辆号,printf(“查无此车!\n”); */ void Leave(LinkQueue *wait, LinkQueue *park, LinkStack *giveway, int num, int t) {
int flag = 0; // 停车场是否查询到该车辆
QueueNode p = park->front->next;
while (p != NULL) {
if (p->infom.number == num) { // 查询到该车辆
flag = 1;
int fee = (int)((t - p->infom.time) * COST); // 计算停车费用
printf("序号为%d的车停车时间%d小时,应收费%3.2f元\n", num, t-p->infom.time, (float)fee);
pop(giveway, &num, &t); // 出栈,让路
while (giveway->count > 0) { // 将便道上等待的车辆重新进入停车场
pop(giveway, &num, &t);
enqueue(park, num, t);
}
break;
} else {
push(giveway, p->infom.number, p->infom.time); // 将查询不到的车辆入栈,暂时让路
p = p->next;
}
}
if (flag == 0) { // 查询不到该车辆
printf("查无此车!\n");
}
}