停车场数据机构设计.doc_第1页
停车场数据机构设计.doc_第2页
停车场数据机构设计.doc_第3页
停车场数据机构设计.doc_第4页
停车场数据机构设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

停车场数据机构设计1 问题描述1.1题目描述设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开车场时必须按它停留的时间长短交纳费用。试用停车场编制按上述要求进行管理的模拟程序。1.2任务要求1.2.1使用顺序栈模拟停车场,链队列模拟车场外的便道,实现车辆入栈、出栈、入队列、出队列、信息输出等功能。1.2.2车辆信息有:车牌号、到达信息、到达时刻、离去信息、离去时刻等;1.2.3输出的信息有:如果是到达的车辆,输出其在停车场中或便道上的位置;1.2.4如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用2 设计思想及其目的2.1设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。2.2设计目的1 通过课程设计,加深对数据结构这一课程所学内容的进一步理解与巩固。2 通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。3 通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。4 通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。5 通过课程设计,开发一个中小型系统,掌握系统研发全过程。6 通话课程设计,培养分析问题、解决实际问题的能力。3 系统具备的功能3.1 简体中文控制台界面程序用来实现对停车场内车辆的管理,整个操作界面为中文,更加符合人性化的标准,3.2 到达信息当车辆到达时,能够记录到达车辆的号码,记录到达时间。安排停车位置。如果车道满了,就停留在便道上。3.3 离开信息当车辆离开时,统计其停留时间,记录其停车费用。3.4 查询信息进入查询界面,可以查询目前车长信息,和变到信息。4系统流程图5 主函数、子程序调用关系6 主要算法实现及其基本操作6.1此停车场管理系统,主要分为以下若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用option()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调鼐的这四个函数中回到主函数结束整个程序的运行。6.2在以上各个模块中,各模块的伪码算法:6.2.1栈的初始化:void InitStack(SeqStackCar *s) /*初始化栈*/ int i; s-top=0; for(i=0;istacks-top=NULL;6.2.2链队列的初始化:int InitQueue(LinkQueueCar *Q) /*初始化队列*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1);6.2.3车辆到达时的算法:int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); printf(ttt请输入到达车辆车牌号: ); scanf(%d,&(p-num); if(Enter-toptop+; printf(nttt该车辆在停车场的位置是: %dn,Enter-top); printf(nttt请输入该车辆到达的时间: ); scanf(%d,&(p-reachtime); Enter-stackEnter-top=p; return(1); else /*车场已满,车进便道*/ printf(nttt停车场已满 该车辆需在便道上等待!); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); 6.2.4车辆离开时的算法:void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ int i, room; CarNode *p,*t; QueueNode *q; /*判断车场内是否有车*/ printf(n*); if(Enter-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(ttt停车场里停放的车辆总数: %d,Enter-top); printf(nnttt请输入要离开车辆的位置: ); scanf(%d,&room); if(room=1&roomtop) break; while(Enter-toproom) /*车辆离开*/ Temp-top+; 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-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p);/*判断通道上是否有车及车站是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(nnttt便道的%d号车进入车场第%d位置.,t-num,Enter-top); printf(nnttt请输入现在的时间:); scanf(%d,&(t-reachtime); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(nnttt便道里没有车.n); else printf(nnttt车场里没有车.); /*没车*/ 6.2.5列表现试车场信息void List1(SeqStackCar *S) /*列表显示车场信息*/ int i; if(S-top0) /*判断车站内是否有车*/ printf(nttt车场:); printf(nnttt位置 到达时间 车牌号n); for(i=1;itop;i+) printf(%26d,i); printf(%6d,S-stacki-reachtime); printf(%10d,S-stacki-num); printf(n); else printf(nttt车场里没有车); 6.2.6列表显示便道信息void List2(LinkQueueCar *W) /*列表显示便道信息*/ QueueNode *p; p=W-head-next; if(W-head!=W-rear) /*判断通道上是否有车*/ printf(nttt等待车辆的号码为: ); while(p!=NULL) printf(%-10d,p-data-num); p=p-next; else printf(nttt便道里没有车.); 7 系统运行环境和开发工具7.1系统运行环境7.1.1硬件环境处理器:Inter Pentium 166MX 或更高内存:32MB或更大硬盘空间:1GB以上显卡:SVGA显示适配器7.1.2软件环境操作系统:Windows98/ME/2000/XP7.2开发工具C-FREE 4.08 用户手册8.1用户界面这个程序用来实现对停车场内车辆的管理,整个操作界面为中文,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作。8.2新的车辆到达这个程序操作简单,对于车牌号,只需输入车牌号上的数字就行,简化了操作。车辆满的时候停靠在便道上。8.3场内车辆离开离开时同样,输入离开的车牌号及其离开时间,自动判断费用。及其便道上车辆进入,以及进入时间。8.4查询车辆信息可以查看场内车辆信息和便道上的车辆信息。9 详细设计9.1源文件#include#include#include#define MAX 10 /*车库容量*/#define price 1 /*每车每时刻费用*/typedef struct node int num; int reachtime; int leavetime; CarNode; /*车辆信息结点*/ typedef 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 Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void PRINT(CarNode *p) ;/*-*/ void option() int i; char choice; for(i=1;i=80;i+) printf(004); printf(nnnn); printf( -n); printf( |停 车 场 管 理 系 统|n); printf( -n); printf(nnnn); for(i=1;i=1&chtop=0; for(i=0;istacks-top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1); void PRINT(CarNode *p) /*打印出站车的信息*/ int A1,A2; printf(n*); printf(nttt请输入离开时间: ); scanf(%d,&(p-leavetime); printf(nttt离开车辆的车牌号: %d,p-num); printf(nnttt离开车辆到达时间: %d ,p-reachtime); printf(nnttt离开车辆离开时间: %d,p-leavetime); A1=p-reachtime; A2=p-leavetime; printf(nnttt停车场管理费用: %d,(A2-A1)*price); free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); printf(ttt请输入到达车辆车牌号: ); scanf(%d,&(p-num); if(Enter-toptop+; printf(nttt该车辆在停车场的位置是: %dn,Enter-top); printf(nttt请输入该车辆到达的时间: ); scanf(%d,&(p-reachtime); Enter-stackEnter-top=p; return(1); else /*车场已满,车进便道*/ printf(nttt停车场已满 该车辆需在便道上等待!); 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 i, room; CarNode *p,*t; QueueNode *q; /*判断车场内是否有车*/ printf(n*); if(Enter-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(ttt停车场里停放的车辆总数: %d,Enter-top); printf(nnttt请输入要离开车辆的位置: ); scanf(%d,&room); if(room=1&roomtop) break; while(Enter-toproom) /*车辆离开*/ Temp-top+; 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-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p);/*判断通道上是否有车及车站是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(nnttt便道的%d号车进入车场第%d位置.,t-num,Enter-top); printf(nnttt请输入现在的时间:); scanf(%d,&(t-reachtime); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(nnttt便道里没有车.n); else printf(nnttt车场里没有车.); /*没车*/ void List1(SeqStackCar *S) /*列表显示车场信息*/ int i; if(S-top0) /*判断车站内是否有车*/ printf(nttt车场:); printf(nnttt位置 到达时间 车牌号n); for(i=1;itop;i+) printf(%26d,i); printf(%6d,S-stacki-reachtime); printf(%10d,S-stacki-num); printf(n); else printf(nttt车场里没有车); void List2(LinkQueueCar *W) /*列表显示便道信息*/ QueueNode *p; p=W-head-next; if(W-head!=W-rear) /*判断通道上是否有车*/ printf(nttt等待车辆的号码为: ); while(p!=NULL) printf(%-10d,p-data-num); p=p-next; else printf(nttt便道里没有车.); printf(n);void List(SeqStackCar S,LinkQueueCar W) int flag,tag; flag=1; while(flag) printf(nnttt1.车场nnttt2.便道nnttt3.返回nnttt); printf(现在请选择以上信息); while(1) scanf(%d,&tag); if(tag=1|tag=3) break; else printf(现在请选择以上信息); switch(tag) case 1:List1(&S);break; /*列表显示车场信息*/ case 2:List2(&W);break; /*列表显示便道信息*/ case 3:flag=0;break; default: break; 10 结果分析及算法评价10.1结果分析10.1.1停车场管理系统,基本上可以完成每一项功能。汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。10.1.2但是,该程序也有不足的地方。主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中,为了简便起见,我们就车牌号定义为了整型,这个与现实是有些不符的。还有一个可以改进的地方就是记录车辆进入停车场以及离开停车场的时间,应该精确

温馨提示

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

评论

0/150

提交评论