停车场管理.docx
- 文档编号:28955446
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:15
- 大小:157.88KB
停车场管理.docx
《停车场管理.docx》由会员分享,可在线阅读,更多相关《停车场管理.docx(15页珍藏版)》请在冰豆网上搜索。
停车场管理
《数据结构与算法设计》课程设计报告
题目:
停车场管理
学生姓名:
学号:
班级:
指导教师:
2013年1月10日
实验九:
停车场管理(栈和队列应用)
一、实验目的
1掌握队列和栈顺序存储结构和链式存储结构,以便在实际背景下灵活运用。
2掌握栈和队列的特点,即先进后出与先进先出的原则。
3掌握栈和队列的基本运算。
二、实验内容
1问题描述
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短来交费。
如果停留在便道上的车未进入停车场就要离去,允许其离开,不收停车费,并且仍然保持在便道上等待的车辆次序。
编制一个程序模拟该停车场的管理。
2实现要求
要求程序输出每辆车到达后的停车位置(停车场或便道),以及某辆车离开停车场时应该交纳的费用和它在停车场内停留的时间。
3实现提示
汽车的模拟输入信息格式可以为:
(到达/离开,汽车牌照号码,到达/离开的时间)。
用栈和队列来模拟停车场和便道。
三、实验结果:
#include
#include
#include
#include
#defineMAX3
#defineprice0.05
typedefstructTime//时间结构体
{
inthour;
intmin;
}Time;
typedefstructCarNode//汽车结构体
{
charnum[10];
Timereach;
Timeleave;
}CarNode;
typedefstructStackCar//存储汽车的栈结构
{
CarNode*stack[MAX+1];
inttop;
}StackCar;
typedefstructQueueCarNode//存储汽车的队列结构
{
CarNode*data;
structQueueCarNode*next;
}QueueCarNode;
typedefstructLinkQueueCar//定义队列结构指针
{
QueueCarNode*head;
QueueCarNode*rear;
}LinkQueueCar;
voidInitStack(StackCar*);
intInitQueue(LinkQueueCar*);
intArrival(StackCar*,LinkQueueCar*);
voidLeave(StackCar*,StackCar*,LinkQueueCar*);
voidList(StackCar,LinkQueueCar);
voidmain()
{
StackCarEnter,Temp;
LinkQueueCarWait;
inta;
intb=1;
InitStack(&Enter);
InitStack(&Temp);//汽车出站时,暂时按次序存放汽车的栈结构
InitQueue(&Wait);
while(b)
{
cout<<"----/********欢迎进入停车场管理系统********/------"< cout<<"-/********1.汽车进站登记**********/------"< cout<<"-/********2.汽车出站登记**********/------"< cout<<"-/********3.车位状态显示**********/------"< cout<<"-/********4.退出系统**************/------"< cout<<"********************************************************************************"< cin>>a; while(b) { if(a==1||a==2||a==3||a==4)break; else { cout<<"\n错误! 退出系统\n"; b=0; break; } } switch(a) { case1: Arrival(&Enter,&Wait);break; case2: Leave(&Enter,&Temp,&Wait);break; case3: List(Enter,Wait);break; case4: exit(0); default: break; } } } voidInitStack(StackCar*s)//初始化栈 { inti; s->top=0; for(i=0;i<=MAX;i++) s->stack[s->top]=NULL; } intInitQueue(LinkQueueCar*Q)//初始化队列 { Q->head=(QueueCarNode*)malloc(sizeof(QueueCarNode)); if(Q->head! =NULL) { Q->head->next=NULL; Q->rear=Q->head; return (1); } elsereturn(-1); } intArrival(StackCar*Enter,LinkQueueCar*W)//进站登记 { CarNode*p; QueueCarNode*t; p=(CarNode*)malloc(sizeof(CarNode)); cout<<"\n请输入车牌号: "; cin>>p->num; if(Enter->top { Enter->top++; cout<<"\n车辆在车场第"< cout<<"\n车辆到达时间(时): "; cin>>p->reach.hour; cout<<"\n车辆到达时间(分): "; cin>>p->reach.min; Enter->stack[Enter->top]=p; return (1); } else//没有空车位 { cout<<"\n该车须在便道等待! 有车位时进入车场"; t=(QueueCarNode*)malloc(sizeof(QueueCarNode)); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return (1); } } voidPRINT(CarNode*p,introom)//汽车离站时缴费显示 { cout<<"\n车辆离开的时间(时): "; cin>>p->leave.hour; cout<<"\n车辆离开的时间(分): "; cin>>p->leave.min; printf("\n离开车辆的车牌号为: "); cout< cout<<"\n其到达时间为: "< cout<<"\n离开时间为: "< cout<<"\n应交费用为: "<<((p->leave.hour-p->reach.hour)*60+(p->leave.min-p->reach.min))*price<<"元"; free(p); } voidLeave(StackCar*Enter,StackCar*Temp,LinkQueueCar*W)//出站登记 { introom; CarNode*p,*t; QueueCarNode*q; if(Enter->top>0)//车站有车时 { while (1) { cout<<"\n请输入车在车场的位置: "; cin>>room; if(room>=1&&room<=Enter->top)break; } while(Enter->top>room)//位置不在栈顶的汽车出站 { Temp->top++; Temp->stack[Temp->top]=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; } p=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; while(Temp->top>=1)//当暂时存储汽车的栈结构中有汽车时汽车重新进站 { Enter->top++; Enter->stack[Enter->top]=Temp->stack[Temp->top]; Temp->stack[Temp->top]=NULL; Temp->top--; } PRINT(p,room); if((W->head! =W->rear)&&Enter->top { q=W->head->next; t=q->data; Enter->top++; cout<<"\n便道的"< cout<<"\n请输入"< "; cin>>t->reach.hour; cout<<"\n请输入"< "; cin>>t->reach.min; W->head->next=q->next; if(q==W->rear) W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } elsecout<<"\n便道里没有车.\n"; } elsecout<<"\n车场里没有车."; } voidList1(StackCar*S)//车场车位显示 { inti; if(S->top>0) { cout<<"\n车场车位状态: "; cout<<"\n车位号\t"<<"到达时间\t"<<"车牌号\n"; for(i=1;i<=S->top;i++) { cout<<""< cout< cout<<"\t"< } } elsecout<<"\n车场里没有车"; } voidList2(LinkQueueCar*W)//便道车位显示 { QueueCarNode*p; p=W->head->next; if(W->head! =W->rear) { cout<<"\n便道内车队依次为: "; cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"; while(p! =NULL) { cout< p=p->next; } cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"; } elsecout<<"\n便道里没有车."; } voidList(StackCarS,LinkQueueCarW)//查询车位状态 { intflag,choice; flag=1; while(flag) { cout<<"\n请选择: "; cout<<"\n\t\t1.车场列表\n\t\t2.便道列表\n\t\t3.返回主菜单\n"; while (1) { cin>>choice; if(choice>=1||choice<=3)break; elsecout<<"选择错误,请重新选择! \n"; } switch(choice) { case1: List1(&S); break; case2: List2(&W); break; case3: flag=0; break; default: break; } } } 汽车进站: 汽车出站: 车站信息: 便道信息: 4、实验总结 1、做程序时,必须细心认真,注意标点符号的使用,注意引用和指针的使用。 2、熟练使用栈和列队,充分使用栈先进后出和队列先进先出的特点,将停车场模拟成栈,将便道模拟成队列,充分运用栈和队列的特点对车辆进行管理。 3、在对车辆进行管理的时候,要对车辆的车牌号进行存储,对车辆的开进、离开、以及缴纳停车费用全部围绕车牌号进行操作,因为在整个操作过程中,只有车牌号是车辆的标志,只有车牌号和车辆是一一对应的。 4、定义两个全局数组和四个全局变量,用来存储车辆到达停车场的时间和离开停车场的时间,以便计算该车需要缴纳的停车费用。 数组是二维数组,第一维用来存储进入停车场的车辆的车牌号,第二维用来存储车辆到达或离开停车场时的时间,这样就将每辆车和每个时间对应起来,不至于在计算停车费用的时候出现到达时间和离开时间不对应的情况。 5、在对车辆的离开进行管理时,充分利用栈先进后出的特点,再次定义一个栈,将要开出的车辆先存储到新栈里,等要离开的车辆开出去了,再将新栈里的车辆开进旧栈,这样就实现了停车场内车辆的离开操作。 6、无论对车辆进行什么样的操作,都要先找到那辆车,所以可以定义一个查找函数,在每次执行某种操作时,都先执行一下查找函数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理