《数据结构课程设计_停车场管理系统方案》由会员分享,可在线阅读,更多相关《数据结构课程设计_停车场管理系统方案(44页珍藏版)》请在金锄头文库上搜索。
1、. . . .目 录一 课题分析3二 逻辑分析32.1 数据结构的描述和每个基本操作的功能说明32.1 给出本程序包含的模块及模块之间的调用关系图42.3 写出重要部分的伪码算法4三 详细设计53.1 数据结构的定义,及其基本操作的实现53.2主函数和其他函数的实现或伪码算法63.3 程序的层次结构的函数调用关系图83.4 详细设计8四 程序源代码9五 程序调试与测试175.1 主界面175.2 具体操作185.2.1进站时间与车牌号185.2.2 车站已满,请进入临时车道195.2.3 出站与收费205.2.4 结束205.3 相关操作20六 程序中遇到的问题与解决方法216.1 写提纲21
2、6.2 在程序调试过程,遇到的相关问题21七 总结25八 参考文献26一 课题分析a) 该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下: 1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理 2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时间 3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费) 4、要求栈以顺序结构实现;b) 程序的输入,程序功能选择,字符型,A为到达,
3、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数据对象:D=ai | ai CharSet,i=1,2,n,n0数据关系:R1=| ai-1, ai D
4、,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)操作结果:构造一个空栈,并返回地址。gethead(&S)初使条件:栈S已存在。操作结果:栈S不为空,输出顶元素。enqueue(&S,e)初始条件:栈S已
5、存在。操作结果:要栈S中栈顶插入新的栈顶元素e2.1 给出本程序包含的模块及模块之间的调用关系图本程序包含三个模块:1)主程序模块:Void main()初始化;do接受命令;处理命令;while(命令!=“退出”)2)栈模块实现栈抽象数据类型3)队列模块实现队列抽象数据类型2.3 写出重要部分的伪码算法 车辆到达或者离开的伪码算法:do 输出菜单选项; 如果选择A,即车辆到达, 则若栈不满,车辆进栈,停到停车场; 否则,车入队,车停在便道上; 如果选择D,即车辆离开,则 如果队不空并且栈不满,被选的车辆离开,队列上的车出队入栈;被选的车辆离开;计算时间及其所需费用; 如果选择E,退出程序;w
6、hile(输入的菜单选项不正确)三 详细设计3.1 数据结构的定义,及其基本操作的实现typedef struct timeint 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;Car2 *base2;int stacksize2;SqStack2;typedef struct QNode/车道信息Car data;struc
7、t QNode *next;QNode,*QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;3.2主函数和其他函数的实现或伪码算法void main()SqStack S;SqStack2 S2;InitStack(&S);InitStack2(&S2);InitQueue(&Q);/初始化while(ch=1)do printf(nttttA-车辆到达 nttttD-车辆离开 nttttE-退出nttttA/D/E ?b);scanf(%c,&status);getchar();while(status!=A&stat
8、us!=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();/ifelse 车入队;printf(ntttt继续请输入1ntttt放弃请输入 0 ?b);scanf(%d,&ch);getchar();/else /if当车到达 else if(status=D|status=d)/*当车离开*/ do输入车号;输入车离
9、开时间;doPop(&S,&car_M);if(car_D.label!=car_M.label)Push2(&S2,car_M);elsecar_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);/whilewhile(!QueueEmpty(Q)&!StackFull(S)if(!StackFull(S)栈不满的话,临时车道上的车进栈/if/whiletime=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)