停车场管理课程设计报告_第1页
停车场管理课程设计报告_第2页
停车场管理课程设计报告_第3页
停车场管理课程设计报告_第4页
停车场管理课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.停车场管理一、 课程设计题目内容(1)问题描述:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。基本要求:以栈模拟停车场,以队列模拟车

2、场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。测试数据:设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表示到达(Arrival);D表示(

3、Departure);E表示输入结束(End)。实现提示:需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。二、 本人完成的工作(1) 定义车辆信息结构体,包括汽车的车牌号码、到达停车场时间、离开停车场时间;(2) 定义顺序堆栈的结构体,用于模拟停车场;(3) 定义链式队列的结构体,用于模拟车场外的停车场;(4) 定义堆栈和队列的初始化函数;(5) 设计汽车进入停车场、离开停车场、离开收费信息和汽车停靠情况查询等主要函数;(6) 主函数:设计停车场管

4、理菜单,通过菜单选项,调用相关的函数来实现停车场汽车到达登记、汽车离开停车场、汽车停靠查询和退出程序的操作,完成模拟汽车停车场的整个过程。三、 所采用的数据结构数据结构的定义:typedef struct car /定义车辆信息的结构体long CarNo; /车牌号int Atime; /车到达时间int Dtime; /车离开时间CarNode;typedef struct node /定义模拟停车场的顺序堆栈 CarNode stackMaxsize+1; /栈底不存放元素,即停车场共有Masize个位置int top; /栈顶指针StackCar;typedef struct qnod

5、e /用队列结点定义,构造停车场外的单个等候车辆CarNode data; /数据域struct qnode *next; /指针域QNode;typedef struct Node /用队列定义,构造停车场外的等候便道QNode *front; /队头指针QNode *rear; /队尾指针LinkQueue;四、 所设计的函数1)void StackInitiate(StackCar *s) /堆栈初始化 s->top=0; /栈顶置0初始方法:初始化顺序栈,只需令栈顶的下标值置为0即可。程序框图:堆栈的初始化(s)s->top=0初始化成功!2)LinkQueue *Init

