版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、停车场管理系统、课程设计项目 : 停车场管理系统二、课程设计目的:以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟 管理。每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌号码、 以及到达或离去的时刻。对每一组数据进行操作后的信息为:若是车辆到达,则输 出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留 时间和应缴纳的费用 (在便道上的停留时间不收费) 。栈以顺序结构实现, 队列以链 表结构实现。三、课程设计内容:(一 ) 需求分析1 本演示程序中, CarNum ,CarTime ,price 应为任意的,输入一个值赋给 初始报数上限 st
2、acksize ,程序自动保存车辆的车牌号和时间 (到达, 离开,结束),当车辆要进入栈时,检查停车场是否已满,如果未满则车辆进栈(车辆进入 停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候) 。当 车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必 须先退出车场为它让路) ,再让该车出栈,其他车辆再按原次序进栈(进入车 场)。当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中2 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入三个数据相(汽车“到达”或“离去”信息、 车牌号码、以及到达
3、或离去的时刻) ,程序根据其输入再输出相关信息。3 程序执行的命令包括:(1)用栈模拟停车场,用队列模拟车场外的便道,按照从终端读入的输入 数据序列进行模拟管理;(2)每一组输入数据包括三个数据项:汽车到达或离去的信息,汽车牌号 码以及到达或离去的时刻;( 3) 每次输入完进行输出操作:若是车辆到达,输出汽车在停车场内或 便道上的停车位置;若是车辆离去,输出停留时间和应缴纳的费(在 便道上停留的时间不收费) ;(4)E:结束。4 测试数据(1 )停车场最多停车辆数: 1 单位时间内的价格: 5 到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻: A 12345 1车牌号为 1
4、2345 的车停在 1 处 到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻: A 12345 1车牌号 12345 的车已停车场或便道上,请重新输入!到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻:A 54321 1停车场已停满。车牌号为 54321 的车停在便道 1 处 到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻: D 56624 2停车场内没有车牌号为 56624 的车!到达或离去信息( A :到达 D :离去 E :结束),车牌号,时刻:D 12345 2车牌号为 12345 的车停车费用为 5便道上的车牌号为 54321
5、的车驶进停车场 1 处D 54321 0 输入时间有误,请重新输入 到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻:(二) 概要设计为了实现上述操作,其中栈以顺序结构实现,队列以链表结构实现1 基本操作:typedef structSElemType :车辆的车牌号和时间typedef struct SqStack :定义栈停车场车辆信息typedef struct QNode : 模拟车站void InitStack(SqStack *s,int n) : 初始化栈 (车站) void Push(SqStack *s,int num, int time):元素进栈void
6、 Pop(SqStack *s,int *num,int *time):元素出栈int StackEmpty(SqStack *s) :空栈int StackFull(SqStack *s) :满栈typedef struct LinkQueue : 定义队列(车场外的便道) int QueueEmpty(LinkQueue *Q): 初始化队列void InitQueue(LinkQueue *Q):元素进队列void EnQueue(LinkQueue *Q, int num): 元素出队列void DeQueue(LinkQueue *Q, int *num):删完之后为空列表int I
7、sExistS(SqStack *s,int num) :处理车辆是否到达车库的情况 int IsExistQ(LinkQueue *Q,int num) :处理车辆是否到达便道的情况 void main() :主程序 本程序包含四个模块: (1 ) 栈式车库模块 (2 ) 便道 队列模块 (3 ) 主程序模块;系统框架图:输 入车库便道(1) 输入系统,通过标准输入,获取用户数据;(2) 输出系统,通过标准输出,向用户展数数据;(3) 车库管理,当车库没有满的时候,车就直接进去(4) 便道管理,当车库满了,车就进入便道,等有空位再进去框块结构图:便道管理 车库管理说明:停车场是否已满,如果未
8、满则车辆进栈(车辆进入停车场) ;如果停车场已满,则车辆进入等候队列(车辆进入便道等候)系统流程图:(三) 详细设计1 元素类型,结点类型和指针类型:typedef structint CarNum;int CarTime;SElemType;typedef structSElemType *base,*top;int stacksize;int i;SqStack;typedef struct QNodeint CarNum;struct QNode *next; QNode,*QueuePtr; typedef structQueuePtr front,rear;int j;LinkQue
9、ue;2 每个模块的分析:1)主程序模块:void main()int n ;int price;char info;int num,time,e1,e2;int isexits,isexitq;SqStack st1,st2;LinkQueue Q;SElemType *p,*s;printf( 请输入停车场最多停车辆数: n);scanf(%d,&n);printf( 请输入单位时间内的价格: n);scanf(%d,&price);InitStack(&st1,n);InitStack(&st2,n);InitQueue(&Q);printf(n 请输入到达或离去信息( A:到达 D :
10、离去 E:结束),车牌号, 时刻: n);scanf(%s %d %d,&info,&num,&time);while(info!=E)switch(info)case A:isexits=IsExistS(&st1,num); / 判断车牌号为 num 的车是否已在停 车场或便道isexitq=IsExistQ(&Q,num);if(!isexits&!isexitq)if(st1.top -st1.base CarNum !=num;p-) if(p=st1.base-1)printf( 停车场内没有车牌号为 %d 的车! n,num); elsefor(s=st1.top -1;s!=p
11、;s-)Pop(&st1,&e1,&e2);Push(&st2,e1,e2);Pop(&st1,&e1,&e2);if(timee2)printf( 输入时间有误,请重新输入! n); Push(&st1,e1,e2);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);elseprintf( 车牌号为 %d 的车停车费用为 %dn,e1,(time-e2)*price);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);if(Q.front !=Q.rear&st
12、1.top-st1.base base=(SElemType *)malloc(n*sizeof(SElemType);s-top=s-base;s-stacksize=n;s-i =0;int StackEmpty(SqStack *s)if (s-base=s-top);return 1;void Push(SqStack *s,int num, int time) if(s-top-s-bases-stacksize)return ;s-top-CarNum=num;s-top-CarTime=time;s-top+;s-i+;void Pop(SqStack *s,int *num,i
13、nt *time)if(s-top=s-base)return ;*num=(s-top-1)-CarNum;*time=(s-top-1)-CarTime;s-top-;s-i-;int StackFull(SqStack *s)if(s-top-s-base=s-stacksize);return 1;int IsExistS(SqStack *s,int num)/判断是可以进车库不SElemType *p;p=s-base ;while(ptop )if(p-CarNum =num)return 1;elsep+;return 0;(3) 便道(队列)模块void InitQueue(
14、LinkQueue *Q)Q-front=Q-rear=(QueuePtr)malloc(sizeof(QueuePtr);Q-front-next=NULL;Q-j=0;int QueueEmpty(LinkQueue *Q)return (Q-front=Q-rear);void EnQueue(LinkQueue *Q, int num)QNode *p;p=(QueuePtr)malloc(sizeof(QueuePtr);p-CarNum=num;p-next=NULL;Q-rear-next=p;Q-rear=p;Q-j+;void DeQueue(LinkQueue *Q, in
15、t *num)QNode *p;if(Q-front=Q-rear)return ;p=Q-front-next;*num=p-CarNum;Q-front-next=p-next;if(Q-rear=p)Q-rear=Q-front;/ 删完之后为空列表的情况Q-j-;int IsExistQ(LinkQueue *Q,int num)/进入便道的车QNode *p;if(Q-j=0)return 0;p=Q-front -next ;while(p !=NULL)if(p-CarNum =num)return 1;elsep=p-next ;return 0;3 完整的程序: #inclu
16、de#include#include#include typedef structint CarNum;int CarTime;SElemType;typedef structSElemType *base,*top;int stacksize;int i;SqStack;typedef struct QNodeint CarNum;struct QNode *next;QNode,*QueuePtr; typedef structQueuePtr front,rear;int j;LinkQueue;void InitStack(SqStack *s,int n)s-base=(SElemT
17、ype *)malloc(n*sizeof(SElemType); s-top=s-base;s-stacksize=n;s-i =0;int StackEmpty(SqStack *s)if (s-base=s-top);return 1;void Push(SqStack *s,int num, int time) if(s-top-s-bases-stacksize) return ;s-top-CarNum=num;s-top-CarTime=time;s-top+;s-i+;void Pop(SqStack *s,int *num,int *time)if(s-top=s-base)
18、return ;*num=(s-top-1)-CarNum;*time=(s-top-1)-CarTime;s-top-;s-i-;int StackFull(SqStack *s)if(s-top-s-base=s-stacksize);return 1;void InitQueue(LinkQueue *Q)Q-front=Q-rear=(QueuePtr)malloc(sizeof(QueuePtr);Q-front-next=NULL;Q-j=0;int QueueEmpty(LinkQueue *Q)return (Q-front=Q-rear);void EnQueue(LinkQ
19、ueue *Q, int num)QNode *p; p=(QueuePtr)malloc(sizeof(QueuePtr); p-CarNum=num;p-next=NULL;Q-rear-next=p;Q-rear=p;Q-j+;void DeQueue(LinkQueue *Q, int *num)QNode *p;if(Q-front=Q-rear)return ;p=Q-front-next;*num=p-CarNum;Q-front-next=p-next;if(Q-rear=p)Q-rear=Q-front;/ 删完之后为空列表的情况Q-j-;int IsExistS(SqSta
20、ck *s,int num)SElemType *p;p=s-base ;while(ptop )if(p-CarNum =num)return 1;elsep+;return 0;int IsExistQ(LinkQueue *Q,int num)QNode *p;if(Q-j=0)return 0;p=Q-front -next ; while(p !=NULL) if(p-CarNum =num) return 1;elsep=p-next ;return 0;int main()int n ;int price;char info2;int num,time,e1,e2;int ise
21、xits,isexitq;SqStack st1,st2;LinkQueue Q;SElemType *p,*s;printf( 请输入停车场最多停车辆数: n);scanf(%d,&n);printf( 请输入单位时间内的价格: n);scanf(%d,&price);InitStack(&st1,n);InitStack(&st2,n);InitQueue(&Q);printf(n 请输入到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻: n);scanf(%s%d%d,&info,&num,&time);while(info0!=E)switch(info0)case
22、A:isexits=IsExistS(&st1,num); / 判断车牌号为 num 的车是否已在停车场或便 道isexitq=IsExistQ(&Q,num);if(!isexits&!isexitq)if(st1.top -st1.base CarNum !=num;p-)if(p=st1.base-1)printf( 停车场内没有车牌号为 %d 的车! n,num);elsefor(s=st1.top -1;s!=p;s-)Pop(&st1,&e1,&e2);Push(&st2,e1,e2);Pop(&st1,&e1,&e2);if(timee2)printf( 输入时间有误,请重新输入
23、! n);Push(&st1,e1,e2);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);elseprintf( 车牌号为 %d 的车停车费用为 %dn,e1,(time-e2)*price);if(st2.top !=st2.base )Pop(&st2,&e1,&e2);Push(&st1,e1,e2);if(Q.front !=Q.rear&st1.top-st1.base n )DeQueue(&Q,&e1);/ printf( 请输入车牌为 %d 的车从便道上驶入停车场的时间: n,e1);/scanf(%d,&t
24、ime);Push(&st1,e1,time);printf( 便道上的车牌号为 %d 的车驶入停车场 %d 处n,e1,st1.i );break;/switchprintf(n 请输入到达或离去信息( A:到达 D :离去 E:结束),车牌号,时刻:n);scanf(%s%d%d,&info,&num,&time);printf( 结束! n);(四 ) 程序使用说明及测试结果1 程序使用说明( 1)本程序的运行环境为 VC6.0 。(2)进入演示程序后即显示提示信息:停车场最多停车辆数: n=单位时间内的价格: price=到达或离去信息( A:到达 D :离去 E :结束),车牌号,时
25、刻: 输入第一部车的 info=A 、 num1 、time 车牌号为 num1 的车停在 1 处到达或离去信息( A:到达 D :离去 E:结束),车牌号,时刻: 输入第二部车的 info=A 、num2 、time 车牌号为 num2 的车停在 2 处到达或离去信息( A:到达 D :离去 E:结束),车牌号,时刻: 输入第 n 部车的 info=A 、numn 、time 车牌号为 numn 的车停在 n 处到达或离去信息( A:到达 D :离去 E:结束),车牌号,时刻: 输入第 n+1 部车的 info=A 、num 、time停车场已停满。车牌号为 num n+1 的车停在便道 1 处到达或离去信息( A:到达 D :离去 E:结束),车牌号,时刻:输入车的 info=D 、num 、time车牌号为 num 的车停车费用为 (time-e2)*price 便道上的车牌号为 num n+1 的车驶进停车场 1 处2 测试结果停车场最多停车辆数: 1单位时间内的价格: 5到达或离去信息( A:到达 D :离去 E :结束),车牌号,时刻:A 12345 1车牌号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海藻繁育工岗前创新思维考核试卷含答案
- 真空测试工复测水平考核试卷含答案
- 松节油合成反应工安全宣传知识考核试卷含答案
- 电子绝缘材料上胶工安全演练评优考核试卷含答案
- 电子电气产品能效检验员岗中新设备考核试卷含答案
- 数控刨工岗前绩效目标考核试卷含答案
- 固体饮料加工工基础管理评优考核试卷含答案
- 医疗临床辅助服务员岗位流程优化考核试卷含答案
- 木地板坯料制备工成果知识考核试卷含答案
- 制油工安全生产基础知识强化考核试卷含答案
- 自考《学前教育政策与法规》自学考试大纲
- 土壤和地下水污染防治管理隐患排查方案
- 中国精神分裂症防治指南(2025版 完整版)
- 《装饰工程计量与计价》教案
- 2026年秋人教版小学四年级数学上册教学计划及进度表(新课标新教材)
- 2026年蜀道投资集团招聘试题及答案
- 新浙教版2026-2027学年七年级上科学第3章 广袤浩瀚的宇宙 单元测试卷
- 云南云投康养投资有限责任公司招聘笔试题库2026
- 环氧自流平施工专项方案
- 沥青混凝土路面施工质量方案
- 三年级上册快乐读书吧《格林童话》阅读测试题及答案2
评论
0/150
提交评论