停车管理系统_第1页
停车管理系统_第2页
停车管理系统_第3页
停车管理系统_第4页
停车管理系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构课程设计停车管理系统计算机科学与技术专业14级数据结构课程设计报告设计题目: 停车管理系统 学 号: 26645451213656 姓 名: 吴 立 华 指导教师: 李 星 豪 2015年 9 月 15 日目录目录1引言12.课程设计的目的和任务22.1课程设计的目的22.2课程设计的任务23. 设计方案和实施23.1总体设计23.2基本操作33.3详细设计34.运行调试结果45.总结与致谢76.附录8源程序代码:87.参考文献13引言数据结构是一门专业基础课,它对学习者的要求很明确:学会分析,研究计算机加工的数据结构的特性,以便为应用设计所需的数据选择适当的逻辑结构、存储结构及相应的

2、算法,并初步掌握算法的时间分析和空间分析的技术。其次,该课程的学习过程也是复杂程序设计的训练过程,要求学习者编写的程序结构或设计的程序结构体清楚、正确、易读,符合软件工程的规范。在这个科技发达的时代,汽车对于我们来说越来越普遍,人们对于停车场管理也更加信息化。本系统主要是运用c语言和数据结构的相关知识,用栈来模拟停车场,队列来模拟便道实现汽车进入和离开的管理,用简单的数据计算对汽车进行收费标准。使车主更清楚了解停车场信息,车主可以根据系统的提示进行每一项操作。本次课程设计就是对停车场基本的信息及停车费用的管理做一个简单的设计,主要实现对停车的信息录入,修改,删除,显示,添加,查找等几个方面的功