6、_LinkQueue(void)/链队列的初始化 LinkQueue *Q;QNode *p;p=(QNode *)malloc(sizeof(QNode) ; /* 开辟头结点 */p->next=NULL;Q=(LinkQueue *)malloc(sizeof(LinkQueue);/* 开辟链队的指针结点 */Q->front=Q->rear=p; return(Q) ;初始方法:开辟一个队列的头结点p,其next指针为空,再开辟链队的指针结点Q,用p来初始化链队结点的队头指针和队尾指针。初始化成功后,返回Q程序框图:队列的初始化LinkQueue *Q;QNode

7、*pp=(QNode *)malloc(sizeof(QNode) p->next=NULLQ=(LinkQueue *)malloc(sizeof(LinkQueue)Q->front=Q->rear=preturn(Q)初始化成功3)void Arrival(StackCar *car1,LinkQueue *car2) /车辆进入停车场操作 CarNode p;QNode *q;printf("n+车辆到达登记表+");printf("n请输入车牌号(整型,例如:1234):");scanf("%d",&

8、;p.CarNo);/输入车牌号if(car1->top<Maxsize) /停车场未停满车时,即栈未满,进入停车场car1->top+; /栈顶指针+1printf("n【汽车顺利停放在车场的第%d位置】n",car1->top);while(1)printf("n车辆几点钟到达(%d23点):",n);scanf("%d",&p.Atime);if(p.Atime>23 | p.Atime<n) printf("输入时间有误,请重新输入!");else n=p.Ati

9、me;printf("n北京时间%d:00整n",n);break;car1->stackcar1->top=p; /将车停入停车场,停放在top位置else /停车场已停满车,即栈已满,则停靠在便道 printf("n停车场已满,请先在便道等候!有车位时进入车场!n");q=(QNode *)malloc(sizeof(QNode);q->data=p; q->next=NULL; /形成新的结点,保存车辆信息car2->rear->next=q;car2->rear=q; /新结点入队尾,即车辆进入便道等候p

10、rintf("+n"); 算法思想:当车进入车场时,登记车的车牌号,如果停车场有空位,将车停放在相应的空位,输出此时车停放的位置,记录到达时间;如果停车场没有空位,便将车开到便道等候。其过程相当于,当顺序栈未满时,进栈;当顺序栈已满时,无法入栈,便进入队列。程序框图:NYArrival(StackCar *car1,LinkQueue *car2)CarNode p; QNode *q;提示:输入车牌号输入:p.CarNocar1->top<Maxsize?car1->top+打印车停放的位置输入:p.Atimecar1->stackcar1->

11、;top=p提示:停车场已满,在便道等候q=(QNode *)malloc(sizeof(QNode)q->data=pq->next=NULLcar2->rear->next=qcar2->rear=q车在便道等候车进入停车场4)void output(CarNode p) /输出车离开停车场离开时间、收费等信息 int a,b;while(1)printf("n车辆离开的时间(%d点24点之间的时间):",n);scanf("%d",&(p.Dtime); /输入车辆离开的小时、分钟if(p.Dtime>2

12、4 | p.Dtime<n)printf("输入时间不符合,重新输入!",p.Atime);else n=p.Dtime;printf("n北京时间%d:00整n",n);break;printf("n*车辆离开信息表*");printf("n离开车辆的车牌号为:%d",p.CarNo); /输出离开车场的车牌号printf("n到达时间为: %d点",p.Atime); printf("n离开时间为: %d点",p.Dtime); a=p.Atime;b=p.Dtim

13、e;printf("n应交费用为: %d元",(b-a)*price); /计算并输出停车费用printf("n*n"); 算法思想:当汽车离开停车场时,调用此函数,输入汽车离开车场的时间,便打印该汽车的车牌号、到达时间、离开时间和缴纳费用等信息,来模拟汽车离开停车场。(n为当前的时间)程序框图: NYY汽车离开信息(p)int a,bwhile(1)输入:p.Dtimep.Dtime>24 | p.Dtime<n?打印汽车车牌号结束打印汽车到达时间打印汽车离开时间打印应交费用4)void Departure(StackCar *car1,S

14、tackCar *Temp,LinkQueue *car2) /车辆离开停车场操作 int i,j=1,k=0;long NO;CarNode p,t;QNode *q;if(car1->top>0) /停车场内有车辆停放 while(j)printf("n请输入离开停车场车辆的车牌号:");scanf("%d",&NO);for(i=1;i<=car1->top;i+) /查找停车场内是否存在该车牌号if(car1->stacki.CarNo=NO)k=1; /存在,k=1if(k)while(car1->s

15、tackcar1->top.CarNo!=NO) /当停车场top位置停放的车牌号不为NO时,将该位置的车开入临时停车场Temp->top+; Temp->stackTemp->top=car1->stackcar1->top; /入栈。临时车场栈顶指针+1,把车停放在临时车场car1->top-; /出栈。原车场的栈顶置空,栈顶指针-1 p=car1->stackcar1->top; /将要离开停车场的车辆信息赋给pcar1->top-; /栈顶-1j=0; /结束whileelseprintf("无此车牌号码,请重新输入

16、!");output(p); /调用汽车离开停车场的信息函数 while(Temp->top>=1) /将临时车场里的车停回到停车场car1->top+;car1->stackcar1->top=Temp->stackTemp->top;Temp->top-;if(n>=24)printf("n*已过24点,停车场管理系统关闭!*n");m=0;elseif(car2->front!=car2->rear)&&car1->top<Maxsize) /如果有车在便道等候,将

17、车停入停车场 q=car2->front->next; /取队首结点qt=q->data; /拷贝队首结点的车辆信息car1->top+;printf("n便道的%d号车进入车场第%d位置!",t.CarNo,car1->top);while(1)printf("n请输入%d号车进入车场的时间(%d23点):",t.CarNo,n);scanf("%d",&(t.Atime); /输入车到达停车场的时间if(t.Atime>23 | t.Atime<n) printf("输入

18、时间有误,请重新输入!");else n=t.Atime;printf("n北京时间%d:00整n",n);break;car2->front->next=q->next; /修改队首指针if(q=car2->rear) car2->rear=car2->front; /* 当队列只有一个结点时应防止丢失队尾指针 */car1->stackcar1->top=t; /车进入停车场free(q);else printf("n便道里没有车n"); /便道没有车,end ifelse printf(&q

19、uot;n车场里没有车n"); /停车场内没有车,end if 算法思想:当顺序栈不为空时,进行汽车要离开停车场操作,输入要离开的车牌号,匹配顺序栈的数组中是否存在该车牌号的元素(如果未找到,则提示车牌号输入错误,重新输入),如果其他的汽车需要为从停车场离开的车让路的话,则把这些车暂时存放在另一个顺序栈,待该车离开后,再按原次序返回停车场。如果便道里有车在等候,则将该车开入停车场停放。当停车场内没车停放时,则提示停车场没有车,不能进行离开停车场操作。程序框图:NNYYNY汽车离开停车场停车场有车?输入离开停车场的车牌号判断车场是否存在此车牌号无此车牌号,重新输入需让路的车进入临时停车

20、场,无需让路直接进行下一步操作调用车辆离开停车场信息函数便道是否有车在等候?便道的第一辆车进入停车场提示:便道里没有车提示:车场里没有车!结束临时停车场的车返回停车场5)void List1(StackCar *car1) /打印停车场的车辆 int i;if(car1->top>0)printf("n车场:");printf("n车牌号t到达时间n");for(i=1;i<=car1->top;i+)printf("%d",car1->stacki.CarNo);printf("t%d点n&q

21、uot;,car1->stacki.Atime);else printf("n车场里没有车!n");算法思想:打印栈中的元素,通过一个单循环,打印栈1-top中的元素(车牌号)。YNNYStackCar *car1int icar1->top>0?i=1i<=car1->top?打印车牌号和到达时间打印:车场里没有车!结束程序框图:6)void List2(LinkQueue *car2) /打印便道中等候的车辆 QNode *p;p=car2->front->next;if(car2->front!=car2->rea

22、r)printf("n便道:n车牌号 ");while(p!=NULL)printf("%dt",p->data.CarNo);p=p->next;else printf("n便道里没有车!n");算法思想:通过队列的队首指针,一一打印队列中的元素。程序框图:YYNNList2(LinkQueue *car2)QNode *pp=car2->front->nextcar2->front!=car2->rear?p!=NULL打印车牌号提示:便道里没有车结束7)/*主函数*/void main()St

23、ackCar car1,temp; /定义两个堆栈,停车场car1,临时停车场car2LinkQueue *car2; /定义一个队列,用于便道停放等候停车的车辆char choose; /选项StackInitiate(&car1);StackInitiate(&temp); car2=Init_LinkQueue();printf("=欢迎光临Wings停车场=n" );printf("*入场须知:本停车场内设 %d个停车位,停车收费为每小时 %d元, *n",Maxsize,price);printf("* 停车超过半小时

24、按一小时计算,不超过不收费. *n");printf("* 营业时间:24小时 *n");printf("* 投诉监督电话:123-456789 *n");printf("*停车系统提示:只供模拟一天的汽车停放情况 *n");printf("=欢迎光临Wings停车场=n" );while(m) printf("n 停车场管理程序 n"); printf("=n"); printf("* A 汽车到达停车场 *n"); printf("* *n"); printf("* D 汽车离开停车场 *n"); printf("* *n");printf("* F 汽车停靠信息 *n");printf("* *n"); printf("* E 退出程序 *n"); printf("=n"); printf("请选择(A,D,F,E): ");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论