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

下载本文档

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

文档简介

精选范本,供参考!精选范本,供参考!精选范本,供参考!数据结构课程设计停车场管理系统目录TOC\o"1-2"\h\u19087一、课设目的 220994二、问题描述 227423三、基本要求 224284四、详细设计 37710(1)原理分析 318906(2)功能模块 38012(3)用户手册 65494(4)流程图 63624(5)测试用例 75746(6)测试目的 723205(7)测试要求 76727五、程序源码 73172六、测试结果 1325076七、课设总结 1524765八、参考文献 15一、课设目的了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程中的问题分析,系统设计,程序编码,测试等基本方法和技能;提高综合应用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发和一般规范进行软件开发,培养软件工作者所应具有的科学的工作方法和作风。二、问题描述设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。三、基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。详细设计(1)原理分析:栈是一种只能在一段进行输入和输出操作的线性表,表尾称为栈顶,表头称为栈底。栈的主要特点是“后进先出”,即后进栈的元素先处理,停车场的容量即为栈的存储空间。队列是限定仅能在表的一段进行插入,在表的另一端进行删除的线性表。队列中可以插入的一段称为队尾,可以删除的一端称为队首。队列的主要特点是“先进先出”。停车场管理系统是充分利用数据结构中栈和队列的思想实现的,用到两个堆栈,一个用来模拟停车场,另一个为临时栈,存储为离开停车场的车辆让道的其他车辆;一个队列结构,存储便道的车辆信息。typedefstruct{//定义栈,表示停车场CarNode*base;//停车场的堆栈底CarNode*top;//停车场的堆栈顶intstacksize;//停车场的容量}Park;typedefstruct{//定义队列,表示便道CarPtrfront;//便道的队列的队头CarPtrrear;//便道的队列的队尾intlength;}Shortcut;(2)功能模块:车辆到达:a、若栈不满,车辆进栈,停到停车场;b、若栈满,车辆入队,停到便道;StatusArrival(Park&P,Shortcut&S){intnumber,ar_time;//对进站车辆的处理:printf("请输入车牌号:");//记录车牌号,时间,并根据停车场scanf("%d",&number);//是否满来判断入栈还是入队列printf("进场的时刻:");scanf("%d",&ar_time);if(P.stacksize<SIZE){CarNodec;c.number=number;c.ar_time=ar_time;Push(P,c);printf("该车应停在第%d号车道.\n",P.stacksize);}else{EnQueue(S,number,ar_time);printf("停车场已满,请暂时停在便道的第%d个位置.\n",S.length);}returnOK;}车辆离开:如果队列不空且栈不满,队列上的车出队入栈。StatusLeave(Park&P,Park&P1,Shortcut&S){intnumber,le_time,flag=1,money,ar_time;//对离站车辆的处理:printf("请输入车牌号:");//记录车牌号,时间,停车费用scanf("%d",&number);printf("出场的时刻:");scanf("%d",&le_time);CarNodee,m;CarPtrw;while(P.stacksize){Pop(P,e);if(e.number==number){flag=0;money=(le_time-e.ar_time)*PRICE;ar_time=e.ar_time;break;}Push(P1,e);//后面的车开出停车场让路,进入备用栈}while(P1.stacksize){Pop(P1,e);Push(P,e);//备用栈中的车开入停车场}if(flag==0){if(S.length!=0){DeQueue(S,w);m.ar_time=le_time;m.number=w->number;Push(P,m);//便道中的车开入停车场free(w);printf("车牌号为%d的车已由便道进入停车场\n",m.number);}printf("停车费为%d,占用车位数为%d\n",money,P.stacksize);}else{printf("停车场不存在牌号为%d的车\n",number);}returnOK;}(3)用户手册:①输出菜单选项;请选择(A,D,E):②如果选择A,即车辆到达:若栈不满,车辆进栈,停到停车场;若栈满,车辆入队,停到便道;③如果选择D,即车辆离开:计算时间及费用;如果队列不空且栈不满,队列上的车出队入栈;④如果选择E,则退出程序。(4)流程图:图一、函数关系调用图图二、操作流程图(5)测试用例:(‘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’,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达,‘D’表示离去,‘E’表示输入结束。(6)测试目的:测试菜单显示方法,到达方法和离开方法能否正确完成,时间和费用计算是否正确。(7)测试要求:测试用例要合理并足够,既要有正确用例,也要有错误用例,检验程序的正确性和健壮性。五、程序源码#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineOK1//函数返回状态代码,宏定义#defineERROR0#defineTRUE1#defineFALSE0#defineINFEASIBLE-1#defineOVERFLOW-2#defineSIZE2//停车场位置数#definePRICE2typedefintStatus;//栈,模拟停车场typedefstructCar1{//定义一个结构体来表示停车场中的车intnumber;//汽车车号intar_time;//汽车到达时间}CarNode;typedefstruct{//定义栈,表示停车场CarNode*base;//停车场的堆栈底CarNode*top;//停车场的堆栈顶intstacksize;//停车场的容量}Park;typedefintStatus;//队列,模拟便道typedefstructCar2{//用另一个结构体来表示便道中停放的车intnumber;//汽车车号intar_time;//汽车到达时间structCar2*next;}*CarPtr;typedefstruct{//定义队列,表示便道CarPtrfront;//便道的队列的队头CarPtrrear;//便道的队列的队尾intlength;}Shortcut;StatusInitStack(Park&P){//初始化停车场P.base=(CarNode*)malloc(SIZE*sizeof(Car1));if(!P.base)exit(OVERFLOW);P.top=P.base;P.stacksize=0;returnOK;}StatusPush(Park&P,CarNodee){//车进入停车场,栈的输入操作*P.top++=e;++P.stacksize;returnOK;}StatusPop(Park&P,CarNode&e){if(P.top==P.base)//车离开停车场,栈的输出操作printf("停车场为空.");else{e=*--P.top;--P.stacksize;}returnOK;}StatusInitQueue(Shortcut&S){S.front=S.rear=(CarPtr)malloc(sizeof(Car2));//初始化便道if(!S.front||!S.rear)exit(OVERFLOW);S.front->next=NULL;S.length=0;returnOK;}StatusEnQueue(Shortcut&S,intnumber,intar_time){CarPtrp;//车进入便道,队列的输入操作p=(CarPtr)malloc(sizeof(Car2));if(!p)exit(OVERFLOW);p->number=number;p->ar_time=ar_time;p->next=NULL;S.rear->next=p;S.rear=p;++S.length;returnOK;}StatusDeQueue(Shortcut&S,CarPtr&w){if(S.length==0)//车离开便道,队列的输出操作printf("通道为空.");else{w=S.front->next;S.front->next=S.front->next->next;--S.length;}returnOK;}StatusArrival(Park&P,Shortcut&S){intnumber,ar_time;//对进站车辆的处理:printf("请输入车牌号:");//记录车牌号,时间,并根据停车场scanf("%d",&number);//是否满来判断入栈还是入队列printf("进场的时刻:");scanf("%d",&ar_time);if(P.stacksize<SIZE){CarNodec;c.number=number;c.ar_time=ar_time;Push(P,c);printf("该车应停在第%d号车道.\n",P.stacksize);}else{EnQueue(S,number,ar_time);printf("停车场已满,请暂时停在便道的第%d个位置.\n",S.length);}returnOK;}StatusLeave(Park&P,Park&P1,Shortcut&S){intnumber,le_time,flag=1,money,ar_time;//对离站车辆的处理:printf("请输入车牌号:");//记录车牌号,时间,停车费用scanf("%d",&number);printf("出场的时刻:");scanf("%d",&le_time);CarNodee,m;CarPtrw;while(P.stacksize){Pop(P,e);if(e.number==number){flag=0;money=(le_time-e.ar_time)*PRICE;ar_time=e.ar_time;break;}Push(P1,e);//后面的车开出停车场让路,进入备用栈}while(P1.stacksize){Pop(P1,e);Push(P,e);//备用栈中的车开入停车场}if(flag==0){if(S.length!=0){DeQueue(S,w);m.ar_time=le_time;m.number=w->number;Push(P,m);//便道中的车开入停车场free(w);printf("车牌号为%d的车已由便道进入停车场\n",m.number);}printf("停车费为%d,占用车位数为%d\n",money,P.stacksize);}else{printf("停车场不存在牌号为%d的车\n",number);}returnOK;}intmain(){intm=1;charflag;//选项ParkP,Q;ShortcutS;InitStack(P);InitStack(Q);InitQueue(S);while(m){printf("\n停车场管理程序\n

温馨提示

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

评论

0/150

提交评论