《2022年停车场管理系统[] .pdf》由会员分享,可在线阅读,更多相关《2022年停车场管理系统[] .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、停车场管理系统【需求分析 】1. 停车场是一个可以停放N 辆汽车的通道 , 汽车按照到达时间的先后顺序进车场, 用栈模拟停车场 , 栈中元素包含汽车两个数据项: 汽车的牌照号码和汽车进入车场的时刻 . 2. 如果车场内已经停满N 辆车,则后来的车只能停放在车场外面的通道上,用队列模拟停车场外面的便道,先进的车辆先出的原则 . 3. 按照从终端输入的输入数据序列进行模拟管理,每一组输入的数据要包括: 汽车到达或者离开的信息,汽车牌照号码以及到达离开的时刻.数据操作后输出的信息为 : 若是到达则输出汽车在停车场的位置. 若是离开 ,则输出汽车在停车场的停留时间和应该交纳的费用. 4. 需要另外设一
2、个栈,历史停放为给要离开的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现 . 【代码分析 】1. 概要设计typedef struct char type; char num5; int time; elemType,*LelemType; typedef struct LelemType base; LelemType top; int stacksize; sqstack; /存储车场停车信息的栈typedef struct QNode elemType data; struct QNode *next; QNode,*Queueptr; typedef struct Queuept
3、r front; Queueptr rear; LinkQueue; /存储便道停车信息的队列typedef struct LNode char ch5; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - struct LNode *next; LNode,*ListType; typedef struct ListType head,tail; int size; tagList; /存储场内车牌号的链表2. 详细设计主函数in
4、t main() void Readmessage(char &c) char h; char num5; int time=0; again1:; coutc; if(c!=a&c!=d&c!=e) cout 输入不正确 , 请按要求重新输入 !endl;goto again1; if(c=d) coutendl;goto again3; if(c=e) goto end; coutendl; again2:; couth; if(h!=p&h!=t&h!=c) cout 输入不正确 , 请按要求重新输入 !type=h; coutendl; again3:; coutnum; if(c!=
5、d) if(judgenum(num) cout 该车牌已存在 ! 请重新输入 !num,num); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - coutendl; again4:; if(c=a) cout 5.请输入该车进车场时间:; else couttime; if(timetime) cout 时间必须递增 ! 请重新输入 !time=time; coutendl; end:; void Interpret(cha
6、r c) if(c=a) if(garage.top-garage.basegarage.stacksize) Push(garage,*elem); cout 请停在车场第 i 号车位 !endl; cout -; i+; else enQueue(waitway,*elem); cout 请停在便道 !endl; coutnum,elem-num)&k=i) q=waitway.front; k=1; while(strcmp(s-num,elem-num)&kj) q+;k+; if(knum); if(+s!=garage.top) giveway.base=s; giveway.to
7、p=garage.top; giveway.stacksize=giveway.top-giveway.base; cout 为该车让路,须从入口退出车场的车辆顺序: ; g=giveway.top; while(g!=giveway.base) g-; cout num; coutendl; else cout 不必让路 , 该车可直接从车场开走!endl; s-; g=giveway.base; while(g!=giveway.top) *s=*g;s+;g+; garage.top-; if(waitway.front!=waitway.rear) /便道上的车辆数目不为零 if(de
8、Queue(waitway,e) Push(garage,e); cout 请 便 道 内 车 牌 为e.num 的 车 进 车 场 , 停 在 第 i号 车 位 ! endl; cout _num); if(q!=waitway.front) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - LinkQueue Q; InitQueue(Q); Queueptr p=waitway.front; do enQueue(Q,p-d
9、ata); /copy它前面的车辆情况 p=p-next; while(p-next!=q); p=waitway.front; Queueptr M=q-next; do p-data=M-data; p=p-next; M=M-next; while(M); cout 便道上为该车让路的车辆顺序: ; cout _; Queueptr N=Q.front; do cout data.num; p-data=N-data; p=p-next; N=N-next; while(N!=Q.rear); destroyQueue(Q); delete(waitway.rear); waitway.
10、rear=p; else cout 不必让路 , 该车可直接从便道开走!endl; end:; 收费函数实现void count(elemType q,char wh) coutendl; cout车型: ; if(q.type=p) cout客车 ; cout收费标准 : ; if(wh=g) cout0.15; else cout0.075; cout 元/ 分钟 endl; else if(q.type=t) cout卡车 ; cout收费标准 : ; if(wh=g) cout0.3; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
11、 - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - else cout0.15; cout 元 / 分钟 endl; else cout小汽车 ; cout收费标准 : ; if(wh=g) cout0.1; else cout0.05; cout 元/ 分钟 endl; cout停车时间 : time-q.time 分钟 ; cout 收费金额 : ; if(wh=g) if(q.type=p) couttime-q.time) 元; else if(q.type=t) couttime-q.time) 元; else cout
12、time-q.time) 元; else if(q.type=p) couttime-q.time) 元; else if(q.type=t) couttime-q.time) 元; else couttime-q.time) 元; coutendl; for(n=1;n80;n+) cout-; coutnext=NULL; return OK; status destroyQueue(LinkQueue &Q) while(Q.front) Q.rear=Q.front-next; free(Q.front); Q.front=Q.rear; return OK; /*status Get
13、head( LinkQueue s,elemType &e) if(s.front=s.rear) return eRROR; e=s.front-data; return OK; */ status enQueue(LinkQueue &Q,elemType e) Queueptr p; Q.rear-data=e; p=(Queueptr)malloc(sizeof(QNode); if(!p) exit(OVeRFLOW); p-next=NULL; Q.rear-next=p; Q.rear=p; return OK; 名师资料总结 - - -精品资料欢迎下载 - - - - - -
14、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - status deQueue(LinkQueue &Q,elemType &e) if(Q.front=Q.rear) return eRROR; Queueptr p=Q.front; e=p-data; Q.front=p-next; if(Q.rear=p-next) Q.rear=Q.front; free(p); return OK; status InitList(tagList &L) L.head=new(LNode); L.ta
15、il=L.head; L.size=0; for(int i=0;ichi=0; return OK; status MakeNode(ListType t,char c) for(int i=0;ichi=ci; t-next=NULL; return OK; status Insert(tagList &L,ListType t) L.tail-next=t; L.tail=t; L.tail-next=NULL; return OK; status judgenum(char num) int i=0; ListType q=NULL; if(L.size0) q=L.head-next
16、; while(q) if(strcmp(num,q-ch) i=1; q=q-next; return i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - void deleteL(char num) ListType q=L.head-next,R=L.head; while(q) if(!strcmp(q-ch,num) R-next=q-next; if(q=L.tail) L.tail=R; delete(q); q
17、=R-next; L.size-; else R=R-next;q=q-next; 【测试数据 】设 n=2, 输入数据为 :( a,1,5),(a2,10), (d1,15), (a3,20), ( a4,25), (d2,35), (d4,40), (e0,0) 其中 :a 表示到达 (arrival); d 表示离开 (departure)的意思 ;e 表示离开的意思. 【设计体会 】用栈和队列的方法实现停车场的功能, 加深的对栈和队列的理解和熟练程度, 充分理解先进先出和先进后出的功能体现. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -