ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:79.24KB ,
资源ID:24542460      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24542460.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(停车场管理系统.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

停车场管理系统.docx

1、停车场管理系统数据结构课程设计报告停车场管理系统姓 名: 学 号: 院 系 : 班 级 : 二一三年六月一、需求分析1.用栈来表示停车场,用队列来表示停车道。2.用户需输入车辆的必要信息,如车辆的到达或离开,汽车牌号以及到达或离去的时刻。停车场的容量及单位时间的停车费由编程序者自行设置,结构需输出车辆停车所需缴纳的费用。3.本程序要求对车辆的动态能够输出具体的信息内容,包括停车或离开的时间,位置,及所需缴纳的停车费。4演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,有用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在其后。5.测试数据为:N=2

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表示到达,D表示离去,E表示输入结束。6.程序执行的命令为:1)创建栈和队列; 2)对车辆的行为进行相应的处理; 3)输出车辆的信息二、概要设计1.设定栈的抽象数据类型定义:ADT Stack 数据对象:D=ai|ai属于Elem,i=1,2,n, n=0 数据关系:R1=| ai-1,ai属于D,i=2,,n 基本操作: initStack(&S) 操作结果:构造一个空栈S. pop(&S,&e)

3、 初始条件:栈S已存在。 操作结果:删除S的栈顶元素,并以e返回其值。 push(&S,&e ) 初始条件:栈S已存在。 操作结果:在栈S的栈顶插入新的栈顶元素e。 lengthstack(S) 初始条件:栈S已存在。 操作结果:返回S中的元素个数,即栈的长度。ADT Stack;2.设定队列的抽象数据类型定义:ADT Queue 数据对象:D=ai| ai属于Elem, i=1,2,,n, n=0 数据关系:R1=| ai-1,ai 属于D,i=2,n 基本操作: initqueue(&Q) 操作结果:构造一个空队列Q. enqueue(&Q, e) 初始条件:队列Q已存在。 操作结果:插入

4、元素e为Q的新的队尾元素。 dequeue(&Q, &e) 初始条件:Q为非空队列。 操作结果:删除Q的对头元素,并用e返回其值。 Lengthqueue(Q) 初始条件:队列Q已存在。 操作结果:返回Q的元素个数,即队列的长度。ADT Queue3.本程序主要包括三个模块主程序模块;int main() 初始化; do 接受命令; 处理命令; while(命令!=退出);处理车辆到达模块;处理车辆离开模块;各模块之间的调用关系如下: 处理车辆到达模块 主程序模块处理车辆离开模块三、详细设计1.车信息typedef struct car_infor int licen_tag; int tim

5、e; SElemType; 2.栈类型typedef struct SElemType *base1; SElemType *top1; SElemType *base2; SElemType *top2; Stack; 栈的基本操作是指如下void initStack(Stack &S) /初始化通道与临时道void pop(&S,&e) /删除S的栈顶元素,并以e返回其值。 Void push(&S,&e ) /在栈S的栈顶插入新的栈顶元素e。 Void lengthstack(S) /返回S中的元素个数,即栈的长度。3.队列类型void initQueue(LinkQueue &Q) /

6、初始化便道void EnQueue(LinkQueue &Q,int licen_tag,int time) /通道满时,车辆进便道void enqueue(&Q, e) /插入元素e为Q的新的队尾元素。 Void dequeue(&Q, &e) /删除Q的对头元素,并用e返回其值。 Void Lengthqueue(Q) /返回Q的元素个数,即队列的长度。4.函数源码 # include # include # define N 2 # define NULL 0 # define PRICE 1 typedef struct car_infor int licen_tag; int tim

7、e; SElemType; /定义车信息 typedef struct SElemType *base1; SElemType *top1; SElemType *base2; SElemType *top2; Stack; /定义栈 typedef struct Qnode int licen_tag; int time; struct Qnode *next; Qnode,*QueuePtr; typedef struct QueuePtr front; QueuePtr rear; LinkQueue; /定义队列 void initStack(Stack &S) /初始化通道与临时道

