数据结构课程设计汇本停车场管理系统16830.pdf
《数据结构课程设计汇本停车场管理系统16830.pdf》由会员分享,可在线阅读,更多相关《数据结构课程设计汇本停车场管理系统16830.pdf(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目 录 一 课题分析.2 二 逻辑分析.2 2.1 数据结构的描述和每个基本操作的功能说明 .2 2.1 给出本程序包含的模块及模块之间的调用关系图 .3 2.3 写出重要部分的伪码算法.3 三 详细设计.4 3.1 数据结构的定义,及其基本操作的实现 .4 3.2 主函数和其他函数的实现或伪码算法.5 3.3 程序的层次结构的函数调用关系图.7 3.4 详细设计.8 四 程序源代码.10 五 程序调试与测试.18 5.1 主界面.18 5.2 具体操作.19 5.2.1进站时间与车牌号.19 5.2.2 车站已满,请进入临时车道.20 5.2.3 出站与收费.21 5.2.4 结束.21 5
2、.3 相关操作.21 六 程序中遇到的问题与解决方法.22 6.1 写提纲.22 6.2 在程序调试过程,遇到的相关问题.22 七 总结.26 八 参考文献.27 一 课题分析 a)该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下:1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理 2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照及到达或离去的时间 3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是离去,则输出汽车在停车场停留的时间和应缴纳的费用(在便道上停留的时间不
3、收费)4、要求栈以顺序结构实现;b)程序的输入,程序功能选择,字符型,A 为到达,D 离开,E 退出系统;车的编号是整型,输入数字即可;时间是float 类型,可精确到分钟 c)程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示停到便道上;车离开时,输出车的编号及其所需费用。d)测试数据,(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 以及 a)中的要求。其中A表示到达,D 表示离开,E 表示结束。二 逻辑分析 2.1 数据结构的描述和每个基本操作的功能说明 ADT stack 数据对
4、象:D=ai|ai CharSet,i=1,2,n,n0 数据关系:R1=|ai-1,ai D,i=2,n 基本操作:initstack()操作结果:构造一个空栈,并返回地址。gettop(&S)初使条件:栈 S 已存在。操作结果:栈 S 不为空,输出顶元素。stop(&S,e)初始条件:栈 S 已存在。操作结果:要栈 S 中栈顶插入新的栈顶元素 e。ADT queue 数据对象:D=ai|ai ElemSet,i=1,2,n,n0 数据关系:R1=|ai-1,ai D,i=2,n 约定其中 ai端为队列的头,an端为队列的尾 initqueue(&Q)操作结果:构造一个空栈,并返回地址。ge
5、thead(&S)初使条件:栈 S 已存在。操作结果:栈 S 不为空,输出顶元素。enqueue(&S,e)初始条件:栈 S 已存在。操作结果:要栈 S 中栈顶插入新的栈顶元素 e 2.1 给出本程序包含的模块及模块之间的调用关系图 本程序包含三个模块:1)主程序模块:Void main()初始化;do 接受命令;处理命令;while(命令!=“退出”)2)栈模块实现栈抽象数据类型 3)队列模块实现队列抽象数据类型 2.3 写出重要部分的伪码算法 车辆到达或者离开的伪码算法:do 输出菜单选项;如果选择 A,即车辆到达,则若栈不满,车辆进栈,停到停车场;否则,车入队,车停在便道上;如果选择 D
6、,即车辆离开,则 如果队不空并且栈不满,被选的车辆离开,队列上的车出队入栈;被选的车辆离开;计算时间及其所需费用;如果选择 E,退出程序;while(输入的菜单选项不正确)三 详细设计 3.1 数据结构的定义,及其基本操作的实现 typedef struct time int hour;int min;Time;typedef struct/车信息 char label10;float time;Car,Car2;typedef struct/车库信息 Car*top;Car*base;int stacksize;SqStack;typedef struct/临时车道 Car2*top2;Ca
7、r2*base2;int stacksize2;SqStack2;typedef struct QNode/车道信息 Car data;struct QNode*next;QNode,*QueuePtr;typedef struct QueuePtr front;QueuePtr rear;LinkQueue;3.2 主函数和其他函数的实现或伪码算法 void main()SqStack S;SqStack2 S2;InitStack(&S);InitStack2(&S2);InitQueue(&Q);/初始化 while(ch=1)do printf(nttttA-车 辆 到 达 ntttt
8、D-车 辆 离 开 nttttE-退出nttttA/D/E?b);scanf(%c,&status);getchar();while(status!=A&status!=a&status!=D&status!=d&status!=E&status!=e);if(status=A|status=a)/当车到达 输入车号;输入车到达时间;if(!StackFull(S)/栈不满 车入栈;printf(ntttt 继续请输入 1ntttt 放弃请输入 0?b);scanf(%d,&ch);getchar();/if else 车入队;printf(ntttt 继续请输入 1ntttt 放弃请输入 0
9、?b);scanf(%d,&ch);getchar();/else /if 当车到达 else if(status=D|status=d)/*当车离开*/do 输入车号;输入车离开时间;do Pop(&S,&car_M);if(car_D.label!=car_M.label)Push2(&S2,car_M);else car_I.time=car_M.time;while(car_D.label!=car_M.label);position_s-;while(!StackEmpty2(S2)/栈 2 不空 Pop2(&S2,&car_M);Push(&S,car_M);/while whil
10、e(!QueueEmpty(Q)&!StackFull(S)if(!StackFull(S)栈不满的话,临时车道上的车进栈 /if /while time=car_D.time-car_I.time;if(timebase=(Car*)malloc(STACK_INIT_SIZE*sizeof(Car);if(!(S-base)return ERROR;S-top=S-base;S-stacksize=STACK_INIT_SIZE;return OK;int StackEmpty(SqStack S)/栈空 if(S.top=S.base)return OK;else return ERRO
11、R;int StackFull(SqStack S)/栈满 if(S.top-S.base=STACK_INIT_SIZE)return OK;else return ERROR;int Push(SqStack*S,Car e)/入栈 if(S-top-S-base=STACK_INIT_SIZE)return OVERFLOW;else *(S-top+)=e;return OK;/else int Pop(SqStack*S,Car*e)/出栈 if(S-top=S-base)return ERROR;else*e=*(-(S-top);return OK;int GetTop(SqSt
12、ack*S,Car*e)/返回栈顶元素 if(S-top=S-base)return ERROR;else*e=*(S-top-1);return OK;typedef struct/临时车道 Car2*top2;Car2*base2;int stacksize2;SqStack2;int InitStack2(SqStack2*S2)S2-base2=(Car2*)malloc(STACK_INIT_SIZE*sizeof(Car2);if(!(S2-top2)return ERROR;S2-top2=S2-base2;S2-stacksize2=STACK_INIT_SIZE;return
13、 OK;int Push2(SqStack2*S2,Car2 e2)if(S2-top2-S2-base2=STACK_INIT_SIZE)return OVERFLOW;*(S2-top2+)=e2;return OK;int Pop2(SqStack2*S2,Car2*e2)if(S2-top2=S2-base2)exit(OVERFLOW);*e2=*(-(S2-top2);return OK;int StackEmpty2(SqStack2 S2)if(S2.top2=S2.base2)return OK;else return ERROR;typedef struct QNode/车
14、道信息 Car data;struct QNode*next;QNode,*QueuePtr;typedef struct QueuePtr front;QueuePtr rear;LinkQueue;int InitQueue(LinkQueue*Q)/初始化队列 Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode);if(!(Q-front)return ERROR;Q-front-next=NULL;return OK;int EnQueue(LinkQueue*Q,Car e)/插入元素 QueuePtr p;p=(QueuePtr)malloc(
15、sizeof(QNode);if(!p)return ERROR;p-data=e;p-next=NULL;Q-rear-next=p;Q-rear=p;return OK;int QueueEmpty(LinkQueue Q)/队空 if(Q.front=Q.rear)return OK;else return ERROR;int DeQueue(LinkQueue*Q,Car*e)QueuePtr p;if(Q-front=Q-rear)return ERROR;p=Q-front-next;*e=p-data;Q-front-next=p-next;if(Q-rear=p)Q-rear=
16、Q-front;free(p);return OK;void main()int i,position_s=1,position_q=1,mistime=1;int ch=1;char status;float time,money;LinkQueue Q;Car car_I,car_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 计算机科学与技术学院 婷 2
17、00917020117n);printf(ntttt 停车场tt);printf(n);printf(tttt 相关信息:n);printf(tttt 请输入字符(A D E)进行相关操作);printf(n);while(ch=1)do printf(nttttA.车辆到达 nttttD.车辆离开 nttttE.退出 nttttA/D/E?b);scanf(%c,&status);getchar();while(status!=A&status!=a&status!=D&status!=d&status!=E&status!=e);if(status=A|status=a)printf(nt
18、ttt 请输入车牌号:);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=0
19、;i80;i+)printf(-);printf(nn);printf(ntttt 欢迎您来我们车站!nntttt 您的车位号是:%d,position_s);position_s+;printf(n);printf(tttt 继 续 请 输 入 1ntttt 放 弃 请 输 入0?b);scanf(%d,&ch);getchar();/if else EnQueue(&Q,car_I);printf(ttttWelcome to our CAR POSITION,We are sorry thatnnttttOur position is full,but you are free to p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 停车场 管理 系统 16830
限制150内