3、能。本设计采用c语言作为数据结构和算法的描述语言。本设计采用目前最通用的程序设计语言之一- C语言作为数据结构和算法的描述语言。题目:停车场管理系统设计2.课程设计的目的和任务2.1课程设计的目的(1)要求学生能够熟练掌握c+语言的基本知识和技能(2)基本掌握面向对象程序设计的基本思路和方法(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题(4)开发一个中小型系统,掌握系统研发全过程(5)培养分析问题,解决实际问题的能力2.2课程设计的任务设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若

4、停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。设计要求:1模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。2从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离开”;(2)汽车牌照号码;(3)“到达”或“离开”的时刻。3与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则

5、输出其在停车场中停留的时间和应交的费用。程序运行环境:Microsoft Visual C+ 6.0&& DOS3. 设计方案和实施3.1总体设计停车场管理系统分为三个模块,即:车辆到达.离开.列表显示图1:停车管理系统总模块3.2基本操作1数据结构说明(1)用到两个堆栈:一个为车场栈;另一个为临时栈temptypedef struct NODECarNode *stackMAX+1;int top;SeqStackCar; /*模拟车场*/1(2)一个队列结构,存储便道车辆信息:typedef struct NodeQueueNode *head;QueueNode *rea

6、r;LinkQueueCar; /*模拟便道*/3.3详细设计1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。图2:到达模块2.“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。图3:离开模块3. “显示”模块:显示模块有两个显示选项,即:车场与便道。图4:显示模块4.运行调试结果一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性)1第一组测试用例(1)测试输入:停车场的车辆离开,如下表:表1:测试输入图5:测试(2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。(3)正

7、确输出:第一次离开的是 CD221,应交费2.95元。第二次时,当在输入65时,应该提示输入错误,重输。(4)实际输出:(5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制。(6)当前状态:已改正2第二组测试用例(1)测试输入:连续6辆车到达,如下表:表2:测试输入(2)测试目的:测试到达方法与列表显示方法能否正确完成。(3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。(4)实际输出:图6:输出结果表3:测试输入(5)错误原因:没有作出时间先后的判断,而是先输入先进入。(6)当前状态:待修改3第三组测试用例(1)测试输入:接上一步输入离开信息,下表

8、:(2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。(3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。(4)实际输出:图7:实际输出(5)错误原因:没有错误。(6)当前状态:通过5.总结与致谢通过这两周的程序设计,加深了我对数据结构这门课程所学内容的进一步的理解和掌握,同时,通过对停车场管理系统的开发,使得我将计算机所学知识与实际问题很好的相连在一起。在这次课程设计中,不仅培养了我开发中小程序的能力,而且也培养了我的团队合作能力。在这次对停车管理系统的开发过程中,我们小组成员相互合作,互相帮助,其中有程序功能成功实现时的欣喜,也有遇到问题,解决问题时的执着以

9、及迷茫,在这次课程设计中使得我很好的了解了在开发程序中合作的重要性。让我们初步有了编写小程序的能力,我们对很多的函数有了新的认识,也学会了运用多种函数,也明白了编写软件的基本过程和基本方法。编写软件的过程中我们又学到了曾经自己不知道的函数或是自己不会的函数的用法,在软件一次次调试失败下,曾今想过要放弃,但是我们小组互相鼓励,最后还是坚持了下来,自己在编程时经常因为一些类似于“少了分号”这样的简单错误而运行不出来,不够仔细认真,给自己带来麻烦,以后无论是程序设计还是今后的生活都要仔细认真,不能粗心大意。 在此,感谢在本次课程设计中帮助过我的所有老师!感谢您们!6.附录源程序代码:#include

10、<iostream.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 5 /*车库容量,可以根据实际情况改变*/ #define price 0.01 /*一辆车每分钟费用,可变*/ typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10; Time reach; Time leave; CarNode; /*车辆信息结点*/ typedef

11、struct NODE CarNode *stackMAX+1; int top; SeqStackCar; /*模拟停车场*/ typedef struct car CarNode *data; struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟便道*/ /*方法声明*/ void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int A

12、rrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ void List(SeqStackCar,LinkQueueCar); /*显示信息*/ void PRINT(CarNode *p,int room); /*输出离开车辆的信息清单*/void main() SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); /*初始化车站*

13、/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf(" 欢迎使用本停车管理系统 n"); printf("*n"); printf(" -1. 车辆到达- n"); printf(" -2. 车辆离开- n"); printf(" -3. 列表显示- n"); printf(" -4. 退出系统- n"); printf("*n"); p

14、rintf("!说明:请注意正确输入时间,在输入“时”后,按“ENTER”或者“空格”再输入“分”。不要为非数字!n"); printf("请选择所需要的服务! (1-4).n"); while(1) scanf("%d",&ch); if(ch>=1&&ch<=4)break; else printf("输入错误!请选择:(1-4)."); switch(ch) case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ case

15、2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ case 3:List(Enter,Wait);break; /*列表显示信息*/ case 4:exit(0); /*退出主程序*/ default: break; void InitStack(SeqStackCar *s) /*初始化栈*/ int i; s->top=0; for(i=0;i<=MAX;i+) s->stacks->top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q->head

16、=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL) Q->head->next=NULL; Q->rear=Q->head; return(1); else return(-1); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf("请输入车牌号(例:A1234):n

17、"); gets(p->num); if(Enter->top<MAX) /*车场未满,车进车场*/ Enter->top+; printf("车辆在车场第%d位置!n",Enter->top); printf("请输入到达时间:(小时:分钟)n"); scanf("%d",&p->reach.hour); while(p->reach.hour<0|p->reach.hour>23) /控制时间格式正确 printf("输入错误!n")

18、; printf("请重输入到达时间的时(0-23)!n"); scanf("%d",&p->reach.hour); scanf("%d",&p->reach.min); while(p->reach.min<0|p->reach.min>59) /控制分钟输入正确 printf("输入错误!n"); printf("请重输入到达时间的分(0-59)!n"); scanf("%d",&p->reach.min

19、); Enter->stackEnter->top=p; return(1); else /*车场已满,车进便道*/ printf("车场已满,请在便道等待!n"); t=(QueueNode *)malloc(sizeof(QueueNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ int ro

20、om; CarNode *p; QueueNode *q; /*判断车场内是否有车*/ if(Enter->top>0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf("请输入车在车场的位置1-%d",Enter->top); scanf("%d",&room); if(room>=1&&room<=Enter->top) break; while(Enter->top>room) /*车辆离开*/ Temp->top+; /*临时通道栈顶指针*/

21、Temp->stackTemp->top=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; p=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; while(Temp->top>=1) /*判断临时通道上是否有车*/ Enter->top+; Enter->stackEnter->top=Temp->stackTemp->

22、;top; Temp->stackTemp->top=NULL; Temp->top-; PRINT(p,room); if(W->head!=W->rear)&&Enter->top<MAX) /*车站是未满*/ /*便道的车辆进入车场*/ q=W->head->next; p=q->data; /*p指向链队头*/ Enter->top+; printf("便道的%d号车进入车场第%d位置!n",p->num,Enter->top); printf("请输入现在的时间

23、如(小时;分钟):n"); scanf("%d",&p->reach.hour); if(p->reach.hour<0|p->reach.hour>23) printf("输入错误!n"); printf("请重输入到达时间的时(0-23)!n"); scanf("%d",&p->reach.hour); scanf("%d",&p->reach.min); if(p->reach.min<0|p->

24、reach.min>59) printf("输入错误!n"); printf("请重输入到达时间的分(0-59)!n"); scanf("%d",&p->reach.min); Enter->stackEnter->top=p; W->head->next=q->next; if(q=W->rear) W->rear=W->head; free(q); /*释放q地址*/ else printf("便道里没有车!n"); /*便道没车*/ else

25、 printf("车场里没有车!n"); /*车场没车*/ void PRINT(CarNode *p,int room) /*输出离开车辆的信息清单*/ int A1,A2,B1,B2; printf("请输入离开的时间:(小时:分钟n"); scanf("%d",&p->leave.hour); while(p->leave.hour<0|p->leave.hour>23) printf("输入错误!n"); printf("请重输入离开的时间的时(0-23)n&

26、quot;); scanf("%d",&p->leave.hour); B1=p->leave.hour; scanf("%d",&p->leave.min); if(p->leave.min<0|p->leave.min>59) printf("输入错误!n"); printf("请重输入到达时间的分(0-59)!n"); scanf("%d",&p->leave.min); printf("离开车辆的车牌号为:

27、n"); puts(p->num); printf("其到达时间为:%d:%dn",p->reach.hour,p->reach.min); printf("离开时间为: %d:%dn",p->leave.hour,p->leave.min); A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min; printf("应交费用为: %lf元!n", (B1-A1)*60+(B2-A2)+14

28、40)%1440*price); free(p); void List1(SeqStackCar *S) /*列表显示车场信息*/ printf("您选择的是车场停车情况!n"); int i; if(S->top>0) /*判断车站内是否有车*/ printf(" 位置到达时间车牌号n"); for(i=1;i<=S->top;i+) printf(" %d %d:%d %sn",i ,S->stacki->reach.hour,S->stacki->reach.min,S->stacki->num); else printf("车场里没有车!n"); void List2(LinkQu

温馨提示

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

评论

0/150

提交评论