1、 数据结构课程设计 停车场管理 班级: 姓名: 学号: 设计日期:2012 年 7 月 2 日2012 年 7 月 11 日 1) 需求分析需求分析 本次的数据结构课程设计所选的题目是停车场管理系统。 根据题目要求, 已知停车场是一 个可停放 n 辆汽车的狭长通道, 只有一个大门可供汽车出入, 由此可将停车场的类型定义为 栈,其容量为 n。当停车场已经停满 n 辆车后,后来的车辆只能在便道上等待。当停车场内 有车开走,便道上的第一辆汽车便可以进入停车场中。根据其先入先出的特点,可以将便道 的类型定义为队列,容量不限。由题目可知,需停车辆的信息包括:车牌号码、汽车“到达” “离去”的信息、 “到
2、达” “离去”的时刻等。按照从终端读入的数据序列进行模拟管理。每 辆车需要三个数据,其中车辆数据为:A 表示到达,D 表示离去,E 表示程序结束。车辆牌 照号码为整型数据, 车辆到达或离开的时刻同样为整型数据。 输入车辆到达应该输出的信息 为: 汽车在停车场内或便道上的停车位置; 输入车辆离开应该输出的信息为汽车在停车场内 停留的时间和应交纳的费用(在便道上停留的时间不收费)。 停车场管理系统主要实现以下几个功能: (1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。 (2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。 (3)当有车辆从停车场离开时,等待的车辆按
3、顺序进入停车场停放。实现停车场的调度 功能。 该程序设计可以完整的模拟停车场的管理过程。 2 2) 概要设计概要设计 停车场管理系统是充分利用数据结构中栈和队列的思想实现的, 栈是一种只能在叫做栈的一 段进行进栈或者出栈操作的线性数据结构。栈的主要特点是”后进先出”,即后进栈的元素先 处理。停车场的容量即为栈的存储空间,停车场的车辆的停靠是无秩序的,因此采用链式存 储的方式更适合,也方便车辆的调度。 队列是限定仅能在表的一端进行插入, 在表的另一端进行删除的线性表。 队列中可以插入的 一端称为队尾,可以删除的一端称为队首。把一个元素插入队列中的操作为进队,队列中删 除一个元素的操作为出队。队列
4、存取操作符合:先进先出。停车场的车辆到达停车和车辆的 离开的管理方式就是采用队列的 “先进先出” 的移动的思想。 停车场的入口就是队列的队首, 停车场的出口就是队列的队尾。 停车场管理系统流程图如图 1 所示。 车辆过闸 入口 出口 开闸 关闸 、 图 1 停车场管理系统流程图 3.详细设计详细设计 1.全局变量及编译预处理语句 #define ERROR 0 #define OK 1 #define NULL 0 int count=0; /队列是否为空的标志 int times; stack s,temp; /初始化栈 LinkQueue Q; /初始化队列 2 车辆信息类型 typede
5、f struct node int passport; /存储车辆牌照信息 int time; /存储进场时间信息 node; 3栈类型(停车场) typedef struct stack node *base; node *top; int stacksize; stack; void initstack(stack S.top=S.base; S.stacksize=n; void push(stack /如果栈满,调用入队函数 else S.top-passport=e.passport; S.top-time=e.time; S.top+; int pop(stack /如果栈空,返回
6、 ERROR -S.top; e.passport=S.top-passport; e.time=S.top-time; return OK; 4队列类型(便道) typedef struct Qnode node Qdata; struct Qnode *next; Qnode; typedef struct Qnode *front; Qnode *rear; LinkQueue; void EnQueue(LinkQueue q=(Qnode *)malloc(sizeof(Qnode); q-Qdata.passport=e.passport; q-Qdata.time=e.time; q-next=NULL; if(count=0)Q.front=q;count+; /若创建节点前队空,头指针指向节点 Q.rear-next=q; Q.rear=q; void DeQueue(LinkQueue e.time=Q.front-Qdata.time; Q.fr