停车场管理课程设计报告经济管理学院本科课程设计论文数据结构课程设计学号:姓名:班级:专业:信息管理与信息系统系别: 管理系指导教师:2011 年 1 月 14日吉林目录目录第1章需求分析 (1)1.1停车场管理问题 (1)1.1.1问题描述 (1)1.1.2实现要求 (1)1.1.3实现提示 (1)1.2功能描述 (1)1.3模块描述 (2)第2章概要设计 (2)2.1设计思想 (2)2.2实现方法 (2)2.3程序中的函数 (3)第3章详细设计 (4)第4章调试分析 (13)4.1主窗口界面 (13)4.2停车界面 (14)4.3出车界面 (15)4.4退出程序界面 (15)第5章课设总结 (16)5.1收获 (16)5.2问题 (16)第1章需求分析随着改革开放的深入,中国不断的发展,人们生活水平的不断提高,拥有汽车的人越来越多,在什么地方停车成了一个问题,因此停车场建立起来,但是车辆众多,需要对汽车进出停车场进行规范化的管理,才能使停车场发挥其作用。
1.1停车场管理问题1.1.1问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n 辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
1.1.2实现要求要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
1.1.3实现提示汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。
例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。
整个程序可以在输入信息为(‘E’,0,0)时结束。
1.2功能描述根据需要,本系统应具有以下功能:1. 汽车进入停车场停车2. 汽车从停车场离开3. 汽车在便道上等待进入停车场停车4. 根据汽车在停车场内停车时间进行计费1.3模块描述主要分为下面的模块:定义用来模拟停车场的栈以及用来模拟便道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用print ()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开以及退出程序这三个函数模块。
第2章概要设计2.1设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。
2.2实现方法对于此停车场管理系统的实现,就是用两个栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。
当汽车要进入停车场前,先要检查停车场内是否还有空余的车位,如果还有空余的车位则车辆进入停车场;如果停车场已经满了,那么车辆进入停车场外的便道的等待队列。
当汽车要离开停车场,在他之后的停的车都必须退出停车场为它让路,然后这辆车再出栈,退出的车辆再按原来的顺序进入停车场。
检查停车场外的便道上是否有等待的车辆,如果有,则在队首的车辆进入停车场。
1.用栈模拟停车场,用队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
2.每一组输入数据包括三个数据项:汽车到达或离去的信息,汽车牌照号码以及到达或离去的时刻。
3.每次输入完进行输出操作:若是车辆到达,输出汽车在停车场内或便道上的停车位置;若是车辆离去,对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。
(在便道上停留的时间不收费)。
2.3程序中的函数1.定义栈(停车场) struct stack初始化栈void initstack(stack* s)元素进栈int push(stack* s,cinfo x)元素出栈cinfo pop(stack* s)2.定义队列(车场外的便道)struct queue初始化队列void initqueue(queue* q)元素进队列void inqueue(queue* q,int num1)元素出队列int outqueue(queue* q)3.处理车辆到达的情况void carrival(stack* s,queue* q,cinfo x)处理车辆离开void carleave(stack* s1,stack* s2,queue* q,cinfo x)4.主窗口 void print()5.主程序void main()第3章详细设计#include<iostream.h>#include<stdlib.h>int N;const int rate=10;//M为单元时间的收费值struct cinfo//定义栈中元素的类型{int cnum;int atime;};struct stack//定义栈{cinfo cstack[3000];//这里随便定义一个数字表示数组的长度,因为后int top; //面会根据用户输入的N值作为停车场能够停车的int size; //栈的大小};struct node//定义队列节点的类型{node* next;int nnum;};struct queue//定义队列{node *front,*rear;};void initstack(stack *s)//初始化栈{s->top=-1;}int push(stack* s,cinfo x)//元素进栈{ //int 元素进栈n;if(s->top==N-1){cout<<"栈满!"<<endl;return 0;}else{s->cstack[++s->top]=x;return 1;}}cinfo pop(stack* s)//元素出栈{cinfo y;if(s->top<0){um=NULL;y.atime=NULL;return y;}else{s->top--;return s->cstack[s->top+1];}}void initqueue(queue* q)//初始化队列{q->front=new node;q->rear=q->front;q->front->next=NULL;q->front->nnum=0;}void inqueue(queue* q,int num1)//元素进队列{node* p;p=new node;p->nnum=num1;p->next=NULL;q->rear->next=p;q->rear=p;q->front->nnum++;}int outqueue(queue* q)//元素出队列{node* p;int n;if(q->front==q->rear) return 0;else{p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;n=p->nnum;delete p;q->front->nnum--;return n;}}void carrival(stack* s,queue* q,cinfo x) //处理车辆到达的情况{int f;f=push(s,x);if(f==0){inqueue(q,um); //进入队列cout<<"车号为"<<um;cout<<"的车停在第"<<q->front->nnum;cout<<"个便道的位置"<<endl;}else //进入栈{cout<<"车号为"<<um;cout<<"的车停在第"<<s->top+1;cout<<"个车位"<<endl;}}void carleave(stack* s1,stack* s2,queue* q,cinfo x) //处理车辆离开{node* p;cinfo y;int a,n=0;while((s1->top>-1)&&(n==0)){y=pop(s1);if(um!=um){a=push(s2,y);}elsen=1;}if(um==um) //查找要离开的车辆{cout<<"车号为"<<um;cout<<"要离开,应收费"<<" "<<(x.atime-y.atime)*rate;cout<<"元。
"<<endl;while(s2->top>-1){y=pop(s2);n=push(s1,y);}a=outqueue(q);if(a!=0){um=a;y.atime=x.atime;n=push(s1,y);cout<<"车号为"<<um;cout<<" "<<"的车辆将要进入第"<<s1->top+1;cout<<" "<<"个车位。