停车场管理实验报告

  • 格式:docx
  • 大小:170.80 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

问题需求分析

问题描述

设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可以供车辆进出。车辆按到达停车场时间的早、晚依次从停车场最里向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,那么,后面进入停车场的车只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且在便道上等待的车辆依然保持原有次序不变。

设计一个程序,模拟此停车场管理。

需求分析

停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。停车场的管理流程如下:

①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。

②当车辆要求出栈时,该车到栈顶的那些车辆先进入辅助栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队头取出一辆车压入栈中。

用栈模拟停车场,用队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车到达或离去的信息,汽车牌照号码以及到达或离去的时刻。每次输入完,进行输出操作:若是车辆到达,输出汽车在停车场内或便道上的停车位置;若是车辆离去,输出停留时间和应缴纳的费用(在便道上停留的时间不收费)。其中栈以顺序结构实现,队列以链表结构实现。

算法与数据结构的设计

算法设计

停车

车离开停车场

算法的精华与程序的实现(程序实现的核心算法)

停车函数

void car_come(PSTOPPING stop,PPA VEMENT pave,char *plate,char *in_time) /*来车函数*/

{

if(stop->top!=MAX_STOP-1)

{

stop->top++;

stop->STOP[stop->top].license_plate=plate;

stop->STOP[stop->top].in_time=in_time;

stop->STOP[stop->top].state='S';

printf("请您停放在%d号车位!您的入场时间

为:%s\n",stop->top+1,stop->STOP[stop->top].in_time);

}

else

{

pave->PA VE[pave->rear].license_plate=plate;

pave->PA VE[pave->rear].in_time=in_time;

pave->PA VE[pave->rear].state='P';

printf("停车位已满!请在便道等待!您的入场时间

为:%s\n",pave->PA VE[pave->rear].in_time);

pave->rear=(pave->rear+1)%MAX_PA VE;

}

}

离开函数

void stop_to_buff(PSTOPPING stop,PBUFFER buff,int pos) /*暂入辅助栈函数*/

{

buff->top++;

buff->BUFF[buff->top].license_plate=stop->STOP[pos].license_plate;

buff->BUFF[buff->top].in_time=stop->STOP[pos].in_time;

stop->top--;

printf("牌照为%s的汽车暂时退出停车位!\n",stop->STOP[pos].license_plate);

}

void buff_to_stop(PSTOPPING stop,PBUFFER buff,int pos) /*由辅助栈返回停车位函数*/

{

stop->top++;

stop->STOP[pos].license_plate=buff->BUFF[buff->top].license_plate;

stop->STOP[pos].in_time=buff->BUFF[buff->top].in_time;

stop->STOP[pos].state='S';

buff->top--;

printf("牌照为%s的汽车停回停车位的%d车位!

\n",stop->STOP[pos].license_plate,pos+1);

}

void pave_to_stop(PSTOPPING stop,PPA VEMENT pave) /*由便道进入停车位函数*/

{

stop->top++;

stop->STOP[stop->top].license_plate=pave->PA VE[pave->front].license_plate;

stop->STOP[stop->top].in_time=pave->PA VE[pave->front].in_time;

stop->STOP[stop->top].state='S';

printf("牌照为%s的汽车从便道上进入停车位的%d车位!

\n",pave->PA VE[pave->front].license_plate,MAX_STOP);

pave->front=(pave->front+1)%MAX_PA VE;

}

查找函数

void show_car(PSTOPPING stop,PPA VEMENT pave,char *plate) /*查找并显示信息函数*/

{

int i,j;

for(i=0;i<=stop->top;i++)

if(!strcmp(stop->STOP[i].license_plate,plate)) break;//栈内假如得到寻找的车牌号就跳出

if(i==stop->top+1)

{

for(j=(pave->front)%MAX_PA VE;jrear;j++)

if(!strcmp(pave->PA VE[j].license_plate,plate)) break;

}

if(itop+1)

printf("您的汽车%s位于停车位的%d车位!\n\n",plate,i+1);

else

{

if(jrear)

printf("您的汽车位于便道的%d位置!\n\n",j-(pave->front)%MAX_PA VE+1);

else

printf("对不起,停车场中无此车!\n\n");

}

}