收藏 分享(赏)

停车场模拟管理系统实验报告.doc

上传人:精品资料 文档编号:10802561 上传时间:2020-01-10 格式:DOC 页数:17 大小:1.64MB
下载 相关 举报
停车场模拟管理系统实验报告.doc_第1页
第1页 / 共17页
停车场模拟管理系统实验报告.doc_第2页
第2页 / 共17页
停车场模拟管理系统实验报告.doc_第3页
第3页 / 共17页
停车场模拟管理系统实验报告.doc_第4页
第4页 / 共17页
停车场模拟管理系统实验报告.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、1一问题描述1.实验题目:设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端) 。若停车场内已经停满 n辆车,那么后来的车只能在门外的便道上等候。一旦有车开走,则排在便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。试为停车场编制按上述要求进行管理的模拟程序。要求:根据各结点的信息,调用相应的函数或者语句,将结

2、点入栈入队,出栈或者出队。2需求分析1.程序所能达到的基本可能:程序以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。栈以顺序结构实现,队列以链表结构实现。同时另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。输入数据按到达或离去的时刻有序。当输入数据包括数据项为汽车的“到达” (A表示)信息,汽车标识(牌照号)以及到达时刻时,应输出汽车在停车场内或者便道上的停车位置;当输入数据包括数据项为汽车的“离去” (D表示)信息,汽车标识(牌照号)以及离去时刻时,应输出汽车在停车场停留的时间和应缴纳的费用(便道上停留的时间不收费) ;当输入数据项为(P ,0,

3、0)时,应输出停车场的车数;当输入数据项为(W, 0, 0)时,应输出候车场车数;当输入数据项为(E, 0, 0) ,退出程序;若输入数据项不是以上所述,就输出“ERROR!“。2.输入输出形式及输入值范围:程序运行后进入循环,显示提示信息:“Please input the state,number and time of the car:”,提示用户输入车辆信息( “到达”或者“离开” ,车牌编号,2到达或者离开的时间) 。若车辆信息为“到达” ,车辆信息开始进栈(模拟停车场) ,当栈满,会显示栈满信息:“The parking place is full!”,同时车辆进队列(模拟停车场旁

4、便道) ,并显示该进入便道车辆的车牌编号,让用户知道该车的具体位置;若车辆信息为“离开” ,会显示该车进入停车场的时间以及相应的停车费用,若该车较部分车早进停车场,这部分车需先退出停车场,暂时进入一个新栈为其让道,会显示进入新栈的车辆的车牌编号及其入停车场的时间,当待离开车离开停车场后,这部分车会重新进入停车场,同时便道上的第一辆车进入停车场;若输入(P ,0,0) ,会显示停车场的车数;若输入(W ,0,0) ,会显示便道上的车数;若输入(E ,0, 0) ,程序会跳出循环,同时程序结束;若输入为其他字母,程序会显示“ERROR!”报错。若便道上没有车辆停靠,会显示便道为空的信息:用户每输入

5、一组数据,程序就会根据相应输入给出输出。输入值第一个必须为字母,后两个为数字。三概要设计为了实现上述功能,该程序以栈模拟停车场以及临时停放为给要离去的汽车让路而从停车场退出来的汽车的场地,以队列模拟车场外的便道,因此需要栈和队列这两个抽象数据类型。1.栈抽象数据类型定义:ADT SqStack数据对象:D= , chardcbadcbiiiiii nt,t,nt,|,i=1,2,3,n,n 0数据关系:R=( )| D, struct car;ii,i, ii,基本操作:Judge_Output(s,q,r);/根据 r 中车辆信息控制车辆是入栈 s 还是 入队 q 以及相关操作A_cars(

6、s,q, a);/将到达车辆 a 的信息入栈 s 或者入队 qD_cars(s,q, d);/将待离开车辆 d 出栈 s,并将 q 中相应车辆入栈并进行相关的操作ADT SqStack32.队列抽象数据类型定义:ADT LinkQueue数据对象:D= Qnode *, Qnode iiacb|,ib*, ,i=1,2,3,n,n ;nti 0数据关系:R= ;基本操作:Judge_Output(s,q,r);/根据 r 中车辆信息控制车辆是入栈 s还是入队 q 以及相关操作A_cars(s,q, a);/将到达车辆 a 的信息入栈 s 或者入队 qD_cars(s,q, d);/将待离开车辆

7、 d 出栈 s,并将 q 中相应车辆入栈并进行相关的操作ADT LinkQueue 3.主要算法流程图:IJudge_Output 算法流程图:4开始输入为 E ( e )输入为 P ( p )输入为 W ( w )输入为 A ( a )输入为 D ( d )输出“ S T O P ! ”输出停车场车辆的数目输出便道上车辆数目调用 A _ c a r s函数调用 D _ c a r s函数结束FTTFTFTFIIA_cars 算法流程图:5开始停车场未满车进停车场车进便道结束TFIII D_cars 算法流程图:开始该车是最后进停车场的车在该车后进的车退出停车场后让其结账离开结账离开便道上有车

