数据结构课程设计报告_第1页
数据结构课程设计报告_第2页
数据结构课程设计报告_第3页
数据结构课程设计报告_第4页
数据结构课程设计报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、. . . . 数据结构课程设计报告(2011 2012 学年 第 2 学期) 题 目:停车场管理系统学 号:8姓 名:王青山指导教师:印清信息科学与工程系1设计容、任务与具体要求1.1设计容 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场有车开走,则排以便道上的第一辆车就进入停车场。停车场如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进

2、场。每辆车在离开停车场时,都应根据它在停车场停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。1.2设计任务与具体要求 任务:实现车辆系统的动态管理 (1) 熟练掌握栈顺存和链存两种存储方式。(2) 掌握栈的基本操作与应用。(3) 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 具体要求:1栈用顺序结构实现,队列用链式结构实现;2每一组输入数据包括三个数据项:汽车“到达”或“离去” 的信息、汽车牌照、汽车到达或离去的时刻;3对每一组输入数据进行操作后的输出信息为:

3、若是车辆到达, 则输出车辆在停车场或便道上的停车位置;若是车辆离去, 则输出车辆在停车场停留的时间和应缴纳的费用(假设在便 道上等候的时间不收费)。2概要设计2.1该系统的功能简介 主函数:介绍程序的基本功能,并给出程序功能所对应的键盘操作的提示,如车到来或离去的表示方法,停车场或者便道的 状态的查询方法提示等。车辆到达Arrival函数:首先要查询当前停车场的状态,当停车场非满时,将其驶入停车场(入栈),开始计费;当停车场满时,让其进入便道等候(入队)。车辆离开Leave函数:当某辆车要离开停车场的时候,比它后进停车场的车要为它让路,(即将这些车依次“压入”辅助栈), 开走请求离开的车,再将

4、辅助栈中的车依次出栈,“压入”停车场;同时根据离开的车在停车场停留的时间进行收费;最后查询是否有车在便道等候,若有,将便道上的第一辆车驶入停车场(先出队,再入栈),开始交费。车辆信息List函数:用来在屏幕上显示停车位和便道上各位置的状态。2.2 总体程序框图2.3各个模块之间的主要关系此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以与用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用jiemian()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程

5、序又分别调用车辆的到达、车辆的离开、停车场停放车辆的信息以与退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以与显示便道上车辆信息的函数。最后,从调鼐的这四个函数中回到主函数结束整个程序的运行。在以上各个模块中,出现的调用的函数为: void jianzhan(tingchechang*); int jianduilie(biandao *Q) int jiemian( ) int Arrival(tingchechang *zhan1,biandao *W) void Leav

6、e(tingchechang *zhan1,tingchechang *zhan2,biandao *W) void PRINT(xinxijiedian *p,int weizhi)void List(tingchechang S,biandao W) void List1(tingchechang *S) void List2(biandao *W) 3系统功能模块的具体设计3.1各个模块的程序流程图与运行界面欢迎界面车辆到达车辆离开车辆信息(车场/便道)3.2关键代码分析说明 为了便于区分每辆汽车并了解每辆车当前所处的位置等信息,需要记录汽车的牌照、进入停车场的时间与汽车需要离开的时间,

7、汽车的类型定义描述如下:typedef struct node1 char num10; Time reach; Time leave; xinxijiedian; 由于车位是一个狭长的通道,不允许两辆车同时出入停车位,当有车到来时要进入停车位的时候也要顺次停放,当某辆车要离开时,比它后到的车要先暂时离开停车位,而且越后到的车就越先离开停车位,显然这与栈的“后进先出”特点相吻合,因此用栈来描述停车场是合适的,使用一个顺序栈表示停车场比较方便,具体定义如下:typedef struct node2 xinxijiedian *stackMAX+1; int top; tingchechang;当

8、停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它停放在便道上,车辆要按照进入便道的先后顺序顺次存放在便道上;当有车从停车场上离开后,便道上等候的第一辆汽车就立即进入停车场中空出的某个车位。这和队列“先进先出”的特点相吻合,使用链队列来模拟便道比较合适,类型定义如下:typedef struct car xinxijiedian *data; struct car *next;chewei;当某辆车要离开停车场的时候,比它后进停车场的车要为它让路,而且当它开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为了完成这项功能,需要再定义一个辅助栈,停车位中让路的车依次“压入

