数据结构课程设计 停车场管理系统_第1页
数据结构课程设计 停车场管理系统_第2页
数据结构课程设计 停车场管理系统_第3页
数据结构课程设计 停车场管理系统_第4页
数据结构课程设计 停车场管理系统_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、目 课题分析 . 2逻辑分析 . 22.1 数据结构的描述和每个基本操作的功能说明 2.1 给出本程序包含的模块及模块之间的调用关系图 2.3 写出重要部分的伪码算法 三 详细设计 43.1 数据结构的定义,及其基本操作的实现 .43.2 主函数和其他函数的实现或伪码算法.3.3 程序的层次结构的函数调用关系图 3.4 详细设计 程序源代 8程序调试测试 . 5.1 主界面 5.2 具体操作 5.2.1 站时间与车牌号.5.2.2 车已满,请进入临时车道.5.2.3 出与收费.195.2.4 结.195.3 相关操作 六 程序中遇到的问与解决方法 . 206.1 写提纲 6.2 在程序调试过程

2、,遇到的相关问题 七 总结 . 八 参考文献 25iiii i i-1, i一 课题分析 该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对 各种情况的处理,要求如下:要求以栈模拟停车场以队列模拟车场外的便道按照从终端读入的 数据序列进行模拟管理要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽 车牌照号码及到达或离去的时间该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便 道上的停车位置;若是离去,则输出汽车在停车场内停留的时间和应缴 纳的费用(在便道上停留的时间不收费)要求栈以顺序结构实现;程序的输入,程序功能选择,字符型A 到达,D 离开 退出系统; 车

3、的编号是整型,输入数字即可;时间是 float 类型,可精确到分钟程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示 停到便道上;车离开时,输出车的编号及其所需费用。测试数据A,1,5,2,10,3, 4,5,2,35),4, 以及 a)中的要求。 其中A表示到达, 表示离开, 表示结束。二 逻辑分析2.1 数结的述每基操的能明 数据对象:D=a | a n0 数据关系:R1=| a a D,i=2, 基本操作:initstack()操作结果:构造一个空栈,并返回地址。 gettop(&S)初使条件:栈 S 存在。ii iii i i-1, iin操作结果:栈 S 为空,输出顶元素