8、S.base1=(SElemType *)malloc(N*sizeof(SElemType); S.top1=S.base1; S.base2=(SElemType *)malloc(N*sizeof(SElemType); S.top2=S.base2; void initQueue(LinkQueue &Q) /初始化便道 Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode); Q.front-next=NULL; void Push1(Stack &S,int licen_tag,int time) /车辆进通道 S.top1-licen_tag=

9、licen_tag; S.top1-time=time; S.top1+; void Push2(Stack &S) /让路的车辆从通道暂时离开,进临时道 S.top2-licen_tag=S.top1-licen_tag; S.top2-time=S.top1-time; S.top2+; S.top1-; void Pop(Stack &S) /车辆从临时道回到通道 S.top2-; S.top1-licen_tag=S.top2-licen_tag; S.top1-time=S.top2-time; S.top1+; void EnQueue(LinkQueue &Q,int licen

10、_tag,int time) /通道满时,车辆进便道 QueuePtr p; p=(QueuePtr)malloc(sizeof(Qnode); p-next=NULL; Q.rear-next=p; Q.rear=p; p-licen_tag=licen_tag; p-time=time; void DeQueue(LinkQueue &Q,Stack &S) /便道上的车辆进通道 QueuePtr p; p=Q.front-next; Q.front-next=p-next; if(Q.front-next=NULL)Q.rear=Q.front; S.top1-licen_tag=p-l

11、icen_tag; S.top1-time=p-time; S.top1+; free(p); int judge1(LinkQueue Q,Stack S,int licen_tag) /判断通道及便道与进来或离去的车是否有相同的牌照 SElemType *p; QueuePtr q=Q.front-next; p=S.base1; while(p-licen_tag!=licen_tag & p!=S.top1)p+; if(p=S.top1)/通道中没有相同的牌照 int i=1; while(q) if(q-licen_tag=licen_tag) i=0; q=NULL; /直接跳出

12、循环 else q=q-next; return i; else return 0; void main() int j; char A_D; int licen_tag,time; int lasttime=0; Stack S; LinkQueue Q; initStack(S); initQueue(Q); printf(第一辆车的信息为: ); A_D=getchar(); while(A_D!=E) scanf(%d %d,&licen_tag,&time); /*char y_n; do /licen_tag与time也可以这样来确定一下 if(A_D=A)printf(确实是车辆

13、进道吗?yes Or no :); if(A_D=D)printf(确实是车辆离去吗?yes Or no :); y_n=getchar(); if(y_n=n) printf(请输入正确的 A or D :); A_D=getchar(); while(y_n!=y);*/ if(A_D=A) j=judge1(Q,S,licen_tag); while(!j)/直到牌照正确为止 printf(入口的“牌照”重叠错误,请重输n重新输入的“牌照”为: ); scanf(%d,&licen_tag); j=judge1(Q,S,licen_tag); while(timenext; +i; pr

14、intf(车辆 %d 在便道上的位置为: %dnn下一辆车的信息为: ,licen_tag,i); else printf(车辆 %d 在通道上的位置为: ,licen_tag); Push1(S,licen_tag,time); printf(%dnn下一辆车的信息为: ,S.top1-S.base1); lasttime=time; /进去的时间为最新时间,用来控制输入时间是否正确 if(A_D=D) /输入的信息为D if(S.top1=S.base1)printf(通道中没有车,不能离去n正确的车辆信息为:); else j=judge1(Q,S,licen_tag);/j=1表示没有

15、可以离去的车辆 while(j)/直到牌照正确为止 printf(离去的“牌照”错误,请重输n重新输入的“牌照”为: ); scanf(%d,&licen_tag); j=judge1(Q,S,licen_tag); while(timelicen_tag!=licen_tag & S.top1!=S.base1) /从通道中去找需离去的车辆 Push2(S); if(S.top1-licen_tag!=licen_tag & S.top1=S.base1) /通道中没有符合离去的车辆 S.top1+; /执行完上一while语句时,栈底元素并未出栈 while(S.top2!=S.base2

16、)Pop(S); /从临时道中回到通道中 QueuePtr p=Q.front-next; QueuePtr q=p; while(p & p-licen_tag!=licen_tag) q=p; p=p-next; q-next=p-next; printf(车辆 %d 在便道上,离去时不付费nn下一辆车的信息为: ,licen_tag); if(p-next=NULL)Q.rear=q; free(p); else /通道中有符合离去的车辆 printf(车辆 %d 的停留时间为:%d minn,licen_tag,time-S.top1-time); printf(车辆 %d 应付费%d

17、元nn下一辆车的信息为: ,licen_tag,PRICE*(time-S.top1-time); /不需要改变S.top1;执行完上面倒数第三个while语句时,栈底元素并未出栈 while(S.top2!=S.base2)Pop(S); /临时道中的车辆回到通道中 if(Q.front!=Q.rear) /便道中的车辆进通道 Q.front-next-time=time; /进通道的时间为上一辆离去的时间 DeQueue(Q,S); lasttime=time; /离去的时间为最新时间,用来控制输入时间是否正确 /if(A_D=D) /* else printf(入口的A_D输入有误,请重

18、输n);为什么不能用*/ A_D=getchar(); /while 函数的调用关系图反映了演示程序的层次结构停车场仍有空余,入栈成功stack.push()车辆进入A停车场已满,入栈失败,入队列line.enquene()后来车辆进入临时栈temp.push(stack.pop()主程序车辆离开D 该车离开stack.pop()让道车回停车场,临时栈弾栈stack.push(temp.pop()便道车入栈stack.push(line.dequene()四、调试分析1. 本次作业是设计停车场的管理系统,就需要判断车牌号,及时间的输入的正确性,输入的数据有比较严格的要求,必须符合实际。因此对数据需要多次判断。2.处理车辆到达模块和处理车辆离开模块其空间复杂度为O(m*n);3.调试过程中,车离开的那一部分经常出现错误,运行结果和预想的不太一样,后来发现是停车场的计数器那出现了问题,使离开后再进入停车场的位置发生了错误。如果输入的离开时间比到达的时间小,则会出现付费为负值。五、用户手册1.本程序的运行环境为DOS操作系统。2.进入演示程序后,即显示文本方式的用户界面。接受其他命令后即执行相应运算和显示相应结果。六、测试结果输入A、1、5:构造第一辆车的信息;输入A、2、10:构造下一辆车的信息;依次输入测试数据,结果如用户手册截图。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1