9、”辅助栈,待提出开走请求的车开走后再从辅助栈的栈顶依次“弹出”到停车位中。对辅助栈也可采用顺序栈,与停车场栈类似:typedef struct node3 chewei *head;chewei *rear;biandao;4程序调试分析本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。其中比较有代表性的主要问题有:在这周课程设计中,我们小组所开发的停车场管理系统,基本上可以完成每一项功能。汽车进入停车场的信息、离开停车场的信息以与通道上的信息都可以在程序上一一实现。但是,在改进的程序中,还应该增加时间的判断功能,即停车场有可能有车辆停放的时间超过一天。还有一个很重要的问题,对于停车

10、场可以停放的最多车辆数,为了测试数据的方便,我在程序中,定为了3,在实际使用中,可以改变程度开头的宏定义以增加停车场的容量。5程序使用说明这个程序用来实现对停车场车辆的管理,整个操作界面为中文,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作。这个程序操作简单,对于车牌号,只需输入车牌号就行,而且对于进出停车场的时间,也简化了操作,只需输入几时几分就行,没有具体到哪年哪月哪日,但也许这也是该程序不足之处所在。而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入n或N退出该运行程序。至于使用过程中的更具体的

11、问题,可以参照该报告书中调试分析那一项的屏幕截图,整个程序的运行界面大致就如上述屏幕截图的容。6总结 通过对停车场管理系统的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起。在这次课程设计中,不仅培养了我开发一个中小型程序的能力,而且也培养了我的团队合作能力。在这次对停车场管理系统的开发过程中,我们小组成员互相合作,互相帮助,其中有程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以与迷茫。在这次课程设计中,使得我很好地了解了在开发程序过程中合作的重要性。总之,在这周的课程设计中,我以与我们这组的收获还是挺大的,不仅对于 专业课有了更好的认识,而且在合作的过程中更加了解了团

12、队精神的重要性。致非常感我的指导教师印清教授,以与在此次课程设计中我的小组成员和我的同学们,是他们让我在此次课程设计中学到了更多,让我认识到以前学习中存在的不足。参考文献谭浩强,C 语言设计(第三版). : 清华大学严蔚敏 吴伟民 数据结构(C 语言版) 清华大学附:源程序#include /*标准输入输出文件*/#include /*即standard library标准库头文件(利用这个头文件才可以使用malloc,realoc等存的函数)*/#include/*字符串处理头文件*/*-以上为头文件部分-*/#define MAX 3 /*车库容量*/#define price 0.05/

13、*每车每分钟费用两个可以随问题条件而宏观改变的宏定义*/typedef struct time int hour;/*小时*/ int min;/*分*/Time; /*时间Time结构体*/typedef struct node1 char num10; /*10个字符长度的车牌号*/ Time reach; /*到达时间(利用上面的结构体 Time)*/ Time leave; /*离开时间(利用上面的结构体Time)*/xinxijiedian; /*车辆信息结点(记录车牌,进出时间)*/typedef struct node2 xinxijiedian *stackMAX+1;/*声明

14、一个记录车辆信息结点相关信息的指针数组*/ int top;/*车站现有的车辆数目(即上面说的栈顶的位置)*/tingchechang; /*模拟车站(采用栈)*/typedef struct car xinxijiedian *data;/*车辆信息结点声明的指针*/ struct car *next;/*用自身声明一个next指针(这里相当于一个递归)*/chewei;/*便道的每一个车位*/typedef struct node3 chewei *head; /*利用上面的结构体声明便道的head指针*/ chewei *rear; /*利用上面的结构体声明便道的rear指针*/bian

15、dao;/*模拟便道(采用队列)*/*-以上部分进行了宏定义,作了Time结构体,车辆信息,车站,便道声明-*/void jianzhan(tingchechang*); /*初始化栈(利用车站)*/ int jianduilie(biandao *);/*初始化便道*/int Arrival(tingchechang *,biandao *);/*车辆到达*/ void Leave(tingchechang *,tingchechang *,biandao *);/*车辆离开*/void List(tingchechang,biandao);/*显示存车信息*/ /*-以上作了功能函数的声明

16、-*/int jiemian( ) /*登录界面*/ char choice; printf(ntttt停车场管理系统ttttnnn); printf(tttt小组成员: 王青山 郭潇 徐鸿滨ttttnn); printf(tttt班级: 10级网络工程ttttn); printf(nnt 是否进入该系统(y/n)? ); choice=getchar(); if(choice=N|choice=n) exit(0); elsereturn 1; void main() tingchechang zhan1,zhan2;/*声明了两个栈(一个是停车场的,一个是临时存放车辆的)*/ bianda

