数据结构课程设计停车场管理系统的设计与实现.docx
- 文档编号:10293501
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:17
- 大小:41.93KB
数据结构课程设计停车场管理系统的设计与实现.docx
《数据结构课程设计停车场管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计停车场管理系统的设计与实现.docx(17页珍藏版)》请在冰点文库上搜索。
数据结构课程设计停车场管理系统的设计与实现
停车场管理系统的设计与实现
一、需求分析
1、问题描述
停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
2、基本要求
a.以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
b.每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
c.栈以顺序结构实现,队列以链表实现。
二、概要设计
1.数据结构
本程序需要用到五个结构体,分别为时间Time,车辆信息Car,模拟停车场SqStack,车辆顺序链表QueueNode以及模拟便道LinkQueue。
2.程序模块
本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。
系统子程序及功能设计
本系统共有五个子程序,分别是:
voidInitStack(SqStack*s,intn)//初始化栈
intInitQueue(LinkQueue*Q)//初始化链表
voidLeaveinformation(Car*p)//离开的车辆信息
voidArrive(SqStack*A,LinkQueue*B,intn)//汽车进站
voidLeave(SqStack*A,SqStack*C,LinkQueue*B,intn)//汽车出站
3.各模块之间的调用关系以及算法设计
Arrive函数需要调用Leaveinformantion函数
主函数调用InitStack,InitQueue,Leaveinformation,Arrive,Leave这些函数。
三、详细设计
1.数据类型定义
typedefstructtime
{
inthour;
intmin;
}Time;
typedefstruct
{
charnum[10];
Timereach;
Timeleave;
}Car;
typedefstruct
{
Car*stack[MAX+1];
inttop;
}SqStack;//停车场
typedefstructcar
{
Car*data;
structcar*next;
}QueueNode;
typedefstructNode
{
QueueNode*head;
QueueNode*rear;
}LinkQueue;//便道
2.系统主要子程序详细设计
a.初始化栈
voidInitStack(SqStack*s,intn)
{
inti;
s->top=0;
for(i=0;i<=n;i++)
s->stack[s->top]=NULL;
}
b.初始化链表
intInitQueue(LinkQueue*Q)
{
Q->head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->head!
=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return1;
}
else
return0;
}
c.显示离开的车辆信息
voidLeaveinformation(Car*p)//离开的车辆信息
{
intA1,A2,B1,B2,a,b,c;
chard;
cout<<"请输入离开的时间:
(小时:
分钟):
"< cin>>p->leave.hour>>d>>p->leave.min; cout<<"出站的车的车牌号为: "< A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min; a=(B1-A1)*60+B2-A2; if(a>=60) { b=a/60; c=a-60*b; } else { b=0; c=a; } cout<<"出站车辆信息"< cout<<"---------------------------------------------------"< cout<<"进停车场时间: (小时: 分钟)"< cout< '< cout<<"出停车场时间: (小时: 分钟)"< cout< '< cout<<"停留时间: "< cout< cout<<"应付费用(每分钟0.1元): "< cout<<0.1*a<<"元"< cout<<"---------------------------------------------------"< free(p); } d.汽车进站 voidArrive(SqStack*A,LinkQueue*B,intn)//汽车进站 { Car*p; QueueNode*t; inta,b; charc; stringd; p=(Car*)malloc(sizeof(Car)); cout<<"请输入车牌号(例: AB1234): "< cin>>d; if(A->top { A->top++; cout<<"请输入到达时间: (小时: 分钟)"< cin>>p->reach.hour>>c>>p->reach.min; cout<<"车辆在停车场的位置为: "< A->stack[A->top]=p; } else { cout<<"停车场已满需等候"< t=(QueueNode*)malloc(sizeof(QueueNode)); t->data=p; t->next=NULL; B->rear->next=t; B->rear=t; } } e.汽车出战 voidLeave(SqStack*A,SqStack*C,LinkQueue*B,intn)//汽车出站 { inti,room; Car*p,*t; QueueNode*q; cout<<"请输入要离开的车在车场的位置: "< cin>>room; while(A->top>room) { C->top++; C->stack[C->top]=A->stack[A->top]; A->stack[A->top]=NULL; A->top--; } p=A->stack[A->top]; A->stack[A->top]=NULL; A->top--; while(C->top>=1) { A->top++; A->stack[A->top]=C->stack[C->top]; C->stack[C->top]=NULL; C->top--; } Leaveinformation(p); if((B->head! =B->rear)&&A->top { q=B->head->next; t=q->data; A->top++; cout<<"便道上的汽车进入车场.该车的车牌号为: "< cout<<"该车进入停车场的位置为: "< B->head->next=q->next; if(q==B->rear)B->rear=B->head; A->stack[A->top]=t; free(q); } } 四、测试与分析 1.显示主菜单,运行程序可以显示出如下界面。 2.车辆进站 在主菜单下选1,车辆进站,输入车牌号以及车辆到达的时间。 3.车辆出战 在主菜单下选2,车辆出站,输入要离开停车场的车辆位置,以及离开的时间。 可以得到车俩在停车场的停留时间以及应付费用。 4.退出系统 退出程序。 五、附录 1.停车场管理.h #include #include #include #include usingnamespacestd; #defineMAX2 typedefstructtime { inthour; intmin; }Time; typedefstruct { charnum[10]; Timereach; Timeleave; }Car; typedefstruct { Car*stack[MAX+1]; inttop; }SqStack;//停车场 typedefstructcar { Car*data; structcar*next; }QueueNode; typedefstructNode { QueueNode*head; QueueNode*rear; }LinkQueue;//便道 voidInitStack(SqStack*s,intn) { inti; s->top=0; for(i=0;i<=n;i++) s->stack[s->top]=NULL; } intInitQueue(LinkQueue*Q) { Q->head=(QueueNode*)malloc(sizeof(QueueNode)); if(Q->head! =NULL) { Q->head->next=NULL; Q->rear=Q->head; return1; } else return0; } voidLeaveinformation(Car*p)//离开的车辆信息 { intA1,A2,B1,B2,a,b,c; chard; cout<<"请输入离开的时间: (小时: 分钟): "< cin>>p->leave.hour>>d>>p->leave.min; cout<<"出站的车的车牌号为: "< A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min; a=(B1-A1)*60+B2-A2; if(a>=60) { b=a/60; c=a-60*b; } else { b=0; c=a; } cout<<"出站车辆信息"< cout<<"---------------------------------------------------"< cout<<"进停车场时间: (小时: 分钟)"< cout< '< cout<<"出停车场时间: (小时: 分钟)"< cout< '< cout<<"停留时间: "< cout< cout<<"应付费用(每分钟0.1元): "< cout<<0.1*a<<"元"< cout<<"---------------------------------------------------"< free(p); } voidArrive(SqStack*A,LinkQueue*B,intn)//汽车进站 { Car*p; QueueNode*t; inta,b; charc; stringd; p=(Car*)malloc(sizeof(Car)); cout<<"请输入车牌号(例: AB1234): "< cin>>d; if(A->top { A->top++; cout<<"请输入到达时间: (小时: 分钟)"< cin>>p->reach.hour>>c>>p->reach.min; cout<<"车辆在停车场的位置为: "< A->stack[A->top]=p; } else { cout<<"停车场已满需等候"< t=(QueueNode*)malloc(sizeof(QueueNode)); t->data=p; t->next=NULL; B->rear->next=t; B->rear=t; } } voidLeave(SqStack*A,SqStack*C,LinkQueue*B,intn)//汽车出站 { inti,room; Car*p,*t; QueueNode*q; cout<<"请输入要离开的车在车场的位置: "< cin>>room; while(A->top>room) { C->top++; C->stack[C->top]=A->stack[A->top]; A->stack[A->top]=NULL; A->top--; } p=A->stack[A->top]; A->stack[A->top]=NULL; A->top--; while(C->top>=1) { A->top++; A->stack[A->top]=C->stack[C->top]; C->stack[C->top]=NULL; C->top--; } Leaveinformation(p); if((B->head! =B->rear)&&A->top { q=B->head->next; t=q->data; A->top++; cout<<"便道上的汽车进入车场.该车的车牌号为: "< cout<<"该车进入停车场的位置为: "< B->head->next=q->next; if(q==B->rear)B->rear=B->head; A->stack[A->top]=t; free(q); } } 2.main.c(主函数) #include"停车场管理.h" voidmain() { SqStackEnter,Temp; LinkQueueWait; intch,n; n=MAX; InitStack(&Enter,n); InitStack(&Temp,n); InitQueue(&Wait); while (1) { cout<<"停车场管理系统"< cout<<"--------------------------------------"< cout<<"1.车辆进站"< cout<<"2.车辆出站"< cout<<"3.退出系统"< cout<<"请选择: 1~3: "< cin>>ch; if(ch>3||ch<1) { do{ cout<<"输入有误,请重新输入! "< cin>>ch; }while(ch<=3&&ch>=1); } switch(ch) { case1: Arrive(&Enter,&Wait,n); break; case2: Leave(&Enter,&Temp,&Wait,n); break; case3: exit(0); default: break; } } } 六、用户手册 运行停车管理.exe,即可运行该停车管理系统并完成相应的功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 停车场 管理 系统 设计 实现