停车场管理课程设计报告书_第1页
停车场管理课程设计报告书_第2页
停车场管理课程设计报告书_第3页
停车场管理课程设计报告书_第4页
停车场管理课程设计报告书_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、 . . . 一、 绪论数据结构是计算机程序设计的重要理论技术基础,也是计算机学科的核心课程,而课程设计则是考察我们学生对数据结构的熟悉程度与掌握程度。此次的课程设计是关于停车场管理系统的编程,需要考查的是对栈和队列的熟练使用,以与对基础知识的掌握。这次的课程设计主要是用栈和队列实现模拟停车场的基本原理,栈的顺序存储结构和队列的链式存储结构的定义和算法描述,同时也学会了编写停车场问题的程序。二、程序设计2.1、 需求分析(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。进入主菜单前需要输入收费标准以与停车场所能容纳的车辆数目。(2)当有车辆从停车场离开时,等待的车辆按顺序进入

2、停车场停放。实现停车场的调度功能。(3)用顺序栈来表示停车场,链队表示停车场外的便道。(4)显示停车场信息和便道信息。(5)程序执行的命令为:车辆进入停车场 车辆离开停车场 显示停车场的信息。2.2、 概要设计抽象数据类型定义(1)栈的抽象数据类型定义AST Stack数据对象:D=ai|aiElemSet,i=1,2,.,n, n0数据关系:R1=<ai-1,ai>|ai-1,aiD,i=2,.,n约定an端为栈顶,a1端为栈底。基本操作: InitStack(&S) 操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已存

3、在。操作结果:栈S被销毁。ClearStack(&S)初始条件:栈S已存在。操作结果:将栈S清为空栈。StackEmpty(S)初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TRUE,否则FALSE。StackLength(s)初始条件:栈S已存在。操作结果:返回S的元素个数,既栈的长度。GetTop(S,&e)初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶元素。Push(&S,e)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。Pop(&S,&e)初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。Stack

4、Traverse(S,visit()初始条件:栈S已存在且非空。 操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。一旦visit()失败,则操作失效。ADT Stack(2)队列的抽象数据类型定义ADT Queue数据对象:D=ai|aiElemSet,i=1,2,.,n,n0数据关系:R1=<ai-1,ai>|ai-1,aiD,i=2,.,n约定其中a1端为队列头,an为队列尾。基本操作:InitQueue(&Q)操作结果:构造一个空队列Q。DestroyQueue(&Q)初始条件:队列Q已存在。操作结果:队列Q被销毁,不再存在。Cl

5、earQueue(&Q)初始条件:队列Q已存在。操作结果:将Q清为空队列。QueueEmpty(Q)初始条件:队列Q已存在。操作结果:若Q为空队列,则返回TRUE,否则FALSE。QueueLength(Q)初始条件:队列Q已存在。操作结果:返回Q的元素个数,即队列的长度。GetHead(Q,&e)初始条件:Q为非空队列。操作结果:用e返回的队头元素。EnQueue(&Q,e)初始条件:队列Q已存在。操作结果:插入元素e为Q的新的队尾元素。DeQueue(&Q,&e)初始条件:Q为非空队列。操作结果:删除Q的队头元素,并用e返回其值。QueueTrave

6、rse(Q,visit()初始条件:Q已存在且非空。操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。一旦visit() 失败,则操作失败。ADT Queue 2.3、 详细设计2.3.1、数据类型的定义int MAX; /*定义一个全局变量用来存储车库最大容量*/ float price;/* 定义一个全局变量用来存储每车每小时的费用*/ typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10; Time reach; Time leave; Car

7、; /*车辆信息结点*/ typedef struct NODE Car *stack100; int top; SqStack; /*停车站*/ typedef struct car Car *data; struct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ 2.3.2、主要模块的算法描述1、功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、主菜单显示停车场信息(1)、“到达”模块即为车辆到达:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便

8、道等待。如下图流程图1所示:车辆到达停车场是否满是否进入便道进入停车场结束 图2-1车辆到达流程图(2)“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如下图流程图2所示:车辆离开停车场是否为空提示没有车车辆离开 否 是便道是否有车 是 否结束图2-2车辆离开流程图(3)主菜单显示模块:停车场显示中会有四种选择,选择1表示车辆到达,选择2表示车辆离开,选择3表示显示停车场信息以与便道信息,选择4表示退出停车管理系统。如下图流程图3所示:欢迎进入停车管理系统主菜单 1 2 3 4退出管理系统停车场信息车辆离开车辆到达图2-3主菜单显示流程图2.4、编码实现本程序主要分为四部分

9、:(1)主函数与程序框架、(2)车辆到达模块、(3)车辆离开模块、(4)显示车辆信息模块。(1)主函数void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停车站*/ InitStack(&Out); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf("请输入停车场的容量:");scanf("%d",&MAX);printf("请输入停车场的收费标准(元/小

10、时):");scanf("%f",&price);printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。n",MAX,price);printf(" -欢迎使用本停车管理系统 - n");printf("*n");printf(" 1. 车辆到达 n");printf(" 2. 车辆离开 n");printf(" 3. 停车场信息 n");printf(" 4. 退出系统 n");printf(&quo

11、t;*n");while(1) ch=getch();switch(ch) case 49:arrive(&In,&Wait);break; /*车辆到达*/ case 50:leave(&In,&Out,&Wait);break; /*车辆离开*/ case 51:info(In,Wait);break; /*输出车站信息*/case 52:printf("使用!");exit(0); /*退出主程序*/ default:printf("n错误,请重新按键选择!"); /*49-52分别表示"

12、1"-"4"这四个按键的键值*/system("CLS");printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。n",MAX,price); printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。n",MAX,price);printf(" -欢迎使用本停车管理系统 - n");printf("*n");printf(" 1. 车辆到达 n");printf(" 2. 车辆离开 n");pri

13、ntf(" 3. 停车场信息 n");printf(" 4. 退出系统 n");printf("*n"); (2)车辆到达模块int arrive(SqStack *In,LinkQueue *W) /*车辆到达*/ Car *p; QNode *t; p=(Car *)malloc(sizeof(Car); flushall(); printf("n停车场还有%d停车位(若停车位为0,车可先进入便道等待)",MAX-In->top);printf("n请输入车牌:"); gets(p-&

14、gt;num); if(In->top<MAX) /*停车场未满,车进车场*/ In->top+;printf("n停车的位置:%d号停车位。",In->top); printf("n请输入车到达的时间:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min); In->stackIn->top=p;printf("请按任意键返回");getch(); return(1); else /*停车场已满,车进便道

15、*/ printf("n停车位已满,该车须在便道等待!"); t=(QNode *)malloc(sizeof(QNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; printf("请按任意键返回"); getch();return(1); (3)车辆离开模块算法分析void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*车辆离开*/ int room;Car *p,*t;QNode *q;/*开始定义一个整型

16、变量room,用来记录要离开的车辆在停车场的位置,定义车辆结点指针p和t和队列结点指针q。*/ if(In->top>0) /*有车*/ while(1) printf("n请输入车在停车场的位置(1-%d):",In->top); scanf("%d",&room); if(room>=1&&room<=In->top) break; /*判断停车场是否有车,如果有车,就输入要离开的车辆在停车场的位置,否则就提示停车场没车。这里用了while循环语句,如果输入的车辆位置超出围,就要重新输入。*

17、/while(In->top>room) /*车辆离开*/Out->top+;Out->stackOut->top=In->stackIn->top;In->stackIn->top=NULL;In->top-;p=In->stackIn->top; In->stackIn->top=NULL;In->top-;while(Out->top>=1) In->top+;In->stackIn->top=Out->stackOut->top; Out->stac

18、kOut->top=NULL; Out->top-; PRINT(p,room); if(W->head!=W->rear)&&In->top<MAX) q=W->head->next;t=q->data;In->top+; printf("n便道的%s号车进入车场第%d号停车位。",t->num,In->top); printf("n请输入现在的时间:"); scanf("%d:%d",&(t->reach.hour),&(

19、t->reach.min); W->head->next=q->next;if(q=W->rear) W->rear=W->head; In->stackIn->top=t; free(q);/*判断(W->head!=W->rear)&&In->top<MAX else printf("n停车场里没有车n"); /*没车*/printf("请按任意键返回");getch();(4)停车场显示信息void PRINT(Car *p,int room) /*输出停

20、车站车的信息*/ int A1,A2,B1,B2; printf("n请输入车离开的时间:"); scanf("%d:%d",&(p->leave.hour),&(p->leave.min); printf("n车牌:"); puts(p->num); printf("n车到达的时间是: %d:%d",p->reach.hour,p->reach.min); printf("车离开的时间是: %d:%d",p->leave.hour,p->

21、;leave.min); A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min; printf("n费用为: %2.1f元",(B1-A1)+(B2-A2)/60.0)*price); free(p); 2.5、调试分析与结果测试数据与结果如下:输入停车场的容量4,收费5元/小时,接着查看停车场的信息;如下图2-4所示:图2-4停车场系统初始化示意图接着输入4辆车的信息,然后查看停车场信息,如图2-5所示:图2-5车辆进入停车场示意图再输入1辆车的信息,然后查看停车场

22、信息,如图2-6(a)和图2-6(b)所示:图2-6(a)车辆进入便道示意图图2-6(b)车辆进入便道示意图最后选择车辆离开,输入第2辆车离开,再查看停车场信息,如图2-7所示:图2-7(a)车辆离开示意图图2-7(b)车辆离开示意图四、总结与体会通过这次课程设计使我充分的理解了用栈和队列实现模拟停车场的基本原理,知道了栈的顺序存储结构和队列的链式存储结构的定义和算法描述,同时也学会了编写停车场问题的程序。虽然此次的程序不是很完备,没有加入一些更完善的功能,但是总体还是一个比较能体现数据结构知识点能力的程序了,当然只是相对于我这个初学者来说。在刚开始编程的时候,我感到有点无从下手,但经过对题目

23、的详细分析和思考之后,我就知道具体应该做什么,怎么做了。经过几天的研究,我顺利的完成了这个程序,完成这个程序,我学到了很多东西,这是在课堂上无法做到的。在此我非常要感指导老师,感老师的细心认真的辅导,让我对数据结构这门课程掌握得更好,懂得更多,她教我怎么分析问题,应该要注意些什么,最后还指出我存在的问题。五、参考文献1 黄同成,黄俊民,董建寅数据结构M:中国电力,20082 董建寅,黄俊民,黄同成数据结构实验指导与题解M:中国电力,20083 严蔚敏,吴伟民. 数据结构(C语言版)M. :清华大学,20024 振鹏,晓莉,郝杰数据结构M:中国铁道,2003六、源程序清单#include &qu

24、ot;stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h"int MAX; /*定义一个全局变量用来存储车库最大容量*/ float price; /*每车每小时的费用*/ typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10; Time reach; Time leave; Car; /*车辆信息结点*/ typedef str

25、uct NODE Car *stack100; int top; SqStack; /*停车站*/ typedef struct car Car *data; struct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ void InitStack(SqStack *); /*初始化栈*/ int InitQueue(LinkQueue *); /*初始化便道*/ int arrive(SqStack *,LinkQueue *); /*车辆到达*/ void leave(Sq

26、Stack *,SqStack *,LinkQueue *); /*车辆离开*/ void info(SqStack,LinkQueue); /*显示停车场信息*/ void PRINT(Car *p,int room);void InitStack(SqStack *s) /*初始化栈*/ int i; s->top=0; for(i=0;i<=MAX;i+) s->stacks->top=NULL; int InitQueue(LinkQueue *Q) /*初始化便道*/ Q->head=(QNode *)malloc(sizeof(QNode); if(Q

27、->head!=NULL) Q->head->next=NULL; Q->rear=Q->head; return(1); else return(-1); void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停车站*/ InitStack(&Out); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf("请输入停车场的容量:");scanf("%d&q

28、uot;,&MAX);printf("请输入停车场的收费标准(元/小时):");scanf("%f",&price);printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。n",MAX,price);printf(" -欢迎使用本停车管理系统 - n");printf("*n");printf(" 1. 车辆到达 n");printf(" 2. 车辆离开 n");printf(" 3. 停车场信息 n")

29、;printf(" 4. 退出系统 n");printf("*n");while(1) ch=getch();switch(ch) case 49:arrive(&In,&Wait);break; /*车辆到达*/ case 50:leave(&In,&Out,&Wait);break; /*车辆离开*/ case 51:info(In,Wait);break; /*输出车站信息*/case 52:printf("使用!");exit(0); /*退出主程序*/ default:printf(&

30、quot;n错误,请重新按键选择!"); /*49-52分别表示"1"-"4"这四个按键的键值*/system("CLS");printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。n",MAX,price); printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。n",MAX,price);printf(" -欢迎使用本停车管理系统 - n");printf("*n");printf(" 1. 车辆到达

31、n");printf(" 2. 车辆离开 n");printf(" 3. 停车场信息 n");printf(" 4. 退出系统 n");printf("*n"); int arrive(SqStack *In,LinkQueue *W) /*车辆到达*/ Car *p; QNode *t; p=(Car *)malloc(sizeof(Car); flushall(); printf("n停车场还有%d停车位(若停车位为0,车可先进入便道等待)",MAX-In->top);pri

32、ntf("n请输入车牌:"); gets(p->num); if(In->top<MAX) /*停车场未满,车进车场*/ In->top+;printf("n停车的位置:%d号停车位。",In->top); printf("n请输入车到达的时间:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min); In->stackIn->top=p;printf("请按任意键返回");get

33、ch(); return(1); else /*停车场已满,车进便道*/ printf("n停车位已满,该车须在便道等待!"); t=(QNode *)malloc(sizeof(QNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; printf("请按任意键返回"); getch();return(1); void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*车辆离开*/ int room; Car *p,

34、*t; QNode *q; /*判断车场是否有车*/ if(In->top>0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf("n请输入车在停车场的位置(1-%d):",In->top); scanf("%d",&room); if(room>=1&&room<=In->top) break; while(In->top>room) /*车辆离开*/ Out->top+; Out->stackOut->top=In->stackI

35、n->top; In->stackIn->top=NULL; In->top-; p=In->stackIn->top; In->stackIn->top=NULL; In->top-; while(Out->top>=1) In->top+; In->stackIn->top=Out->stackOut->top; Out->stackOut->top=NULL; Out->top-; PRINT(p,room); /*判断通道上是否有车与车站是否已满*/ if(W->he

36、ad!=W->rear)&&In->top<MAX) /*便道的车辆进入停车场*/ q=W->head->next; t=q->data; In->top+; printf("n便道的%s号车进入车场第%d号停车位。",t->num,In->top); printf("n请输入现在的时间:"); scanf("%d:%d",&(t->reach.hour),&(t->reach.min); W->head->next=q->next;if(q=W->rear) W->rear=W->head; In->stackIn->top=t; free(q); else printf("n停车场里没有车n"); /*没车*/printf("请按任意键返回&

温馨提示

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

最新文档

评论

0/150

提交评论