停车场管理系统设计C语言_第1页
停车场管理系统设计C语言_第2页
停车场管理系统设计C语言_第3页
停车场管理系统设计C语言_第4页
停车场管理系统设计C语言_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、 . . . 停车场管理一. 题目要求1.设计一个停车场用长度为N的堆栈来模拟。由于停车场如有某辆车要开走 ,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。2.程序输出每辆车到达后的停车位置,以与某辆车离开停车场时应交纳的费用和它在停车场停留的时间。二. 需求分析根据题目要求首先设计一个堆栈,以堆栈来模拟停车场,又每辆汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素设计成汽车的车牌号。当停车场某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进的过程,而且

2、让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不像汽车一样需要让道,可设计了一个顺序表来存放时间。又用顺序表用派生法设计了一

3、个堆栈,恰好满足上面模拟停车场的需要。三. 总体设计车进入车场判断车场内是否有车不做任何计算无点x有输入离开车辆的离开时间,进行停车费用的计算此车后面的车辆退出并进入临时栈车子离开四详细设计主函数主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。程序:int main() int n,m,i=1,j,flag=0; /*定义变量*/ Car c10; Car x; Stack S,S0; /*设定堆栈S,SO*/ LinkQueue Q; /*便道*/ InitStack(&S); /*堆栈S*/ InitStack(&S0); /*临时堆栈S0*/

4、 InitQueue(&Q); while(1) print(); scanf(%d,&m); switch(m) /*switch多分支语句*/ case 1:printf(n请输入车牌号:); scanf(%d,&ci.num); printf(n请输入到达/离开时间:); scanf(%d:%d,&ci.t.hour,&ci.t.min); In(&S,&Q,&ci);i+; break; /*车辆的情况*/ case 2:printf(n请输入车牌号:); scanf(%d,&n); for(j=0;jfront=(CQueueNode*)malloc(sizeof(CQueueNod

5、e); /*使mallo返回的指针转换为指向CQueueNode类型数据的指针*/ if(Q-front!=NULL) Q-rear=Q-front; Q-front-next=NULL; /*便道的初始化*/int EnterQueue(LinkQueue *Q,Car *t) CQueueNode *NewNode; NewNode=(CQueueNode*)malloc(sizeof(CQueueNode); /*给便道申请空间*/ if(NewNode!=NULL) NewNode-data.num=t-num; NewNode-data.t.hour=t-t.hour; NewNod

6、e-data.t.min=t-t.min; NewNode-next=NULL; Q-rear-next=NewNode; Q-rear=NewNode; return 1; else return 0; (3)车辆进出模块 该模块主要包括车辆进出车库的函数。车辆进入车库,首先要判断车库是否有空位置,然后选择进入车库还是便道。某车辆离开时,排在该车后面的车辆均需按顺序退到备用车库中为其腾出空间。待其离开车哭后,按原顺序进入车库,同时便道上的车也能进入车库。程序:void InitStack(Stack *S) S-top=0; /*确保堆栈为空*/void Push(Stack *S,Car

7、*r) S-top+; S-elemS-top.num=r-num; r-position=S-elemS-top.position=S-top; S-elemS-top.t.hour=r-t.hour; S-elemS-top.t.min=r-t.min; /*便道中的车入库*/int IsEmpty(Stack* S) return(S-top=0?1:0); /*判断车库是否为空*/int IsFull(Stack *S) return(S-top=SIZE?1:0); /*判断车库是否为满*/int GetTop(Stack *S,Car *n) n-num=S-elemS-top.n

8、um; n-position=S-elemS-top.position; n-t.hour=S-elemS-top.t.hour; n-t.min=S-elemS-top.t.min; return 1; /*车离开车库*/ 下面函数功能为将便道中的车放入车库。其实现过程:首先定义指针p,判断列队为空,将指针p指向首车的位置,然后保存第一辆车的位置,将头指针指向第二辆车的位置,随后把第一辆车放入车库,最后释放临时指针。int DeleteQueue(LinkQueue *Q,Car *x) CQueueNode *p; if(Q-front=Q-rear) return 0; /*判断便道为空

9、*/ p=Q-front-next; /*将便道中的车放入车库*/ Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-front; x-num=p-data.num; x-t.hour=p-data.t.hour; x-t.min=p-data.t.min; free(p); /*释放临时指针*/ return 1; 以下为车辆进出车库的程序,通过判断车库是否有车位来确定车辆进入车库还是便道。void In(Stack *S,LinkQueue *Q,Car*r) if(IsFull(S) printf(车库已满,请等待!); EnterQueue(Q,r)

10、; /*车进入便道*/ else Push(S,r); printf(n您现在所在位置 %d,r-position); /*打印车的位置*/以下为车辆离开车库的程序,首先确定车库是否有此车,然后根据离开的规则离开车库。注意:过道中的车离开不收取费用。void Out(Stack *S,Stack *S0,Car *r,LinkQueue *Q) int tag=S-top; Car x; if(IsEmpty(S) printf(没有此车!); else for(;r-num!=S-elemtag.num&tag0;tag-) Push(S0,&S-elemtag); S-top-; if(r

11、-num=S-elemtag.num) TaM(r,S-elemtag.t.hour,S-elemtag.t.min); S-top-; for(;S0-top0;S0-top-) Push(S,&S0-elemS0-top); if(S-topfront!=Q-rear) DeleteQueue(Q,&x); Push(S,&x); /*判断车库是否有此车,有就找到此车,然后退出*/ else if(tag=0) printf(未进入停车场应支付金额 0元!); for(;S0-top0;S0-top-) Push(S,&S0-elemS0-top); /*过道中的车无需收车费*/(4)打印

12、模块 该模块主要包括车库中车的信息。根据屏幕提示输入车到达时间和离开信息,最终打印出应缴费用,同时也可以查找车库中释放有此车。程序:void print1(Stack *S) int tag; Car x; printf(停车场停车情况:n); if(IsEmpty(S) printf(无车!); for(tag=S-top;S-top0;S-top-) if(GetTop(S,&x) printf(车牌号 %d,所在位置 %d,到达/离开时间 %d:%dn,x.num,x.position,x.t.hour,x.t.min); S-top=tag; /*显示车库中个车的信息与到达时间*/vo

13、id print2(LinkQueue *Q) CQueueNode *p; p=Q-front-next; for(;p!=NULL;p=p-next) printf(等待车牌号 %d, 到达/离开时间 %d:%d,p-data.num,p-data.t.hour,p-data.t.min); /*显示过道上车的信息与到达时间*/void print() printf(n*欢迎光临*n); printf(n 请选择:n); printf(n 1 :到达); printf(n 2 :离开); printf(n 3 :搜索); printf(n 4 :退出n); printf(n); (5)计费

14、模块该模块为车主离开时应缴纳费用,按每分钟0.2远收取费用。程序:void TaM(Car *r,int h,int m) if(mr-t.min) r-t.min+=60;r-t.hour-=1; h=r-t.hour-h; m=r-t.min-m; printf(n停车 %d小时 %d 分钟n,h,m); printf(每小时收费30元n); h=h*60;m=h+m; r-money=0.5*m; printf(请支付金额%.2f元n,r-money); /*输出车主应付金额*/此外,该函数中还用到宏定义的方式,其优点是随时可以在原程序宏定义中修改,本程序中宏定义#define SIZE 3,#define N

温馨提示

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

评论

0/150

提交评论