停车场管理系统的代码_第1页
停车场管理系统的代码_第2页
停车场管理系统的代码_第3页
停车场管理系统的代码_第4页
停车场管理系统的代码_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停 车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若 车场内已停满n辆车,则后来的汽车要在门外的便道上等候, 当有车开走时,便 道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进去的车辆必 须先推出车场为它让路,待该辆车开出大门以后,其他车辆再按原次序返回车场。 每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收 费)。试编写程序,模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模 拟便道。从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达” 还是“离去” (2

2、)汽车牌照号码;(3) “到达”或“离去”的时刻。与每组输入信 息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置; 如果是离去的车辆,则输出其在停车场中停留的时间和应缴的费用。(需另设一 个栈,临时停放为让路而从车场退出的车。) #include #define M 5 using namespace std; typedef int Datatype; typedef struct Datatype bianhaoM; 时 分 秒 停车场栈的定义 便道结点,表示一辆汽车 int top; int hM;/ int mM;/ int sM;/ Seqstack;/ typ

3、edef struct Node / Datatype bianhao; struct Node *next; node; typedef struct node *front; node *rear; int count; biandao;/便道 /停车场顺序栈初始化 void lnitSeqstack(Seqstack *t) t-top=-1; /进栈,即进入停车场 int Push(Seqstack *t,int x,int h,int m,int s) if(t-top=M-1) return 0;/停车场栈已满 t-top+; t-bianhaot-top=x; t-ht-top=

4、h; t-mt-top=m; t-st-top=s; return 1; /出栈,即离开停车场 int Pop(Seqstack *t,int *x,int *h,int *m,int *s) if(t-top=-1) return 0; else *x=t-bianhaot-top; *h=t-ht-top; *m=t-mt-top; *s=t-st-top; t-top-; return 1; /查找某牌照的车在停车场中的位置,若找到则返回其位 置,否则返回-1 int Find(Seqstack t,int x) int i; for(i=0;iv=t.top;i+) if(t.bian

5、haoi!=x) continue; else break; if(it.top) return(-1); else return(i); /判断停车场内是否已满 int lsSeqstackFull(Seqstack t) if(t.top=M-1) return 1; else return 0; /判断停车场内是否已没有车辆 int lsSeqstackEmpty(Seqstack t) if(t.top=-1) return 1; else return 0; /依次显示停车场内停放的所有车辆 void ShowSeqstack(Seqstack t) int i; if(t.top=

6、-1) coutvv停车场内没有停放车辆vvendl; else for(i=0;ifront=new node; if(Q- front!=NULL) Q-rear=Q-fr ont; Q-front-next=NULL; Q-count=0; return(true); else return(false); /入队操作,即当停车场满了的时候,再到达的车辆进去便 道队列 int Enterbiandao(biandao *Q,int x) node *NewNode; NewNode=new node; if(NewNode!=NULL) NewNode-bianhao=x; NewNod

7、e-next=NULL; Q-rear-next=NewNode; Q-rear=NewNode; Q-co un t+; return(true); else return(false); /出队操作,即便道上的车辆从便道开出来 int Deletebiandao(biandao *Q,int *x) node *p; if(Q-fro nt=Q-rear) return(false); p=Q-front-next; Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-fr ont; *x=p-bianhao; free(p); Q-count-; ret

8、urn(true); /判断便道队列是否为空 int lsbiandaoEmpty(biandao Q) if(Q.front=Q.rear) return(true); else return(false); / 当count=0时,就空了 /依次显示便道上停放的所有车辆 void Showbiandao(biandao Q) node *p; p=Q.front-next; if(p=NULL) coutvv便道上没有停放车辆!vvendl; else while(p!=NULL) coutvv 牌照:vvp-bianhaovvendl; p=p-n ext; 36 /计算停留时间差 do

9、uble Time(int h1,int m1,int s1,int h2,int m2,int s2) double p,q; p=h1*3600+m1*60+s1 -(h2*3600+m2*60+s2); q=(double)p/3600; return(q); /计算停车费用 double Cost(double t,int u) return(t*u); /主函数 void main() double time,cost; int ch; int x,*y, z; int i,flag=1,h,m,s,unit_price,hh,mm,ss; y=new int; Seqstack *

10、t; / 定义停车 栈 t=new Seqstack; InitSeqstack(t); biandao *Q; / 定义便道队列 Q=new biandao; Initbiandao(Q); Seqstack *r; / 定义让路 栈 r=new Seqstack; InitSeqstack(r); coutvv请设置停车费用单价:(_元/小时)vvendl; cinunit_price; while(flag) coutvv H* vvendl; vvendlvv2: 离开vvendlvv3:依次显示停车场内停放车 coutvv H* vvendl; coutvv 请选 择命令:vvend

11、lvv1: 辆vvendlvv4:依次显示便道上停放车辆ch; switch(ch) case 1: coutvv 请输入到达的汽车牌照号码:vvendl; cinx; if(lsSeqstackFull(*t) coutvv 停车场已满,请在便道等候!vvendl; Enterbiandao(Q,x); coutvv将此车停放在便道的vvQ-countvv 号位置!vvendl; else while(1) coutvv请输入到达的时间(例如,21 08 23) : vvendl; cinhms; if(hv0 |h23) continue; /输入数据不合法,回去重新输入 if (mv0

12、| m59) continue; if (s-1 /输入时间全部合法,退出循环 Push(t,x,h,m,s); coutvv 将此车停放在停车场的 vvt-top+1vv 号停车位置vvendl; break; case 2: if(lsSeqstackEmpty(*t) coutvv 停车场内已没有车辆 vvendl; else coutvv请输入要离开的汽车的车牌照号码: vvendl; cinx; if(Find(*t,x)=-1) coutvv停车场内没有该汽车!vvendl; else /有该号码的汽车 while coutvv请输入离开的时间(例如,23 58 03) : vve

13、ndl; cinhms; if(h23) continue; /输入数据不合法,回去重新输入 if (m59) continue; if (s-1 /要离开的车辆正好是最后一辆进入停车场的车 time=Time(h,m,s,hh,mm,ss); coutvv停留时间为:vvtimevv小 时vvendl; / 结账 cost=Cost(time,unit_price); coutvv应缴费 用为:vvcostvv 元 vvendl; else for(i=(Find(*t,x)+1);iv=t-top;)该车不是最后一 辆进入停车场的车,其它车要让路 Pop(t,y, Push(r,*y,hh,mm,ss); / 进入让路栈r Pop(t,y, /要离开的车辆离开了 vvtimevv小 vvcostvv元 time=Time(h,m,s,hh,mm,ss); coutvv停留时间为: 时vvendl; / 结账 cost=Cost(time,unit_price); coutvv应缴费用为: vvendl; for(i=0;iv=r-top;) /让路 的车辆重新回到停车场 Pop(r,y, Push(t,*y,hh,mm,ss); if(!lsbiandaoEmpty(*Q) Deletebianda

温馨提示

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

评论

0/150

提交评论