数据结构课程设计停车场管理报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
《停车场管理》
班级:
姓名:
学号:
设计日期:2012年7月2日——2012年7月11日
1)需求分析
本次的数据结构课程设计所选的题目是停车场管理系统。根据题目要求,已知停车场是一个可停放n辆汽车的狭长通道,只有一个大门可供汽车出入,由此可将停车场的类型定义为栈,其容量为n。当停车场已经停满n辆车后,后来的车辆只能在便道上等待。当停车场内有车开走,便道上的第一辆汽车便可以进入停车场中。根据其先入先出的特点,可以将便道的类型定义为队列,容量不限。由题目可知,需停车辆的信息包括:车牌号码、汽车“到达”“离去”的信息、“到达”“离去”的时刻等。按照从终端读入的数据序列进行模拟管理。每辆车需要三个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。车辆牌照号码为整型数据,车辆到达或离开的时刻同样为整型数据。输入车辆到达应该输出的信息为:汽车在停车场内或便道上的停车位置;输入车辆离开应该输出的信息为汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
停车场管理系统主要实现以下几个功能:
(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。
(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。实现停车场的调度功能。
该程序设计可以完整的模拟停车场的管理过程。
2)概要设计
停车场管理系统是充分利用数据结构中栈和队列的思想实现的,栈是一种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。栈的主要特点是”后进先出”,即后进栈的元素先处理。停车场的容量即为栈的存储空间,停车场的车辆的停靠是无秩序的,因此采用链式存储的方式更适合,也方便车辆的调度。
队列是限定仅能在表的一端进行插入,在表的另一端进行删除的线性表。队列中可以插入的一端称为队尾,可以删除的一端称为队首。把一个元素插入队列中的操作为进队,队列中删除一个元素的操作为出队。队列存取操作符合:先进先出。停车场的车辆到达停车和车辆的离开的管理方式就是采用队列的“先进先出”的移动的思想。停车场的入口就是队列的队首,停车场的出口就是队列的队尾。
停车场管理系统流程图如图1所示。
、
图1 停车场管理系统流程图
3.详细设计
1.全局变量及编译预处理语句
#define ERROR 0
#define OK 1
#define NULL 0
int count=0; //队列是否为空的标志
int times;
stack s,temp; //初始化栈
LinkQueue Q; //初始化队列
2.车辆信息类型
typedef struct node{
int passport; //存储车辆牌照信息
int time; //存储进场时间信息
}node;
3.栈类型(停车场)
typedef struct stack{
node *base;
node *top;
int stacksize;
}stack;
void initstack(stack &S,int n){ //构造空栈
S.base=(node *)malloc(n*sizeof(node));
S.top=S.base;
S.stacksize=n;
}
void push(stack &S,node e){ //入栈函数
if((S.top-S.base)>=S.stacksize){EnQueue(Q,e);} //如果栈满,调用入队函数else {
S.top->passport=e.passport;
S.top->time=e.time;
S.top++;
}
}
int pop(stack &S,node &e){ //出栈函数
if(S.top==S.base)return ERROR; //如果栈空,返回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,node e){ //入队函数
Qnode *q;
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 &Q,node &e){ //出队函数
if(Q.rear==NULL){}
else {
e.passport=Q.front->Qdata.passport;
e.time=Q.front->Qdata.time;
Q.front=Q.front->next;
if(Q.front==NULL){Q.rear=Q.front;count=0;}
}
}
5.主函数及其他函数的C++算法
void main(){
int n,exit;
float money;
char info;
int pass;
Q.front=NULL ;
Q.rear=(Qnode *)malloc(sizeof(Qnode));
Q.rear->next=Q.rear;
printf("欢迎使用停车场管理系统\n本停车场容量为:");
cin>>n;
initstack(s,n);