17、o duilie;/*便道等待队列*/ int ch; jiemian(); jianzhan(&zhan1); /*初始化车站*/ jianzhan(&zhan2); /*初始化让路的临时栈*/ jianduilie(&duilie); /*初始化便道*/ while(1)/*简单输出键盘操作信息*/ printf(nttt1. 车辆到达); printf( 2. 车辆离开); printf( 3. 列表显示); printf( 4. 退出系统n); while(1) scanf(%d,&ch);/*从键盘输入控制信息*/ if(ch=1&chtop=0;/*栈顶为0*/ for(i=0;i

18、stacks-top=NULL;/*车辆信息为空因每次赋值之后指针向上移动,所以为s-top*/int jianduilie(biandao *Q) /*初始化便道*/ Q-head=(chewei *)malloc(sizeof(chewei); /*建一个链队列的头结点*/ if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; /*初始化头结点*/ return(1); else return(-1);void PRINT(xinxijiedian *p,int weizhi) /*打印出站车的信息*/ int A1,A2,B1,B2; pri

19、ntf(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-leave.min); A1=p-reach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min; printf(n应交费用为: %2.1f元,

20、(B1-A1)*60+(B2-A2)*price); free(p);int Arrival(tingchechang *zhan1,biandao *W) /*车辆到达*/ xinxijiedian *p; /*定义车辆信息结点的指针p*/ chewei *t; /*定义链队列结点的指针t*/ p=(xinxijiedian *)malloc(sizeof(xinxijiedian); flushall(); printf(n请输入车牌号(例:陕A1234):); gets(p-num); /*输入车牌号*/ if(zhan1-toptop+; printf(n车辆在车场第%d位置.,zha

21、n1-top); printf(n请输入到达时间:/*:*/); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); zhan1-stackzhan1-top=p;/*把这个车辆的信息记录进栈*/ return(1); /*说明函数为真,继续执行*/ else /*车场已满,车进便道*/ printf(n该车须在便道等待!); t=(chewei *)malloc(sizeof(chewei); /*建一个链队列的结点赋值给指针t*/ t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1);void

22、 Leave(tingchechang *zhan1,tingchechang *zhan2,biandao *W) /*车辆离开*/ int weizhi; xinxijiedian *p,*t; chewei *q;/*-以下判断车厂是否有车-*/ if(zhan1-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(n请输入车在车场的位置/1-%d/:,zhan1-top); scanf(%d,&weizhi); if(weizhi=1&weizhitop) break; while(zhan1-topweizhi) /*车辆离开(利用停车场的栈压入到临

23、时栈,一直到要离开车辆那个位置*/ zhan2-top+; zhan2-stackzhan2-top=zhan1-stackzhan1-top; /*这里利用赋值之后栈的指针不断*/ /*向上指,来进行循环赋值*/ zhan1-stackzhan1-top=NULL; zhan1-top-; p=zhan1-stackzhan1-top; /*如果离开的车辆在停车场最开始的位置,把p指针指向该车*/ zhan1-stackzhan1-top=NULL; zhan1-top-; while(zhan2-top=1) /*当让路的临时栈上上有车时*/ zhan1-top+; zhan1-stack

24、zhan1-top=zhan2-stackzhan2-top; zhan2-stackzhan2-top=NULL; zhan2-top-; PRINT(p,weizhi);/*调用PRINT函数处理相关信息*/ /*-以下操作判断通道上是否有车与车站是否已满,然后进行相关处理-*/ if(W-head!=W-rear)&zhan1-tophead-next; /*链队列便道的头结点赋值给指针q*/ t=q-data; zhan1-top+; printf(n便道的%s号车进入车场第%d位置.,t-num,zhan1-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;/*如果便道上的车全部进入的话进行的相关操作*/ zhan1-stackzhan1-top=t;/*把车辆信息记录进车库*/ free(q); else printf(n便道里没有车.n

温馨提示

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

评论

0/150

提交评论