4、。初始条件:栈 S 存在。操作结果:要栈 S 栈顶插入新的栈顶元素 e。 queue数据对象:D=a | a ElemSet,i=1,2,n,n 数据关系:R1=| a a D,i=2, 约定其中 a 端为队列的头,a 端为队列的尾 initqueue(&Q)操作结果:构造一个空栈,并返回地址。 初使条件:栈 S 存在。操作结果:栈 S 为空,输出顶元素。 enqueue(&S,e)初始条件:栈 S 存在。操作结果:要栈 S 栈顶插入新的栈顶元素 e2.1 给本序含模及块间调关图 本程序含三个模块1)主程序块: )初始化;do接受命令;处理命令;(命令!=“退出栈模块实现栈抽象数据类型队列模块

5、实现队列抽象数据类型2.3 写重部的码法车辆到达或者离开的伪码算法:do输出菜单选项;如果选择 A,即车辆到达,则栈不满,车辆进栈,停到停车场; 否则,车入队,车停在便道上;如果选择 D,即车辆离开,则 如果队不空并且栈不满被选的车辆离开队列上的车出队入 栈;被选的车辆离开;计算时间及其所需费用;如果选择 E退出程序;(输入的菜单选项不正确)三 详细设计3.1 数结的义及基操的现 timeint hour;int 车信息 label10;float time;Car,Car2; 车库信息Car *top;Car *base;int 临时车道Car2 *top2;Car2 *base2;int

6、stacksize2; QNode/车道信Car *next;QNode,*QueuePtr; front; rear;LinkQueue;3.2 函和他数实或码法 main()SqStack S;SqStack2 S2;InitStack(&S);InitStack2(&S2);InitQueue(&Q);/初始化while(ch=1)doprintf(nttttA- 车 nttttD- 车 离 开 nttttE- 退 nttttA/D/E ?b);scanf(%c,&status);getchar();while(status!=A&status!=a&status!=D&status!=

7、d&status!=E&status!=e);当车到达输入车号;输入车到达时间;if(!StackFull(S)/栈不满车入栈;printf(ntttt 继续请输入 1ntttt 弃请输入 0 scanf(%d,&ch);getchar();/if车入队;printf(ntttt 继续请输入 1ntttt 弃请输入 0 scanf(%d,&ch);getchar();/else/if 当车到达 当车离开*do输入车号;输入车离开时间;doPop(&S,&car_M);if(car_D.label!=car_M.label)Push2(&S2,car_M);car_I.time=car_M.ti

8、me;while(car_D.label!=car_M.label);position_s-;while(!StackEmpty2(S2)/栈 2 空Push(&S,car_M);/whileif(!StackFull(S)栈不满的话,临时车道上的车进栈/if/whiletime=car_D.time-car_I.time;printf(nttttSorry!You input a wrong !nttttPlease check type again.n);/if计算停车时间;计算所需费用;/elseprintf(nttttWelcome ! you want to continue ?b)

9、;scanf(%d,&ch);getchar();while(!mistime); if exit(0);/出程序/第一个 /main3.3 程的次构函调关图Main()initstack(initqueueStackFullQueueEmpty3.4 详设根据老的要求,在里我主分析程序设中停车管理系统的站模 块:模块涉多个函数,过程次有初化选择进输入 A,车牌号,时。 若站满则车进入临车道,别记录时间车牌号及临时车道的位置 站不满临时车道上车进站该程序流程如下:车站程()选择 A进站进 入 临 时车道继续进站临时车道车进入车站结束四 程序源代码 stdio.h stdlib.h string

10、.h NULL 0 OK 1 -1 2/车库容量 int hour;int /间结点 车信息 label10;float time;Car,Car2; 车库信息Car *top;Car *base;int int InitStack(SqStack 栈的初始化S-base=(Car *)malloc(STACK_INIT_SIZE*sizeof(Car);if(!(S-base) return S-stacksize=STACK_INIT_SIZE; OK;int StackEmpty(SqStack 栈空if(S.top=S.base) OK; int StackFull(SqStack 栈

11、满 OK; int *S,Car e)/入栈if(S-top-S-base=STACK_INIT_SIZE) *(S-top+)=e; OK;/elseint Pop(SqStack *e)/出栈 *e=*(-(S-top); OK;int *e)/返回栈顶元素 if(S-top=S-base) OK; 临时车道Car2 *top2;Car2 *base2;int stacksize2;int *S2) *)malloc(STACK_INIT_SIZE*sizeof(Car2); S2-stacksize2=STACK_INIT_SIZE; OK;int Push2(SqStack2 e2)i

12、f(S2-top2-S2-base2=STACK_INIT_SIZE) OK;int Pop2(SqStack2 *S2,Car2 exit(OVERFLOW); OK;int StackEmpty2(SqStack2 OK; QNode/车道信Car *next;QNode,*QueuePtr; front; rear;LinkQueue;int *Q)/初始化队列Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode); Q-front-next=NULL; OK;int EnQueue(LinkQueue *Q,Car 插入元素 p;p=(QueuePt

13、r)malloc(sizeof(QNode);if(!p) return ERROR;p-data=e;p-next=NULL; OK;int 队空if(Q.front=Q.rear) OK; int *Q,Car *e) p;if(Q-front=Q-rear) p=Q-front-next;*e=p-data;Q-front-next=p-next;if(Q-rear=p)Q-rear=Q-front;free(p); OK; main()int i,position_s=1,position_q=1,mistime=1;int float LinkQueue Q;Car car_I,ca

14、r_D,car_M,car_S;SqStack S;SqStack2 S2;InitStack(&S);InitStack2(&S2);InitQueue(&Q);for(i=0;i80;i+)printf(*);printf(ntttt 停车场管理系统); printf(nnnttt09 算机科学与技术学院 刘婷 printf(ntttt 停车场 printf(n);printf(tttt 关信息:n);printf(tttt 输入字符(A D )进行相关操作); printf(n);while(ch=1)do200917020117n); 车 nttttD. 车 辆 离 开 nttttE.

15、 退 nttttA/D/E ?b);scanf(%c,&status);getchar();while(status!=A&status!=a&status!=D&status!=d&status!=E&status!=e);printf(ntttt 请输入车牌号 gets(car_I.label);/scanf(%d,&(car_I.label);printf(ntttt 请输入车辆到达时间: scanf(%f,&(car_I.time);if(!StackFull(S)/栈不满Push(&S,car_I);printf(nn);for(i=0;i80;i+) printf(-);print

16、f(n);printf(tttt 输车牌号:printf( %sn,car_I.label);printf(ntttt 请输出车辆到达时间);printf( %5.2f,car_I.time);printf(nn);for(i=0;i80;i+) printf(-);printf(nn);printf(ntttt 欢 迎 来 我 们 车 站 !nntttt 您 的 位 号 是: printf(n);printf(tttt 继请输入 弃请输入 0 scanf(%d,&ch);getchar();/if our CAR sorry thatnnttttOur position full,but y

17、ou free to nnttttyour car on our road.The of your carnttttis printf(ntttt 进站请输入 1ntttt 弃请输入 0 scanf(%d,&ch);getchar();/else/if 当到达 if(status=D|status=d)/*当离开*for(i=0;i80;i+)printf(*);printf(n);printf(ttttCAR POSITION);printf(Information);printf(nn);printf(ttttYour going to drive your away ,nttttPlea

18、se fill of form !n);printf(ttttYour car Number :); : ?b);scanf(%f,&(car_D.time);doPop(&S,&car_M);if(car_D.label!=car_M.label)Push2(&S2,car_M);car_I.time=car_M.time;while(car_D.label!=car_M.label);position_s-;while(!StackEmpty2(S2)/栈 2 空Push(&S,car_M);/whileif(!StackFull(S)/栈不满的话,临时车道上的车栈DeQueue(&Q,&

19、car_S);position_q-;printf(nttttThe just drived away car %d has the POSITION /if/whiletime=car_D.time-car_I.time;printf(nttttSorry!You input a wrong type again.n);/ifmoney=time*2;printf(nn);for(i=0;i80;i+)printf(nt);printf(tttYour car :%5.2f,car_D.label,money);printf(nn);printf(nn);/else :nttttThe ba

20、ck ! you want 1-contine/0-quit ?b);scanf(%d,&ch);getchar();while(!mistime);/else if exit(0);/退出程序/一个 while/main五 程序调试与测试5.1 主面5.2 具操 进站时间车牌号 车站已满请进入时车道 出站与收 结束5.3 相操1、输入(A,1,5时,显示是 CAR NUMBER :1 ARRIVE :5.00 2、入A,2,)时,显示 NUMBER :2 ARRIVE : 3、入D,15)时,显示 Your car number:1 The :入(A320时,显示 CAR NUMBER :3

21、 ARRIVE :输入(A,4,25时,显示 CAR POSITION ,We that Our position is full, you to car on position of your (A30显示 to our CAR POSITION ,We that position full, you are to your on our road position of car is2入(D,2,)时,显示 Your 2 :(D440时显示 The just drived away , car 5 has entered the CAR POSITION . Your number:4 T

22、he :入 时,程序结束,显示 any key to 。六 程序中遇到的问与解决方法6.1 写纲在编写车场管理系的时候首先列出一基本提,里面包括些基本 函数与数间的调用为整个序提供方向6.2 在序试程遇的关题1)环中当入的 ch!=1&ch!=0),序进入循环,其源码如下 while(ch=1)do 车 到 达 nttttD. 车 辆 离 开 nttttE. 退 出 nttttA/D/E ?b);scanf(%c,&status);getchar();while(status!=A&status!=a&status!=D&status!=d&status!=E&status!=e);print

23、f(ntttt 请输入车牌号 gets(car_I.label);/scanf(%d,&(car_I.label);printf(ntttt 请输入车辆到达时间: ?b)scanf(%f,&(car_I.time);if(!StackFull(S)/栈不满Push(&S,car_I);printf(nn);for(i=0;i80;i+) printf(-);printf(n);printf(tttt 输车牌号:printf( %sn,car_I.label);printf(ntttt 请输出车辆到达时间:);printf( %5.2f,car_I.time);printf(nn);for(i=

24、0;i80;i+) printf(-);printf(nn);printf(ntttt 欢 迎 您 来 我 车 站 !nntttt 您 的 车 位 号 是: printf(n);printf(tttt 进请输入 放弃请输入 0 ?b); scanf(%d,&ch);getchar();/if our thatnnttttOur position full,but you free to your nntttton road.The of is printf(ntttt 进站请输入 1ntttt 放弃请输入 ?b); scanf(%d,&ch);getchar();/else结束死环,修改后代码

25、如:while(ch=1)do 车 到 达 nttttA/D/E ?b);scanf(%c,&status);getchar();nttttD. 车 辆 离 开 退 出while(status!=A&status!=a&status!=D&status!=d&status!=E&status!=e);printf(ntttt 请输入车牌号 gets(car_I.label);/scanf(%d,&(car_I.label);printf(ntttt 请输入车辆到达时间: ?b)scanf(%f,&(car_I.time);if(!StackFull(S)/栈不满Push(&S,car_I);p

26、rintf(nn);for(i=0;i80;i+) printf(-);printf(n);printf(tttt 输车牌号:printf( %sn,car_I.label);printf(ntttt 请输出车辆到达时间:);printf( %5.2f,car_I.time);printf(nn);for(i=0;i80;i+) printf(-);printf(nn);printf(ntttt 欢 迎 您 来 我 车 站 !nntttt 您 的 车 位 号 是: printf(n);printf(tttt 进请输入 放弃请输入 0 ?b); scanf(%d,&ch);getchar();/

27、if our thatnnttttOur position full,but you free to your nntttton road.The of is printf(ntttt 进站请输入 1ntttt 放弃请输入 ?b); scanf(%d,&ch);if(ch)getchar();/else2) 初调试车牌号写为 int ,输入只能是数字但现实活中车牌号都为汉 +英文字母 +数,在改过程中,改字符型后来发现,是治标 不治本方法,经过次折腾试探,都没成功!相信只要坚,即使 个程序试不好,也关系,为只要尽全去做了就不会让自后悔。修改前序源代码: stdio.h stdlib.h NUL

28、L 0 OK 1 -1 车库容量 int hour;int /时间结点 车信息int label;float time;Car,Car2;printf(ntttt 请输入车牌号 :);printf(ntttt 请输入车辆到达时间: ?b);scanf(%f,&(car_I.time);修改后序源代码: stdio.h stdlib.h#include string.h NULL 0 OK 1 -1 车库容量 int hour;int /时间结点 车信息char label10;float time;Car,Car2;printf(ntttt 请输入车牌号 :);gets(car_I.label);/sca

温馨提示

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

评论

0/150

提交评论