数据结构课程设计停车场管理_大数据停车场管理系统
数据结构课程设计停车场管理由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“大数据停车场管理系统”。
课 程 设 计 报 告
课程名称
数据 结构
题
目
停车场管理
学生姓名 班级/学号 191103
一、需求分析
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供
汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
【测试数据】
设n=2,输入数据为:(’A’,1,5),(’A’,2,10),(’D’,1,15),(’A’,3,20),(’A’,4,25),(’A’,5,30),(’D’,2,35),(’D’,4,40),(’E’,0,0)。其中:’A’表示到达;’D’表示离去;’E’表示输入结束。概要设计
以栈模拟停车场,以队列模拟车场外的便道。栈以顺序结构实现。队列以链表结构实现。每一组输入数据包括:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
输出信息:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
二、详细设计
三、程序设计
1.数据结构设计 /*栈,模拟停车场*/ typedef struct Car1 {
//车
int number;//汽车车号
int ar_time;//汽车到达时间 }CarNode;
typedef struct {
//停车场
CarNode *base;//停车场的堆栈底
CarNode *top;//停车场的堆栈顶
int stacksize;}Park;
/*队列,模拟便道*/ typedef struct Car2 {
//车
int number;//汽车车号
int ar_time;//汽车到达时间
struct Car2 *next;}*CarPtr;
typedef struct {
//便道
CarPtr front;//便道的队列的对头
CarPtr rear;//便道的队列的队尾
int length;}Shortcut;2.程序设计
主函数中包括3个子函数,A(arrive),D(depart),E(end)
(1)输入车辆数据:A为到达,D为离去,E为结束程序。
(2)接着输入车辆的牌照信息
(3)若为到达的车辆,输入进场信息,若为离去的车辆,输入离场信息。(4)若车辆到达,可得到车辆的停放位置信息,若车辆离去,可得到车辆的停放时间(在便道上的停放时间除外),以及应该交纳的费用。
(5)本程序不断循环要求输入车辆信息,直到输入的车辆数据为E时,程序结束。
四、调试分析
a、一开始在调试程序时遇到了内存错误,经过DEBUG,找到了引起内存错误的原因:即在建立队头指针与队尾指针时没有对指针进行初始化(没有为指针动态分配空间)。问题得到解决。
b、本程序中:车辆到达,离去时的时间复杂度均为:O(n)。本程序空间复杂度为:O(n)
五、使用说明和测试结果
1.使用说明:用户按照屏幕所显示的提示来选择需要进行操作
2、测试结果:
测试结果满足题目要求,程序无错误。
六、心得体会
通过此实验,加深了我对数据结构这门课的理解,真正运用了知识。将理论与现实完美的联系在了一起。增强了动手能力,对今后的工作学习都有很大的帮助。单调的看书本没有太大的作用,只有去编程才能理解究竟学习的作用。同时,编程过程中遇到过各种各样的问题,与同学讨论,与老师交流。锻炼了我的协做能力与克服困难的能力。编程也极大的提高了我的学习积极性。
七、附录
#include #include #include #define SIZE 2//停车场位置数,共5个车位 typedef int Status;
/*栈,模拟停车场*/ typedef struct Car1 {
//车
int number;//汽车车号
int ar_time;//汽车到达时间 }CarNode;
typedef struct {
//停车场
CarNode *base;//停车场的堆栈底
CarNode *top;//停车场的堆栈顶
int stacksize;
}Park;
/*队列,模拟便道*/ typedef struct Car2 {
//车
int number;//汽车车号
int ar_time;//汽车到达时间
struct Car2 *next;}*CarPtr;
typedef struct {
//便道
CarPtr front;//便道的队列的对头
CarPtr rear;//便道的队列的队尾
int length;}Shortcut;/*初始化停车场*/ Status InitStack(Park &P){
P.base=(CarNode*)malloc(SIZE*sizeof(Car1));
if(!P.base)exit(-2);
P.top=P.base;
P.stacksize=0;
return 1;}
Status Push(Park &P,CarNode e){//车进入停车场
*P.top++=e;
++P.stacksize;
return 1;}
Status Pop(Park &P,CarNode &e){//车离开停车场
if(P.top==P.base)
printf(“停车场为空”);
else
{
e=*--P.top;
--P.stacksize;
}
return 1;} /*初始化便道*/ Status InitQueue(Shortcut &S){
S.front=S.rear=(CarPtr)malloc(sizeof(Car2));
if(!S.front||!S.rear)exit(-2);
S.front->next=NULL;
S.length=0;
return 1;}
Status EnQueue(Shortcut &S,int number,int ar_time){//车进入便道
CarPtr p;
p=(CarPtr)malloc(sizeof(Car2));
if(!p)exit(-2);
p->number=number;
p->ar_time=ar_time;
p->next=NULL;
S.rear->next=p;
S.rear=p;
++S.length;
return 1;}
Status DeQueue(Shortcut &S,CarPtr &w){//车离开便道
if(S.length == 0)
printf(“通道为空”);
else
{
w = S.front->next;
S.front->next=S.front->next->next;
--S.length;
}
return 1;}
Status Arrival(Park &P,Shortcut &S){//对进站车辆的处理
int number,ar_time;
printf(“请输入车牌号:”);
scanf(“%d”,&number);
printf(“进场的时刻:”);
scanf(“%d”,&ar_time);
if(P.stacksize
{
CarNode c;
c.number=number;
c.ar_time=ar_time;
Push(P,c);
printf(“请将车停在第%d号车道。n”,P.stacksize);
}
else
{
EnQueue(S,number,ar_time);
printf(“停车场已满,请暂时停在便道的第%d个位置。n”,S.length);
}
return 1;}
Status Leave(Park &P,Park &P1,Shortcut &S){//对离站车辆的处理
int number,le_time,flag=1,money,ar_time;
printf(“请输入车牌号:”);
scanf(“%d”,&number);
printf(“出场的时刻:”);
scanf(“%d”,&le_time);
CarNode e,m;
CarPtr w;
while(P.stacksize)
{
Pop(P,e);
if(e.number==number)
{
flag=0;
money=(le_time-e.ar_time)*2;
ar_time=e.ar_time;
break;
}
Push(P1,e);
}
while(P1.stacksize)
{
Pop(P1,e);
Push(P,e);
}
// 车从停车场中出
if(flag == 0)
{
if(S.length!=0)
{
DeQueue(S,w);
m.ar_time=le_time;
m.number=w->number;
Push(P,m);
free(w);
printf(“车牌号为%d的车已由便道进入停车场n”,m.number);
}
printf(“停车费为%d, 占用车位数为%dn”,money,P.stacksize);
}
else
{
printf(“停车场不存在牌号为%d的车n”, number);
}
return 1;} /*主函数*/ int main(){
int m=1;
char flag;//选项
Park P,Q;
Shortcut S;InitStack(P);InitStack(Q);InitQueue(S);
while(m)
{
printf(“n
停车场管理程序
n”);
printf(“A 汽车进车场
D 汽车出车场
E 退出程序n”);
printf(“请选择(A,D,E): ”);
scanf(“%c”,&flag);
switch(flag)
{
case 'A':
case 'a':
Arrival(P,S);break;//车进入停车场
case 'D':
case 'd':
Leave(P,Q,S);break;//车离开停车场
case 'E':
case 'e':
m=0;
break;
default:
printf(“Input error!n”);
break;
}
while(flag!= 'n')
scanf(“%c”,&flag);
} }