1、课程设计报告课程设计报告 一、一、需求分析需求分析 1、以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模 拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以 及到达或离去的时刻。 2、 用户输入汽车信息后, 程序对每一组输入数据进行操作后的输出信息为: 若是车辆到达, 则输出汽车在停车场内或便到上的停车位置; 若是车辆离去, 则输出汽车在停车场内停留的 时间和应缴纳的费用(在便道上停留的时间不收费) 。 3、本程序要求栈以顺序结构实现,队列以链表结构实现。 4、测试数据: 设 n=2,输入数据为: ( “A” ,1,5) , ( “A”
2、,2,10) , ( “D” ,1,15) , ( “A”3,20) , ( “A” ,4,25) , ( “A” ,5,30) , ( “D” ,2,35) , ( “D” ,4,40) , ( “E” ,0,0) 。 其中: “A”表示到达(Aiiival) ; “D”表示离去(Departure) ; “E”表示输入结束(End) 。 5、程序执行的命令为: 1)创建停车场;2)创建便到;3)执行对车辆的运算;4)输出所需的数据。 二、概要设计二、概要设计 1、设定栈的抽象数据类型定义: ADT Stack 数据对象:D=aiaiCharSet,i=1,2,n,n0 数据关系:R1=a(
3、i-1),aiD,i=2,n 基本操作: InitStack(/汽车车号 int ar_time;/汽车到达时间 CarNode; 2、栈类型 typedef struct/停车场 CarNode *base;/停车场的堆栈底 CarNode *top;/停车场的堆栈顶 int stacksize; Park; 栈的基本操作设置如下: V oid InitStack(Stack P.stacksize=0; void Push(Park P.top+; +P.stacksize; void Pop(Park e=*P.top; -P.stacksize; 3、队列类型 typedef stru
4、ct Car2 /车 int number;/汽车车号 int ar_time;/汽车到达时间 struct Car2 *next; *CarPtr; typedef struct /便道 CarPtr front;/便道的队列的对头 CarPtr rear;/便道的队列的队尾 int length; Shortcut; 队列的基本操作设置如下: Status TnitQueue(LinkQueue /否则返回 ERROR Status QueueTraverse(LinkQueue Q,visit() /从队头到队尾依次对队列 Q 中每个元素调用函数 visit(),一旦 visit 失败,
5、则操 作失败。 其中部分操作的算法: void InitQueue(Shortcut S.front-next=NULL; S.length=0; void EnQueue(Shortcut p=(CarPtr)malloc(sizeof(Car2); p-number=number; p-ar_time=ar_time; p-next=NULL; S.rear-next=p; /相连 S.rear=p; +S.length; void DeQueue(Shortcut S.front-next=S.front-next-next; -S.length; 4、停车场、便道的类型 其中部分操作的
6、算法: void Arrival(Park printf(“请输入车牌号:“); scanf(“%d“, printf(“进场的时刻:“); scanf(“%d“, if(P.stacksizenumber; Push(P,m); free(w); printf(“车牌号为%d 的车已由便道进入停车场n“,m.number); printf(“停车费为%d, 停车时间为%dn“,money,times); else printf(“停车场不存在牌号为%d 的车,在便道上找n“, number); c = S.front; if(S.length!=0) while(c-next!= NULL) if(c-next-number = number) printf(“%d车 从便道上离开,停留时 间 %dn“,c-next-number,le_time -c-next-ar_time); c-next = c-next-n