8、便道上第一辆车进停车场结束TFTF64.本程序保护模块:主函数模块栈单元模块:实现栈的抽象数据类型队列单元模块:实现队列的抽象数据类型调用关系:主函数模块栈单元模块队列单元模块四详细设计1.相关头文件库的调用说明:#include #include#define MAXSIZE 14#define n 2#define fee 102.元素类型、结点类型和结点指针类型:struct car char bb;int num;int time;struct rangweicarint num;int time;typedef struct stackkstruct rangweicar HMAXS

9、IZE;int topp;7SqStackk;#define QNODE struct QnodeQNODE int data;QNODE *next;3.栈类型和队列类型:typedef struct stackstruct car Gn;int top;SqStack;typedef struct linkqueueQNODE *front,*rear;int geshu;LinkQueue;/部分基本操作的伪码实现void Judge_Output(SqStack *s,LinkQueue *q,struct car *r)if(*r).bb=E|(*r).bb=e)printf(“ST

10、OP!n“);else if(*r).bb=P|(*r).bb=p)printf(“The number of parking cars is %dn“,(s-top)+1);else if(*r).bb=W|(*r).bb=w)printf(“The number of waiting cars is %dn“,q-geshu);else if(*r).bb=A|(*r).bb=a)A_cars(s,q,*r);else if(*r).bb=D|(*r).bb=d)D_cars(s,q,*r);elseprintf(“ERROR!n“);8A_cars(SqStack *s,LinkQueu

11、e *q,struct car a)QNODE *t;if(s-top!=n-1)(s-top)+;(s-Gs-top).bb=a.bb;(s-Gs-top).num=a.num;(s-Gs-top).time=a.time;elseprintf(“The parking place is full!n“);t=(QNODE *)malloc(sizeof(QNODE);t-data=a.num;t-next=NULL;q-rear-next=t;q-rear=t;printf(“the number of the car in the access road is:%dn“,q-rear-d

12、ata);q-geshu+;int D_cars(SqStack *s,LinkQueue *q,struct car d)int i,j,l;float x,y;QNODE *p;SqStackk *k;if(d.num=(s-Gs-top).num)x=d.time-(s-Gs-top).time;y=fee*x;printf(“The time is %.2f hours,the fee is %.2f yuann“,x,y);if(q-geshu=0)printf(“The queue is empty!n“);9return 0;elsep=q-front-next;q-front-

13、next=p-next;(s-Gs-top).num=p-data;(s-Gs-top).time=d.time;free(p);q-geshu-;if(q-front-next=NULL)q-rear=q-front;return 1;elsefor(i=0;itop);i+)if(s-Gi).num!=d.num) continue;else break;if(i=(s-top)printf(“ERROR!n“);return -1;x=d.time-(s-Gi).time;y=fee*x;printf(“The time is %.2f hours,the fee is %.2f yua

14、nn“,x,y);k=(SqStackk *)malloc(sizeof(SqStackk);k-topp=-1;for(j=(s-top);ji;j-)k-topp+; (k-Hk-topp).num=(s-Gj).num;(k-Hk-topp).time=(s-Gj).time;10s-top-;for(l=0;ltopp);l+)printf(“the information(number and time) in the new stack is:n“);printf(“%d,%dn“,(k-Hl).num,(k-Hl).time);s-top-;while(k-topp=0)s-to

15、p+;(s-Gs-top).bb=A;(s-Gs-top).num=(k-Hk-topp).num;(s-Gs-top).time=(k-Hk-topp).time;k-topp-;if(q-geshu=0)printf(“The access road is empty!n“);return 2;elses-top+;p=q-front-next;q-front-next=p-next;(s-Gs-top).num=p-data;(s-Gs-top).time=d.time;free(p);q-geshu-;if(q-front-next=NULL)q-rear=q-front;return

16、 3;114.主函数的伪码:main()SqStack *s;LinkQueue *q;QNODE *p;struct car aaMAXSIZE;int i;s=(SqStack *)malloc(sizeof(SqStack);s-top=-1;q=(LinkQueue *)malloc(sizeof(LinkQueue);p=(QNODE *)malloc(sizeof(QNODE);p-next=NULL;q-front=q-rear=p;q-geshu=0;printf(“*n“);printf(“* *n“);printf(“* 停车场管理系统 *n“);printf(“* *n“

17、);printf(“*n“);for(i=0;i /*调用的头文件库声明*/#include#define MAXSIZE 14#define n 2#define fee 10struct car /*用该结构体来存放车的状态,编号和时间信息 */ char bb;int num;int time;typedef struct stack /*用该栈来模拟停车场*/struct car Gn;int top;SqStack;struct rangweicar /*用该结构体来存放临时让出的车辆的编号以及时间信息*/int num;int time;typedef struct stack /

18、*用该栈来模拟临时让出的车辆的停靠场地 */struct rangweicar HMAXSIZE;int topp;SqStackk;#define QNODE struct QnodeQNODE int data; /*链队结点的类型*/QNODE *next;typedef struct linkqueue /*用该链队来模拟便道*/QNODE *front,*rear;int geshu;LinkQueue;void Judge_Output(SqStack *s,LinkQueue *q,struct car *r) /*该算法通过传递来的车辆信息调 用相关函数实现操作*/if(*r)

19、.bb=E|(*r).bb=e) /*若车辆状态为E ,终止程序*/printf(“STOP!n“);else if(*r).bb=P|(*r).bb=p) /*若车辆状态为P ,输出停车场车辆数*/printf(“The number of parking cars is %dn“,(s-top)+1);else if(*r).bb=W|(*r).bb=w) /*若车辆状态为 W,输出便道车辆数*/printf(“The number of waiting cars is %dn“,q-geshu);else if(*r).bb=A|(*r).bb=a) /*若车辆状态为 A,调用 A_ca

20、rs 函数*/A_cars(s,q,*r); else if(*r).bb=D|(*r).bb=d) /*若车辆状态为D ,调用 D_cars 函数*/15D_cars(s,q,*r);elseprintf(“ERROR!n“); /*若车辆状态为其他字母,报错*/A_cars(SqStack *s,LinkQueue *q,struct car a) /*该算法实现对车辆状态为到达的车辆的操QNODE *t; 作*/if(s-top!=n-1) /*若停车场还没有满,则车进停车场,并存入车辆的状态,车牌编(s-top)+; 号和到达时间信息*/(s-Gs-top).bb=a.bb;(s-Gs

21、-top).num=a.num;(s-Gs-top).time=a.time;elseprintf(“The parking place is full!n“); /*若停车场已满,车进便道,并显示该车的车牌编t=(QNODE *)malloc(sizeof(QNODE); 号,同时记录便道车辆数目 */t-data=a.num;t-next=NULL;q-rear-next=t;q-rear=t;printf(“the number of the car in the access road is:%dn“,q-rear-data);q-geshu+;int D_cars(SqStack *

22、s,LinkQueue *q,struct car d) /*该算法实现车辆状态为离开的车int i,j,l; 辆的操作*/float x,y;QNODE *p;SqStackk *k;if(d.num=(s-Gs-top).num) /*若待离开车为最后进停车场的车的情况*/x=d.time-(s-Gs-top).time; y=fee*x; /*直接计算停车时间,费用并离去*/printf(“The time is %.2f hours,the fee is %.2f yuann“,x,y);if(q-geshu=0) /*若便道上无车,函数返回*/printf(“The queue is

23、 empty!n“);return 0;Else /*若便道上有车,第一辆车进停车场*/p=q-front-next;q-front-next=p-next;(s-Gs-top).num=p-data; /*并存入其车牌编号及进停车场的时间*/(s-Gs-top).time=d.time;free(p);16q-geshu-;if(q-front-next=NULL) q-rear=q-front; /*若此时便道上无车,返回 1*/return 1;Else /*待离开的车不是最后进停车场的那辆车的情况*/for(i=0;itop);i+) /*先找到待离开车在停车场中的位置 */if(s-

24、Gi).num!=d.num) continue;else break;if(i=(s-top)printf(“ERROR!n“);return -1;x=d.time-(s-Gi).time; /*计算待离开车的停车时间并计算费用 */y=fee*x; printf(“The time is %.2f hours,the fee is %.2f yuann“,x,y);k=(SqStackk *)malloc(sizeof(SqStackk); /*设立一个新栈临时停放为该车离开而让k-topp=-1; 路的车辆 */for(j=(s-top);ji;j-)k-topp+; (k-Hk-to

25、pp).num=(s-Gj).num;(k-Hk-topp).time=(s-Gj).time;s-top-;for(l=0;ltopp);l+)printf(“the information(number and time) in the new stack is:n“); printf(“%d,%dn“,(k-Hl).num,(k-Hl).time); /*显示在新栈中的车辆信息*/s-top-;while(k-topp=0) /*将新栈中的车重新开入停车场中*/s-top+;(s-Gs-top).bb=A;(s-Gs-top).num=(k-Hk-topp).num;(s-Gs-top)

26、.time=(k-Hk-topp).time;k-topp-;if(q-geshu=0) /*若便道上无车,则返回 2,无车开入停车场中*/printf(“The access road is empty!n“);return 2;Else /*若便道上有车,则第一辆车开入停车场中*/s-top+;p=q-front-next;q-front-next=p-next;(s-Gs-top).num=p-data;17(s-Gs-top).time=d.time;free(p);q-geshu-;if(q-front-next=NULL)q-rear=q-front;return 3;main()

27、SqStack *s;LinkQueue *q;QNODE *p;struct car aaMAXSIZE;int i;s=(SqStack *)malloc(sizeof(SqStack); /*对停车场初始化*/s-top=-1;q=(LinkQueue *)malloc(sizeof(LinkQueue); p=(QNODE *)malloc(sizeof(QNODE); /*对便道初始化 */p-next=NULL;q-front=q-rear=p;q-geshu=0;printf(“*n“);printf(“* *n“);printf(“* 停车场管理系统 *n“);printf(“* *n“);printf(“*n“);for(i=0;iMAXSIZE;i+) /*输入车辆信息*/printf(“Please input the state,number and time of the car:n“);scanf(“%c,%d,%d“,getchar();Judge_Output(s,q,if(aai.bb=E) break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报