数据结构课程设计《停车场系统》
数据结构停车场课程设计
数据结构停车场课程设计一、课程目标知识目标:1. 理解数据结构中图和树的概念,掌握它们在解决实际问题中的应用。
2. 学习并掌握停车场系统的逻辑结构,能运用所学数据结构设计停车场的模拟系统。
3. 了解不同数据结构在处理停车场问题时的效率差异,能够分析其时间复杂度和空间复杂度。
技能目标:4. 能够运用所学知识,设计并实现一个简单停车场的管理系统,包括车辆入场、出场、查找空车位等基本功能。
5. 通过课程设计活动,提升学生利用数据结构解决实际问题的编程能力,加强代码的逻辑性和可读性。
6. 培养学生将理论知识应用于实际问题的能力,通过团队协作完成课程设计任务。
情感态度价值观目标:7. 激发学生对计算机科学和数据结构的兴趣,增强其对复杂问题探究的积极态度。
8. 培养学生的团队协作精神,学会在团队中分工合作、共同解决问题。
9. 增强学生的创新意识,鼓励学生大胆尝试不同的解决方案,体会科技创新对现实生活的影响。
课程性质分析:本课程设计属于高中信息技术或计算机科学课程,以实践性和应用性为主,旨在通过实际问题的解决,加深学生对数据结构知识的理解和运用。
学生特点分析:高中生具有一定的数据结构基础和编程能力,思维活跃,对实际问题具有较强的探究欲望,但需要进一步引导他们将理论知识与实际问题相结合。
教学要求:教师应引导学生将所学知识综合运用到停车场系统设计中,注重理论与实践相结合,鼓励学生创新思维和团队合作,通过具体的学习成果来衡量学生掌握情况。
二、教学内容1. 数据结构基本概念复习:回顾图和树的基本概念,包括相关术语、性质及常用算法。
教材章节:第五章“图”,第六章“树”2. 停车场系统需求分析:介绍停车场系统的基本功能,如车辆入场、出场、查找空车位等。
教材章节:项目实战部分3. 数据结构选择与应用:探讨不同数据结构在停车场系统中的应用,如邻接表、邻接矩阵、二叉树等。
教材章节:第五章、第六章应用实例4. 停车场系统设计:详细讲解如何利用数据结构设计停车场系统,包括数据模型、算法实现等。
数据结构停车场管理系统课程设计
数据结构停车场管理系统课程设计
本课程设计以数据结构为基础,设计一个停车场管理系统。
该系统主要包括以下功能:
1. 停车位管理:记录停车场内每个停车位的状态,包括空闲、已占用、禁用等状态,并能够实时查询停车位状态信息。
2. 车辆管理:记录进入停车场的车辆信息,包括车牌号、车型、进场时间等,能够实时查询车辆信息及其停放位置。
3. 收费管理:根据车型、停车时长等因素计算停车费用,并能够进行收费、退费等操作。
4. 系统设置:包括管理员账号管理、停车场信息设置等功能,保证系统的安全性和管理性。
在此基础上,我们将使用数据结构的相关算法和数据结构,实现停车场管理系统的高效、可靠和稳定的运行,提高停车场的管理水平和服务质量。
- 1 -。
数据结构停车场管理系统数据结构设计
数据结构停车场管理系统数据结构设计在智能化时代的今天,停车问题成为了城市管理的一大难题。
为了解决车辆日益增多的停车需求,设计一个高效的停车场管理系统显得尤为重要。
本文将围绕数据结构的设计来探讨停车场管理系统的实现。
一、需求分析停车场管理系统的主要功能是提供用户停车、缴费、查询等服务,同时需要为管理人员提供车辆调度、收费统计等功能。
为了实现这些功能,我们需要从需求角度对数据结构进行设计。
1. 用户管理停车场管理系统需要记录每个用户的停车信息,包括车辆信息、停车时间等。
为了高效查询用户信息,可以使用哈希表作为数据结构,将用户的身份证号或车牌号作为键值,用户信息作为值进行存储。
2. 车辆管理为了维护停车场内的车辆信息,我们可以使用链表作为数据结构来管理车辆。
每个节点可以保存一个车辆的信息,如车牌号、停车时间等,同时连接下一个车辆节点。
3. 车位管理停车场需要管理可用车位和已停车位。
为了高效分配车位,可以使用堆作为数据结构来存储可用车位信息。
堆可以根据剩余车位数量进行自动排序,当有车辆进入停车场时,从堆中取出最小的剩余车位。
4. 收费管理停车场管理系统需要计算用户停车时间并进行费用结算。
为了高效计算停车时间,可以使用栈作为数据结构来记录每个用户进入停车场的时间。
栈可以实现先进后出的特点,正好符合车辆停车的实际情况。
当用户离开停车场时,可以根据进入时间计算停车时间并进行费用结算。
5. 查询与统计为了用户能够方便地查询自己的停车信息,可以使用二叉查找树作为数据结构,将用户的车牌号作为键值进行存储。
二叉查找树可以在O(log n)的时间复杂度内完成查询操作。
另外,为了方便管理人员进行统计工作,可以使用散列表来存储车辆的停车信息,以便根据不同条件进行统计分析。
二、系统设计基于以上需求分析,我们可以得出停车场管理系统的数据结构设计如下:1. 用户管理使用哈希表来存储用户信息,将用户的身份证号或车牌号作为键值,用户信息作为值进行存储。
数据结构课程设计停车场管理系统设计报告
int main(){Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack(TempPark);InitQueue(Q);while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&c ar.event!='E')){getchar(); //除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;2)分别构造空栈和空队列栈:Status InitStack(SqStack &S){ //构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;return OK;}队列:Status InitQueue(LinkQueue &Q){ //构造一个空队列(带头结点)Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=0;return OK;3)车辆到达处理Status Arrive(SqStack &S,LinkQueue &Q,CarNode &e){ //车辆到达处理if((S.top-1)->time<=e.time){ //时间处理if(!Check_Stack(S,e)&&!Check_Queue(Q,e)){ //是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}4)车辆离开处理Status Leave(SqStack &S,SqStack &TempS,LinkQueue &Q,CarNode &e) { //车辆离开处理CarNode a;int leatime,leanum;int entertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num) //车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);}else //车辆处在栈中间{do{Pop(S,a); //从栈中依次退出Push(TempS,a); //依次进入临时栈}while((S.top-1)->num!=e.num);//直到top指针下一个位置的num=车牌号Pop(S, a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);do { //其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);//条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为%d 的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){ //队列不空的话从便道进停车场DeQueue(Q,a);if(a.time<leatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a); //该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ //从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e); //前面的车进入队尾printf("您的车牌号为%d 的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;2.主要设计程序如下:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define MAX 2 //停车场容量#define price 2 //单价#define OK 1#define FALSE 0#define TRUE 1#define ERROR -1#define OVERFLOW -2typedef int Status;//============================================================== =======typedef struct CarNode{char event;int num;int time;}CarNode; //车辆信息结点typedef struct SqStack{CarNode *base;CarNode *top;int Stacksize;}SqStack; //栈(停车场)typedef struct QNode{CarNode data;struct QNode *next;}QueueNode; //便道结点typedef struct LinkQueue{QueueNode *front;QueueNode *rear;int queuesize;}LinkQueue; //队列(便道)//============================================================== =======Status InitStack(SqStack &S){ //构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;return OK;}//============================================================== =======Status InitQueue(LinkQueue &Q){ //构造一个空队列(带头结点)Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=0;return OK;}//============================================================== =======Status GetTop(SqStack S,CarNode &e){ //返回栈顶元素if(S.top==S.base)return ERROR;e=*(S.top-1);return TRUE;}//============================================================== =======Status Pop(SqStack &S,CarNode &e){ //删除栈顶元素if(S.top==S.base)return ERROR;e=*--S.top;return OK;}//============================================================== =======Status Push(SqStack &S,CarNode e){//插入元素为新的栈顶元素(在栈不满的前提下) if(S.top-S.base>=MAX)return FALSE;*S.top++=e;return OK;}//============================================================== =======Status DeQueue(LinkQueue &Q,CarNode &e){ //删除队头元素(带头结点) if(Q.rear==Q.front)return ERROR;QueueNode *p=Q.front->next;e=p->data;Q.front->next=p->next;if(p==Q.rear)Q.rear=Q.front;free(p);Q.queuesize--;return OK;}//============================================================== =======Status EnQueue(LinkQueue &Q,CarNode e){ //插入新的队尾元素QueueNode *p=(QueueNode*)malloc(sizeof(QueueNode));if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;Q.queuesize++;return OK;}//============================================================== =======Status Check_Stack(SqStack &S,CarNode e){//车辆到达时车库内是否有同名车CarNode *Temp=S.base;while((Temp!=(S.top))&&(Temp->num!=e.num))Temp++;if((Temp==S.top))return FALSE;elsereturn TRUE;}//============================================================== =======Status Check_Queue(LinkQueue &Q,CarNode e){//车辆到达时便道上是否有同名车QueueNode *Temp=Q.front;while((Temp!=Q.rear) && (Temp->data.num!=e.num))Temp=Temp->next;if((Temp==Q.rear) && (Temp->data.num!=e.num))return FALSE;elsereturn TRUE;}//============================================================== =======Status Arrive(SqStack &S,LinkQueue &Q,CarNode &e){ //车辆到达处理if((S.top-1)->time<=e.time){ //时间处理if(!Check_Stack(S,e)&&!Check_Queue(Q,e)){ //是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}//============================================================== =======Status Leave(SqStack &S,SqStack &TempS,LinkQueue &Q,CarNode &e){ //车辆离开处理CarNode a;int leatime,leanum;int entertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num) //车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);}else //车辆处在栈中间{do{Pop(S,a); //从栈中依次退出Push(TempS,a); //依次进入临时栈}while((S.top-1)->num!=e.num);//直到top指针下一个位置的num=车牌号Pop(S, a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);do { //其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);//条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为%d 的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){ //队列不空的话从便道进停车场DeQueue(Q,a);if(a.time<leatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a); //该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ //从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e); //前面的车进入队尾printf("您的车牌号为%d 的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;}//============================================================== =======void Initialization(){ //初始化程序printf("======================================================= ===\n");printf("* 停车场管理模拟程序*\n");printf("======================================================= ===\n");printf("请依次输入车辆到达(A/a)/离去(D/d)/结束(E/e)信息、车牌号以及当前时间:\n\n");}//============================================================== =======int main(){Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack(TempPark);InitQueue(Q);while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&c ar.event!='E')){getchar(); //除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;}。
数据结构课程设计报告书 停车场管理系统
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100/*预设停车场有100个车位*/#define D 1.2/*预设车辆停车费为1.2元每小时*/ #define NUMBER 100void menu();void start();void parkingplace();void drive();struc car{int carnumber;int cararrave;int carleave;int carplace;}car[NUMBER];struct park;{int null;}parkingplace[N-1];void main (){menu();/*菜单*/}void menu(){int n;do{puts("****MENU***");puts("1、停车");puts("2、开车");puts("3、退出");puts("4、初始化");printf("请选择你需要的服务(1-4):");scanf("%d",&n);}switch(n){case 1:parking;break;/*停车函数*/case 2:drive;brea ;/*开车函数*/case 3:exit;break;/*退出*/case 4:start;break;/*初始化*/}}void start()/*初始化*/{int i,j;for(i=0;j<N;i++)parking[i].null=0;/*停车场设置为空*/printf("已初始化");menu();}void parkingplace()/*车辆进入函数*/{int i,a,h=0;printf(“请输入该车系序号(从0开始):”);scanf(“%d”,&a);for(i=0;i<N;i++){if(parking[i].park==0)/*无车标记*/if(parking[i].park==1)/*有车标记*/h=h+1;}if(h==N)printf(“停车场内已满!”);else{car[a].carplace=h;parkingplace[h].null=1;printf(“该车应该停在停车场内”);printf(“请输入该车进停车场时间:”);scanf(“d%”,&car[a].cararrave);}void drive()/*车辆离开函数*/{int i,k,time;double(“请输入车辆次序号【】”);scanf(“%d”,&i);printf(“请输入离开时间:”);scanf(“%d”,&car[i]carleave);fee=D*(car[i].carleave-car[i].cardrrave);time=car[i].carleave-car[i].cardrrave;printf(“次序号为%d的车停时间%d小时,应收费%f元”,i,time,fee); }。
数据结构 课程设计 停车场管理系统
《数据结构》课程设计报告设计报告题目:停车场管理问题学院:信息科学与工程学院《数据结构》课程设计报告书1.1 课程设计选题的目的为大家解决一些生活中的实际问题,在这个过程中,自我设计的能力也在不断地提高。
此次程序设计综合运用所学数据额结构以及C语言的知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,使我们更理解了C语言及数据结构的功能之强大,进一步让学生对面向对象的方法以及数据结构的编程思想有了较好了解和认识。
1.通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2.通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计出合理的模块化结构。
3.通过课程设计,提高程序开发功能,培养分析问题、解决实际问题的能力,能运用合理的控制流程编写清晰高效的程序。
1.2 课程设计选题的内容[问题描述]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
[实现要求]要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
一.需求分析以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包含三个数据项:汽车“到达”或“离去”信息,汽车牌照号码以及汽车到达或离去的时刻。
数据结构课程设计停车场管理系统
停车场管理专业班级:学号:姓名:指导教师:课程设计时间:计算机专业数据结构课程设计任务书实验题目:停车场管理系统一、要解决的问题停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端)若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。
要求:以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟管理。
每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、以及到达或离去的时刻。
对每一组数据进行操作后的信息为:若是车辆到达,则输出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
二、基本要求(1)界面友好,函数功能要划分好(2)总体设计应画一流程图(3)程序要加必要的注释(4)要提供程序测试方案。
三、算法基本思想描述由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,依次由北向南排列。
由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,我设计用顺序存储结构来存储停车场内的车辆信息,并给车辆按进栈顺序编号,当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。
这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车。
当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素设计成汽车的车牌号,并以链表的形式存储。
停车场管理系统数据结构课程设计
停车场管理系统数据结构课程设计随着城市化进程的不断加快,车辆的数量也不断增加,而停车场资源却十分有限。
如何高效地管理停车场,让车辆能够快速停放和取车,成为了一个亟待解决的问题。
因此,设计一个高效的停车场管理系统就显得尤为重要。
在设计停车场管理系统时,数据结构是不可忽视的一个重要组成部分。
数据结构是指用于组织和存储数据的一种方式,能够让程序高效地访问和操作数据。
在停车场管理系统中,使用合适的数据结构能够提高系统的运行效率和响应速度,从而提升用户体验。
停车场的车位可以使用数组或链表来表示。
数组是一种有序的数据结构,可以快速访问任意一个元素,因此可以用来表示固定数量的车位。
而链表则可以动态地添加和删除元素,适用于表示数量不固定的车位。
对于停车场来说,使用链表更为合适,因为车位的数量是不确定的,需要动态地添加和删除车位。
停车场管理系统需要对车辆进出进行管理,这时可以使用队列来实现。
队列是一种先进先出的数据结构,可以用来管理车辆的进出顺序。
每当一辆车进入停车场时,就将其加入到队列尾部,而每当一辆车出停车场时,就从队列头部取出。
使用队列可以保证车辆按照先后顺序进出停车场,避免了混乱和拥堵。
在停车场管理系统中,需要对车辆的信息进行管理,如车牌号、停车时间、费用等。
这时可以使用哈希表来存储车辆信息。
哈希表是一种根据关键字直接访问内存地址的数据结构,可以快速地访问和修改车辆信息。
将车牌号作为关键字,可以快速地找到对应的车辆信息,方便管理和计费。
为了提高系统的运行效率,可以使用优先队列来管理车位的分配。
优先队列是一种根据优先级排序的队列,可以根据车辆类型、停车时间等因素确定优先级,从而实现车位的高效分配。
使用优先队列可以避免车辆长时间等待无法停放的情况,提高了停车场的利用率。
停车场管理系统的设计离不开合适的数据结构。
使用数组、链表、队列、哈希表和优先队列等数据结构可以提高系统的运行效率和响应速度,从而提升用户体验。
数据结构课程设计 停车场模拟管理系统报告(含源码)
《数据结构课程设计》报告专业:软件工程班级: T1123-03学号:姓名: XXX课设题目:停车场模拟管理系统指导教师:马春江成绩:2013-07-03目录一、设计题目 (1)二、设计目的 (1)三、总体设计 (1)(一)问题描述 (1)(二)设计要求 (1)(三)数据结构 (1)四、详细设计 (2)(一)分析与实现 (2)(二)系统模块设计 (2)(三)界面设计 (3)五、设计结果与分析 (4)六、总结(收获和不足) (5)(一)课设的不足 (5)(二)课设的收获 (5)附录程序源码 (5)参考文献: (16)指导教师意见 (17)一、设计题目停车场模拟管理系统。
二、设计目的利用所学的知识,模拟设计一个停车场管理系统.通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。
三、总体设计(一)问题描述假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。
当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场.当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。
(二)设计要求用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。
输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序.车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍.(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列.四、详细设计(一)分析与实现1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。
停车系统数据结构课程设计
停车系统数据结构课程设计一、课程目标知识目标:1. 理解并掌握停车系统中的基本数据结构,如数组、链表、栈和队列。
2. 学会运用数据结构解决停车系统中的实际问题,如车位分配、查找空闲车位等。
3. 掌握分析、设计停车系统数据结构的方法,并能够进行简单优化。
技能目标:1. 培养学生运用所学数据结构进行问题分析、设计解决方案的能力。
2. 提高学生编程实现停车系统数据结构及其相关功能的能力。
3. 培养学生通过合作与交流,共同解决复杂问题的团队协作能力。
情感态度价值观目标:1. 培养学生对数据结构在现实应用中的兴趣,激发学习积极性。
2. 培养学生勇于面对问题,积极寻求解决方案的精神。
3. 增强学生的环保意识,认识到智能停车系统在缓解交通压力、节约资源等方面的价值。
课程性质:本课程为高中年级信息技术课程,结合实际应用场景,培养学生运用数据结构解决实际问题的能力。
学生特点:高中学生具备一定的编程基础,对实际问题有一定的分析能力,但可能在数据结构的应用方面经验不足。
教学要求:注重理论知识与实际应用相结合,引导学生通过自主探究、合作学习,达到学以致用的目的。
同时,关注学生的情感态度发展,培养其正确的价值观。
通过分解课程目标为具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 数据结构基本概念:介绍数据结构的基本概念,如线性结构、非线性结构,以及常见的数据结构种类。
相关教材章节:第一章 数据结构概述2. 常见数据结构及应用:- 数组:介绍数组的定义、特点及应用场景,如停车场的车位表示。
- 链表:讲解链表的定义、分类和操作,探讨其在停车系统中的运用,如车辆进出管理。
- 栈和队列:阐述栈和队列的基本概念、操作方法,以及它们在停车系统中的实际应用,如车辆进出顺序控制。
相关教材章节:第二章 数组与链表;第三章 栈和队列3. 停车系统数据结构设计:- 分析停车系统的需求,设计适合的数据结构模型。
- 介绍如何利用数据结构实现停车场的车位分配、查找空闲车位等功能。
停车场管理系统课程设计报告
开始 Time++ Time<24 YES 生成新来车辆 车辆达成 离开条件 YES NO
NO
便道未满, 车 辆还有剩余
车辆离开 YES NO
车辆进入便道
停车场有空位
NO
停车场未满
YES 便道车辆进入停车场
YES 车辆进入停车场 输出一天统 计数据
NO 车辆有剩余 结束 YES 输出 FULL
函数功能: void OpenForDay()//初始化,打开文件,变量赋初值 void NewCars()//通过随机数生成每小时新来车辆的数目及每辆车的车牌号 void CarArrived()//车辆到达,停车场空位减少,相应车位记为非空,开始记录车辆的 到达时间、停留时间及车号 void CarDeparture()//车辆离开,停车场空位增加,车位初始化,计算车费并输出提
2.接着是对整个停车场系统的分析,第一,这个停车场管理系统是模拟了一个 30 车位 的停车场与 5 车位的便道相结合的系统, 功能是罗列出一天内停车场内车辆出入情况以 及每辆车停泊的位置(系统还会给出车的车牌号)和时间,最后是统计车辆出入的总车 次,车辆停泊的总时间,停车场的总收入;第二,明确一些临界问题。1,若车位已满, 则车必须在便道内等待,不需要付费;2,车辆停留 1 小时后离开的概率是 25%,每多 停留 1 小时后离开概率增加 25%,4 小时后一定要离开;3,若有空车位,但此时便道上 还有车在等待,便道上的车先进入停车场,新到的车仍需在便道上等待;
70337.This car has stayed for 1 hour(s).30 dollar should be payed for. 60296.This car has stayed for 3 hour(s).90 dollar should be payed for. 60297.This car has stayed for 3 hour(s).90 dollar should be payed for. 60320.This car has stayed for 2 hour(s).60 dollar should be payed for. 60321.This car has stayed for 2 hour(s).60 dollar should be payed for. 70324.This car has stayed for 2 hour(s).60 dollar should be payed for. 70325.This car has stayed for 2 hour(s).60 dollar should be payed for. 70329.This car has stayed for 1 hour(s).30 dollar should be payed for. 60299.This car has stayed for 3 hour(s).90 dollar should be payed for. 60296.This car has stayed for 4 hour(s).120 dollar should be payed for. 60311.This car has stayed for 3 hour(s).90 dollar should be payed for.
停车场管理系统(数据结构课程设计)
停车场管理系统一编程思想:将停车场设计成一个虚拟的栈,将其入口设计成栈顶,在设计一个倒车场,也将其设计成一个虚拟的栈,使其入口为栈顶,再根据队列设计一个供车来停放的便道,当停车场里的车辆不为满时,车辆进入停车场,当停车场里的车辆为满时,车辆在便道里等候,当车辆从停车场里出来的时候,如果出来的不是第一个车辆,则其前面的车辆将进入倒车场里面,待车辆出去后,倒车场里的车再依次进入停车场,如果停车场不满的话,便道里等候的第一辆车进入停车场,进入停车场的时间为停车场中车辆出来的时间,再设计一个函数用来显示停车场以及便道中车辆的信息。
二程序流程图:三,程序代码:#include<stdio.h>#define Size 3 /*车库容量*/#define Price 5 /*单位价格*/#define Null 0typedef struct time{int hour; /*时间结点*/}Time;typedef struct{int car_number;Time arrivetime,leavetime; /*车信息结点*/ int fee;}car_info;typedef struct{car_info *north;car_info *south; /*停车场信息*/int number;}car_park;typedef struct{car_info *west;car_info *east; /*倒车场信息*/int number;}car_park_back;Typedef struct car{car_info *data;struct car *next; /*结点信息*/}carnode;typedef struct node{carnode *head;carnode *rear; /*便道信息*/int number;}car_park_temp;void init_car_park(car_park *cp){cp->north=(car_info *)malloc(Size * sizeof(car_info)); /*初始化停车场*/ if(!cp->north) printf("error\n");cp->south=cp->north; /*令栈顶等于栈底*/cp->number=0;}void enter_car_park(car_park *cp,car_info *car){*cp->south++=*car; /*车辆进入停车场*/cp->number++;}int notfull_car_park(car_park *cp){int e;if(cp->south-cp->north>=Size) /*判断常常是否已满*/e=0;elsee=1;return(e);int notempty_car_park_back(car_park_back *cpb){int e;if(cpb->east==cpb->west)e=0; /*判断倒车场是否不空*/ elsee=1;return(e);}void back_car_park(car_park *cp,car_info *car){*car=*cp->south; /*进行倒车操作*/cp->number--;}void init_car_park_back(car_park_back *cpb){cpb->west=(car_info *)malloc(Size *sizeof(car_info));if(!cpb->west) printf("error\n"); /*倒车场初始化*/cpb->east=cpb->west;cpb->number=0;}void enter_car_park_back(car_park_back *cpb,car_info *car) {*cpb->east++=*car;cpb->number++; /*进入倒车场操作*/}void leave_car_park_back(car_park_back *cpb,car_info *car) {*car=*--cpb->east;cpb->number--; /*离开倒车场操作*/void init_car_park_temp(car_park_temp *cpt){cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode)); /*初始化便道*/ cpt->head->next=Null;cpt->number=0;}void enter_car_park_temp(car_park_temp *cpt,car_info *car){carnode *p;p=(carnode *)malloc(sizeof(carnode)); /*进入便道操作*/p->data=car;p->next=Null;cpt->rear->next=p;cpt->rear=p;cpt->number++;}void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp) {carnode *p;p=cpt->head->next;car=p->data; /*离开便道操作*/cpt->head->next=p->next;enter_car_park(cp, car); /*进入停车场操作*/cpt->number--;}int notempty_car_park_temp(car_park_temp *cpt){int e;if(cpt->head==cpt->rear) /*判断便道是否为空*/e=0;elsee=1;return(e);}void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb){int e, a1,b1,t; /*定义时间变量*/car_info *car1,*car2;car1=(car_info *)malloc(sizeof(car_info)); /*车辆实体化*/car2=(car_info *)malloc(sizeof(car_info));while((--cp->south)->car_number!=car->car_number) /*判断车号是否为要出去的车号*/ {back_car_park(cp,car1); /*进行倒车操作*/enter_car_park_back(cpb,car1); /*进入倒车场*/}car->arrivetime.hour=cp->south->arrivetime.hour;a1=car->arrivetime.hour;b1=car->leavetime.hour;t=(b1-a1);car->fee=t*Price; /*计算价格*/printf("the time of the car is %3d hour\n",t);printf("the money is %3d yuan\n",car->fee);e=notempty_car_park_back(cpb); /*判断倒车场是否为空*/while(e==1){leave_car_park_back(cpb,car2); /*离开倒车场enter_car_park(cp,car2); 进入停车场e=notempty_car_park_back(cpb); 判断倒车场是否为空*/}cp->number--;}void main() /*主函数*/{char ch; /*定义字符和int e,n,i; 整形变量*/car_park_back *cpb; /* 定义停车场,倒车场以及便道的变量*/ car_park *cp;car_park_temp *cpt,*cpt2;car_info *car;cp=(car_park *)malloc(sizeof(car_park)); /*实体化变量*/cpb=(car_park_back *)malloc(sizeof(car_park));cpt=(car_park_temp *)malloc(sizeof(car_park_temp));init_car_park(cp); /*实体化停车场,倒车场,便道*/init_car_park_back(cpb);init_car_park_temp(cpt);do{car=(car_info *)malloc(sizeof(car_info));printf("\ninput the 'A' or 'L' or 'X' ,end with '0' :");/*输入待操作的命令*/ scanf("%s",&ch);e=notfull_car_park(cp); /*判断车场是否为空*/switch(ch) /*判断要输入的命令*/{case 'A':if(e==1) /*车场不满,进入车辆*/{printf("input the car_number:"); /*输入车辆的基本信息*/scanf("%d",&car->car_number);printf("input the arrivetime:");scanf("%d",&(*car).arrivetime.hour);enter_car_park(cp,car); /*进入车场*/printf("the car is in the car_park,the place is %d\n",cp->number);}else /*若车场满,进入便道*/{enter_car_park_temp(cpt,car);printf("input the car_number:");scanf("%d",&car->car_number);printf("the car is in the car_park_temp,the place of temp is %d\n",cpt->number);}break;case 'L': /*离开停车场*/printf("input the car_number:"); /*输入要离开车辆的号码以及离开时间*/scanf("%d",&car->car_number);printf("input the leavetime of the car:");scanf("%d",&(*car).leavetime.hour);leave_car_park(cp,car,cpb); /*执行离开车场*/i=(*car).leavetime.hour; /*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/n=notempty_car_park_temp(cpt); /*判断便道是否不空*/if(n==1)printf("The car %d",cpt->head->next->data->car_number); /*记住便道里第一辆车的号码*/ leave_car_park_temp(cpt,car,cp); /*离开便道,进入停车场*/printf(" is enter the car_park,arrivetime is %d ,the place of carpark is %d\n",i,cp->number);break;case 'X': /*查看车场以及便道里的车辆信息*/printf("\nThere are %d cars in car park!\nFolowing is the carnumber in the car park:\n ",cp->number);for(i=1;i<=cp->number;i++) /*做循环,依次输出停车场里车辆的信息*/printf("%d,",(cp->north++)->car_number);cp->north=cp->north-cp->number;cpt2->head=cpt->head; /*设一个虚拟指针使其指向头结点的下一个位置*/ if(cpt->number==0) /*便道里没有车的情况*/printf("\nThere is no cars in temp!") ;else{ printf("\nThere are %d cars in car temp!\nFolowing is the carnumber in the car temp:\n ",cpt->number);for(i=1;i<=cpt->number;i++) /*做一个循环,输出便道里车辆的信息*/ {printf("%d ",cpt2->head->next->data->car_number); /* 输出车辆的号码*/ cpt2->head=cpt2->head->next;}}break;default:break; /*退出循环*/}}while(ch!='0'); /*退出操作*/}。
数据结构课程设计《停车场管理系统》
数据结构课程设计《停车场管理系统》⽬录1 问题描述 (1)2 需求分析 (1)3 概要设计 (1)3.1抽象数据类型定义 (1)3.2模块划分 (3)4 详细设计 (5)4.1数据类型的定义 (5)4.2主要模块的算法描述 (6)5 测试分析 (11)6 课程设计总结 (14)参考⽂献 (14)附录(源程序清单) (15)1 问题描述设停车场是⼀个可停放n辆汽车的狭长通道,且只有⼀个门可供出⼊。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(门在最南端,最先到达的第⼀辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,⼀旦有车开⾛,则排在便道上的第⼀辆汽车即可开⼊;当停车场内某辆车要离开时,在它之后进⼊的车辆必须先退出车场为它让路,待该辆车开出⼤门外,其他车辆再按原顺序进⼊车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费⽤。
2需求分析(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进⾏计时收费。
(2)当有车辆从停车场离开时,等待的车辆按顺序进⼊停车场停放。
实现停车场的调度功能。
(3)⽤顺序栈来表⽰停车场,链队表⽰停车场外的便道。
(4)显⽰停车场信息和便道信息。
(5)程序执⾏的命令为:○1车辆进⼊停车场○2车辆离开停车场○3显⽰停车场的信息。
3概要设计3.1抽象数据类型定义(1)栈的抽象数据类型定义AST Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}数据关系:R1={|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。
基本操作:InitStack(&S)DestroyStack(&S)初始条件:栈S已存在。
操作结果:栈S被销毁。
ClearStack(&S)初始条件:栈S已存在。
操作结果:将栈S清为空栈。
StackEmpty(S)初始条件:栈S已存在。
停车场管理系统数据结构课程设计报告
数据结构课程设计题目:停车场管理系统学生姓名:郑鹏学号: 1006402003系别:计算机科学与技术专业:计算机科学与技术指导教师:马竹根讲师起止日期:2012.3.26——2012.4.152012年 4月 19 日目录摘要 (1)关键词 (1)1 前言 (2)2 需求分析 (3)2.1 范围 (3)2.1.1 标识 (3)2.1.2 系统概述 (3)2.2 需求概述 (3)2.2.1 系统目标 (3)2.2.2 运行环境 (3)2.2.2.1 设备 (3)2.2.2.2 支持程序 (4)2.2.3 用户的特点 (4)2.3功能需求 (4)2.3.1 系统用例图 (4)2.4实体关系图 (5)3 概要设计 (7)3.1 范围 (7)3.1.1 标识 (7)3.1.2 系统概述 (7)3.2 系统结构 (7)3.3 停车场管理系统界面设计 (7)4 系统详细设计 (8)4.1 范围 (8)4.1.1 标识 (8)4.1.2 系统概述 (8)4.2 详细设计说明 (8)4.2.1 登录界面设计 (8)5 测试说明 (19)5.1 范围 (19)5.1.1 标识 (19)5.1.2 系统概述 (19)5.2 测试计划及预期结果 (19)5.3 具体测试情况 (20)7总结 (24)参考文献 (25)致谢 (26)停车场管理系统的设计与开发摘要课程设计目的:通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
通过课程设计,开发一个中小型系统,掌握系统研发全过程。
通话课程设计,培养分析问题、解决实际问题的能力。
实现方法:通过建立栈来模拟停车场,当栈未满时即停车场内车辆未满时,就可以停放车辆当停车场满了后车就得停靠在便道上等待。
停车场管理系统的设计与实现数据结构课程设计
《数据结构》课程设计题目:停车场管理系统班级:网络工程姓名:***学号:E********完成日期:2015年11月15日一.需求分析1.停在便道;2.停在车库;3.从车库移到便道;4.从便道移到车库;5.从车库取车;6.从便道取车;综上所述可知,总共有4种停车方式。
1.若一直停在便道中,需要在进入便道时以浮点数输入进入时间,当选择6取车时,需要输入在便道中停车的时间。
在便道中提车时会显示进入的时间,以及是否需要发票,在计算完停车费用后退出主菜单。
2. 若一直停在车库中,会在进入时检测车库是否满,若不满,允许进入,同样提示输入到达时间,当选择5取车时,需要输入在车库停车时间。
提车时,会显示进入的时间,以及是否需要发票,在计算完停车费用后退到主菜单。
3. 若先在车库停车后又转到便道停车,则会先检测车库是否满了,这是这个情况满足的最大前提,之后需要输入到达车库时间,其实这也没什么用,因为最后计算费用时,只会加上转移位置的20元费用和在便道停的费用。
在提车时会显示有在本停车场转移位置的信息。
4.若先在便道上停车,后又到车库停,原理同3,在此不再赘述。
二.概要设计1.由于栈的特殊出栈入栈顺序,所以所有进入车库的车辆必须遵守“先进后出”的顺序来停车和提车,由于栈是顺序结构,所以在进入车库时需要检测车库是否饱和,在提车时也需要检测车库是否为空;2.同时,队列需要满足“先进先出”的思想,但此次试验用的链式结构,一般来说,不存在饱和情况,但在提车时候需要检测便道是否有车。
3.栈的数据域存放进入车库的时间,车牌,队列节点数据域存放进入便道的时间车牌,设置标记是否在停车场内更改停车位置,有更改则置为1,否则为0。
4.如果一辆车车库移到便道,除了更换进入便道的时间外,车牌号从链表的数据里得到,从便道移到车库也类似。
另外,更改位置前停放费用不计入最后的费用。
5.除了要输入进入时间,在更换停车位置时需要输入进入时间,在最后提车时需要输入离开时间,方便计算总费用。
数据结构课程设计车辆停放系统
车辆进出管理算法
总结词:安全高效
详细描述:设计一个安全高效的车辆进出管理算法,确保车辆的进出有序、安全。可以考虑使用队列 、栈等数据结构来管理车辆的进出顺序,同时结合门禁系统、监控系统等硬件设施提高安全性。
05
实现与测试
实现方法与工具
实现方法
采用面向对象编程思想,使用C编程 语言实现。
实现工具
数据结构课程设计车 辆停放系统
目录
• 引言 • 车辆停放系统需求分析 • 数据结构设计 • 算法设计 • 实现与测试 • 性能优化与改进 • 总结与展望
01
引言
背景介绍
城市车辆数量不断增 加,停车难问题日益 突出。
车辆停放系统是解决 停车难问题的重要手 段之一。
传统停车场存在管理 不便、效率低下等问 题。
动态规划
在解决复杂问题时,采用动态规划方法,减 少重复计算和时间复杂度。
系统性能评估与改进建议
性能测试
通过实验和模拟对系统进行性 能测试,包括响应时间、吞吐
量等指标。
性能分析
分析系统性能瓶颈,找出影响 性能的关键因素。
优化建议
根据性能测试和分析结果,提 出针对性的优化建议,如硬件 升级、算法改进等。
对未来工作的展望
功能拓展
计划在未来进一步完善和拓展系统功能,如 增加车位预约、在线支付等功能。
性能优化
针对现有系统的性能瓶颈,深入研究更高效 的数据结构和算法,提升系统性能。
用户体验改进
对用户界面进行优化,提高用户体验和操作 便捷性。
安全加固
加强系统的安全防护措施,提高系统的安全 性和稳定性。
THANKS
初始化停车场、车辆入场、车辆出场、车辆查询、停车位查询。
数据结构课程设计-停车场系统
目录一课题分析ﻩ错误!未定义书签。
二逻辑分析ﻩ错误!未定义书签。
2。
1数据结构的描述和每个基本操作的功能说明 (2)2.1 给出本程序包含的模块及模块之间的调用关系图.. 错误!未定义书签。
2。
3 写出重要部分的伪码算法ﻩ错误!未定义书签。
三详细设计....................... 错误!未定义书签。
3.1数据结构的定义,及其基本操作的实现ﻩ错误!未定义书签。
3。
2主函数和其他函数的实现或伪码算法............ 错误!未定义书签。
3.3 程序的层次结构的函数调用关系图ﻩ错误!未定义书签。
3。
4详细设计ﻩ错误!未定义书签。
四程序源代码.................... 错误!未定义书签。
五程序调试与测试ﻩ错误!未定义书签。
5.1 主界面...................................... 错误!未定义书签。
5。
2 具体操作................................... 错误!未定义书签。
5。
2.1进站时间与车牌号ﻩ错误!未定义书签。
5。
2.2 车站已满,请进入临时车道ﻩ错误!未定义书签。
5。
2。
3出站与收费ﻩ错误!未定义书签。
5.2.4 结束.................................................................................... 错误!未定义书签。
5.3相关操作ﻩ错误!未定义书签。
六程序中遇到的问题与解决方法..... 错误!未定义书签。
6.1 写提纲ﻩ错误!未定义书签。
6。
2 在程序调试过程,遇到的相关问题ﻩ错误!未定义书签。
七总结........................... 错误!未定义书签。
八参考文献....................... 错误!未定义书签。
ﻬ一课题分析a)该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下:1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时间3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)4、要求栈以顺序结构实现;b)程序的输入,程序功能选择,字符型,A为到达,D离开,E退出系统;车的编号是整型,输入数字即可;时间是float类型,可精确到分钟c)程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示停到便道上;车离开时,输出车的编号及其所需费用。
数据结构c语言版课程设计停车场管理系统
课程设计:停车场c语言版本的数据结构课程设计,规定用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,vc:(下编译#include <stdio.h>//#include <stdlib.h> //malloc#include <time.h> //获取系统时间所用函数#include <conio.h> //getch()#include <windows.h> //设立光标信息mallco#define MaxSize 5 /*定义停车场栈长度*/#define PRICE 0.05 /*每车每分钟收费值*/#define BASEPRICE 0.5 //基础停车费#define Esc 27 //退出系统#define Exit 3 //结束对话#define Stop 1 //停车#define Drive 2 //取车int jx=0,jy=32; //全局变量日记打印位置typedef struct{int hour;int minute;}Time,*PTime; /*时间结点*/typedef struct /*定义栈元素的类型即车辆信息结点*/ {int num ; /*车牌号*/Time arrtime; /*到达时刻或离区时刻*/}CarNode;typedef struct /*定义栈,模拟停车场*/{CarNode stack[MaxSize];int top;}SqStackCar;typedef struct node /*定义队列结点的类型*/{int num; /*车牌号*/struct node *next;}QueueNode;typedef struct /*定义队列,模拟便道*/{QueueNode *front,*rear;}LinkQueueCar;/*函数声明*/PTime get_time();CarNode getcarInfo();void qingping(int a);void gotoxy(int x,int y);void printlog(Time t,int n,int io,char ab,int po,double f);void printstop(int a,int num,int x0,int y0);void printleave(int a,int po,int num);/*初始化栈*/void InitSeqStack(SqStackCar *s){s->top=-1;}/* push入站函数*/int push(SqStackCar *s,CarNode x) //数据元素x入指针s所指的栈{if(s->top==MaxSize-1)return(0); //假如栈满,返回0 else{s->stack[++s->top]=x; //栈不满,到达车辆入栈return(1);}}/*栈顶元素出栈*/CarNode pop(SqStackCar *s){CarNode x;if(s->top<0){x.num=0;x.arrtime.hour=0;x.arrtime.minute=0;return(x); //假如栈空,返回空值}else{s->top--;return(s->stack[s->top+1]); //栈不空,返回栈顶元素}}/*初始化队列*/void InitLinkQueue(LinkQueueCar *q){q->front=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点,作头结点if(q->front!=NULL){q->rear=q->front;q->front->next=NULL;q->front->num=0; //头结点的num保存队列中数据元素的个数}}/*数据入队列*/void EnLinkQueue(LinkQueueCar *q,int x){QueueNode *p;p=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点p->num=x;p->next=NULL;q->rear->next=p; //新结点入队列q->rear=p;q->front->num++; //队列元素个数加1}/*数据出队列*/int DeLinkQueue(LinkQueueCar *q){QueueNode *p;int n;if(q->front==q->rear) //队空返回0return(0);else{p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;n=p->num;free(p);q->front->num--;return(n); //返回出队的数据信息}}/********************* 车辆到达***************************/ //参数:停车栈停车队列车辆信息//返回值:空//功能:对传入的车辆进行入栈栈满则入队列void Arrive(SqStackCar *stop,LinkQueueCar *lq,CarNode x){int f;f=push(stop,x); //入栈if (f==0) //栈满{EnLinkQueue(lq,x.num); //入队printstop(1,lq->front->num,0,23);printlog(x.arrtime,x.num,1,'B',lq->front->num,0);qingping(0); printf("您的车停在便道%d号车位上\n",lq->front->num); //更新对话}else{printstop(0,stop->top+1,0,23);printlog(x.arrtime,x.num,1,'P',stop->top+1,0);qingping(0); printf("您的车停在停车场%d号车位上\n",stop->top+1); //更新对话}qingping(1); printf("按任意键继续");getch();}/************************** 车辆离开*************************************///参数:停车栈指针s1,暂存栈指针s2,停车队列指针p,车辆信息x//返回值:空//功能:查找栈中s1的x并出栈,栈中没有则查找队p中并出队,打印离开收费信息void Leave(SqStackCar *s1,SqStackCar *s2,LinkQueueCar *p,CarNode x){double fee=0;int position=s1->top+1; //车辆所在车位int n,f=0;CarNode y;QueueNode *q;while((s1->top > -1)&&(f!=1)) //当栈不空且未找到x{y=pop(s1);if(y.num!=x.num){n=push(s2,y);position--;}elsef=1;}if(y.num==x.num) //找到x{gotoxy(33,17);printf("%d:%-2d",(x.arrtime.hour-y.arrtime.hour),(x.arrtime.minute-y.arrtime.minute) );fee=((x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute))*PRICE+BASEP RICE;gotoxy(48,17); printf("%2.1f元\n",fee);qingping(0); printf("确认您的车辆信息");qingping(1); printf("按任意键继续");getch();while(s2->top>-1){ y=pop(s2);f=push(s1,y);}n=DeLinkQueue(p);if(n!=0){y.num=n;y.arrtime=x.arrtime;f=push(s1,y);printleave(p->front->num+1,position,s1->top+1); //出栈动画ji队列成员入栈printlog(x.arrtime,x.num,0,'P',position,fee);printlog(y.arrtime,y.num,1,'P',s1->top+1,0);}else{printleave(0,position,s1->top+2);printlog(x.arrtime,x.num,0,'P',position,fee);}}else //若栈中无x{while(s2->top > -1) //还原栈{y=pop(s2);f=push(s1,y);}q=p->front;f=0;position=1;while(f==0&&q->next!=NULL) //当队不空且未找到xif(q->next->num!=x.num){q=q->next;position++;}else //找到x{q->next=q->next->next;p->front->num--;if(q->next==NULL)p->rear=p->front;gotoxy(33,17); printf("0:0");gotoxy(48,17); printf("0元");qingping(0); printf("您的车将离便道");qingping(1); printf("按任意键继续");getch();printleave(-1,position,p->front->num+1); //出队动画printlog(x.arrtime,x.num,0,'B',position,0);f=1;}if(f==0) //未找到x{qingping(0); printf("停车场和便道上均无您的车");qingping(1); printf("按任意键继续");getch();}}}/*获取系统时间*///返回PTime类型PTime get_time(){Time *t;t=new Time;time_t timer;struct tm *tblock;timer=time(NULL);tblock=localtime(&timer);t->minute=tblock->tm_min;t->hour=tblock->tm_hour;return t;}/*移动光标*///蒋光标移动到(x,y)点void gotoxy(int x,int y){COORD coord;coord.X=x;coord.Y=y+3;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); }/*画图*///画出系统界面void panitPL(){gotoxy(20,4);printf("****************对话框****************");int x=18,y=6; //起始点int a[2][4]={2,0,0,1,-2,0,0,-1}; //方向for(int i=0;i<2 ;i++){for(int j=0; j<20; j++){x+=a[i][0]; y+=a[i][1];gotoxy(x,y);printf("═");}x+=a[i][0]; y+=a[i][1];gotoxy(x,y);if(i==0)printf("╗");elseprintf("╚");for(j=0; j<12; j++){x+=a[i][2]; y+=a[i][3];gotoxy(x,y);printf("║");}x+=a[i][2]; y+=a[i][3];gotoxy(x,y);if(i==0)printf("╝");elseprintf("╔");}gotoxy(22,8);printf("小王:");gotoxy(22,11);printf("顾客:");gotoxy(22,14); printf("*********** 停车信息***********");gotoxy(23,15); printf("车牌号:");gotoxy(42,15); printf("时间:");gotoxy(23,17); printf("停车时长:");gotoxy(42,17); printf("收费:");}/*清屏函数*///更新对话框前将原对话晴空void qingping(int a){if(a==0) //清空小王的对话{gotoxy(28,8); printf(" ");gotoxy(28,9); printf(" ");gotoxy(28,8);}else if(a==1) //清空顾客的对话{gotoxy(28,11); printf(" ");gotoxy(28,12); printf(" ");gotoxy(28,13); printf(" ");gotoxy(28,11);}else //清空车辆信息{gotoxy(31,15); printf(" ");gotoxy(48,15); printf(" ");gotoxy(33,17); printf(" ");gotoxy(48,17); printf(" ");gotoxy(31,15);}}//用上下键移动选择int getkey(){char c;int x=28,y=11;while(1){gotoxy(x,11); printf(" ");gotoxy(x,12); printf(" ");gotoxy(x,13); printf(" ");gotoxy(x,y); printf(">>");c=getch();if(c==13) return y-10; //enter键返回当前选项if(c!=-32)continue; //不是方向键进行下次循环c=getch();if(c==72) if(y>11) y--; //上if(c==80) if(y<13) y++; //下}}//输入车辆信息CarNode getcarInfo(){PTime T;CarNode x;qingping(0); printf("请输入您的车牌号\n");qingping(1); printf("在下面输入车辆信息");qingping(2);scanf("%d",&(x.num));T=get_time();x.arrtime=*T;gotoxy(48,15); printf("%d:%d",x.arrtime.hour,x.arrtime.minute);getch();return x;}//打印停车场void printcar(){gotoxy(0,20); //╔ ╗╝╚═║printf("═══════════════════════════════════════╗");printf(" 出场暂放区║ 1 2 3 4 5 ║");printf("---------------------------------------------------------------------- ║");printf(" 主车道║");printf("---------------------------------------------------------------------- ║");printf(" 12 11 10 9 8 7 6 5 4 3 2 1 ║");printf("═══════════════════════════════════╗ ║");printf(" ↑ ╔══════════════╝ ║");printf(" 便道停车区→ ║ 1 2 3 4 5 ║");printf(" ╚══════════════════╝");printf(" 停车场管理日记\n\n");printf(" 时间车牌号进(1)/出(0) 车位(B便道P停车场) 收费(元) "); }//打印日记记录void printlog(Time t,int n,int io,char ab,int po,double f){jy++;gotoxy(jx,jy);// printf(" 时间车牌号进(1)/出(0) 车位(B便道P停车场) 收费(元) ");if(io==0)printf("/ %2.1f",f);gotoxy(jx,jy);printf(" / %d / %c:%d",io,ab,po);gotoxy(jx,jy);printf(" %d:%d / %d",t.hour,t.minute,n);}void printstop(int a,int num,int x0,int y0){static char *car="【█】";// int x0=0,y0=23;int x=0,y=28;if(a==0){x=(num+6)*6;for(;x0<72;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}for(;y0<y;y0++){gotoxy(x0,y0); printf("%s",car); Sleep(100);gotoxy(x0,y0); printf(" ");}for(;x0>x;x0--){gotoxy(x0,y0); printf("%s",car); Sleep(50);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}else{x=(12-num)*6;y=y-3;for(;x0<x;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}}void printleave(int a,int po,int num){static char *car="【█】";int x0=0,y0=23;int x=0,y=28;int i;if(a==-1){x=(12-po)*6;y=y-3;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car);Sleep(100);if(12>num){gotoxy((12-num)*6,y);printf(" ");}gotoxy(x,y); printf("%s",car);for(;x>x0;x--){gotoxy(x,y-2); printf("%s",car); Sleep(30);gotoxy(x,y-2); printf(" ");}}else{i=num+1;for(;num>po;num--){x=(num+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>21;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(i-num+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}x=(po+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>23;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>0;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}num++;for(;i-num>0;num++){x=(i-num+6)*6; y=21;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y<28;y++){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(num-1+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}if(a>0){x=66;y=25;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car); Sleep(100);if(12>a){gotoxy((12-a)*6,y);printf(" ");}if(a>1){gotoxy(x,y); printf("%s",car);}printstop(0,i-1,x,y-2);}}}/************************************************************ main ********************************************************/int main(void){SqStackCar s1,s2; //停车栈和暂存栈LinkQueueCar p; //队列InitSeqStack(&s1);InitSeqStack(&s2);InitLinkQueue(&p);printf(" 停车场管理系统\n\n");printf("************************* 欢(=^_^=)迎***************************\n");printf(" 收费标准:基础费0.5元,每分钟收取0.05元,收费精确到0.1元\n");printf(" PS:车牌号由阿拉伯数字组成");panitPL();printcar(); gotoxy(0,-3);char c=0; //接受按键while(1) //按ESC退出系统{for(int i=2;i>-1 ;i--) //初始化对话框qingping(i);printf("按ESC退出系统,其它键开始对话");c=getch();if(c==Esc){qingping(0);break;}while(1){qingping(2);gotoxy(28,8); printf("欢迎来到停车场!我是管理员小王。
数据结构课程设计停车场管理系统
试验二停车场管理班级: A0712学号: 12 姓名: 冷清淼成绩: __________指导教师签名: __________一、问题描述设停车场是一种可停放n辆车旳狭长通道, 且只有一种大门可供汽车进出。
在停车场内, 汽车按抵达旳先后次序, 由北向南依次排列(假设大门在最南端)。
若停车场内已停满n辆车, 则后来旳汽车需在门外旳便道上等待, 当有车开走时, 便道上旳第一辆车即可开入。
当停车场内某辆车要离开时, 在它之后进入旳车辆必须先退出停车场为它让路, 待该辆车开出大门后, 其他车辆再按原次序返回车场。
每辆车离开停车场时, 应按其停留时间旳长短交费(在便道上停留旳时间不收费)。
设计规定:1. 模拟上述管理过程。
规定以次序栈模拟停车场, 以链队列模拟便道。
2.从终端读入汽车抵达或拜别旳数据, 每组数据包括三项:(1)是“抵达”还是“离开”;(2)汽车牌照号码;(3)“抵达”或“离开”旳时刻。
3. 与每组输入信息对应旳输出信息为: 假如是抵达旳车辆, 则输出其在停车场中或便道上旳位置;假如是拜别旳车辆, 则输出其在停车场中停留旳时间和应交旳费用。
二、算法阐明1. 数据构造阐明(1)用到两个堆栈: 一种为车场栈;另一种为临时栈temptypedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar; /*模拟车场*/一种队列构造, 存储便道车辆信息:typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟便道*/2. 算法阐明(1) 功能模块阐明:停车场管理系统具有三个模块, 即:车辆抵达、离开、列表显示图1(2)以模块为单位分析算法1.“抵达”模块: 抵达时有两种状况, 即车场与否满, 未满则直接进入停车场;满时, 到便道等待。
如图2。
图22.“离开”模块:离开时, 当车库为空时, 提醒没有车, 结束;否则车辆离开。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构设计:停车场管理姓名:韦邦权专业:2013级计算机科学与技术学号:13224624班级:13052316完成日期:2013.12.191 问题描述设停车场是一个可停放n辆汽车的狭长通道,且只有一个门可供出入。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆汽车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原顺序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
2需求分析(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
(3)用顺序栈来表示停车场,链队表示停车场外的便道。
(4)显示停车场信息和便道信息。
(5)程序执行的命令为:○1车辆进入停车场○2车辆离开停车场○3显示停车场的信息。
3概要设计3.1抽象数据类型定义(1)栈的抽象数据类型定义AST Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。
基本操作:InitStack(&S)操作结果:构造一个空栈S。
DestroyStack(&S)初始条件:栈S已存在。
操作结果:栈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返回其值。
StackTraverse(S,visit())初始条件:栈S已存在且非空。
操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一旦visit()失败,则操作失效。
}ADT Stack(2)队列的抽象数据类型定义ADT Queue{数据对象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}约定其中a1端为队列头,an为队列尾。
基本操作:InitQueue(&Q)操作结果:构造一个空队列Q。
DestroyQueue(&Q)初始条件:队列Q已存在。
操作结果:队列Q被销毁,不再存在。
ClearQueue(&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返回其值。
QueueTraverse(Q,visit())初始条件:Q已存在且非空。
操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。
一旦visit()失败,则操作失败。
}ADT Queue3.2模块划分本程序包括六个模块:(1)主程序模块void main(){初始化停车站;初始化让路的临时栈;初始化通道;输出主菜单:车辆到达、车辆离开与计费、查看停车场信息;}(2)入场模块int arrive(SqStack *In,LinkQueue *W){车辆进入停车场;计算停车费用}(3)出场模块void leave(SqStack *In,SqStack *Out,LinkQueue *W) {车辆离开停车场;}(4)输出模块void info(SqStack S,LinkQueue W){输出停车场信息;}(5)栈模块——实现栈的抽象数据类型(6)队列模块——实现队列的抽象数据类型4 详细设计4.1数据类型的定义int MAX; /*定义一个全局变量用来存储车库最大容量*/float price;/*定义一个全局变量用来存储每车每小时的费用*/ typedef struct time{int hour;int min;}Time; /*时间结点*/typedef struct node{char num[10];Time reach;Time leave;}Car; /*车辆信息结点*/typedef struct NODE{Car *stack[100];int top;}SqStack; /*停车站*/typedef struct car{Car *data;struct car *next;}QNode;typedef struct Node{QNode *head;QNode *rear;}LinkQueue; /*通道*/4.2主要模块的算法描述本程序主要分为四部分:(1)主函数及程序框架、(2)车辆到达模块、(3)车辆离开模块、(4)显示车辆信息模块,(1)主函数void main(){SqStack In,Out; LinkQueue Wait;int ch;InitStack(&In); /*初始化停车站*/InitStack(&Out); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/while(1){printf("--------------------欢迎使用停车场管理系统--------------------\n");printf("\t本系统由5011工作室开发,作者:邓春国、段庆龙、梁伟明、丁磊。
\n\n");printf("请输入停车场的容量:");scanf("%d",&MAX);printf("请输入停车场的收费标准(元/小时):");scanf("%f",&price);printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);printf("\n(1)车辆到达\n(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\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分别表示“1”-“4”这四个按键的键值*/system("CLS");printf("--------------------欢迎使用停车场管理系统--------------------\n");printf("\t本系统由CG工作室开发,作者:邓春国、段庆龙、梁伟明、丁磊。
\n\n\n");printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);printf("\n(1)车辆到达\n(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\n");}}}(2)车辆离开模块○1算法分析void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*车辆离开*/{int room;Car *p,*t;QNode *q;/*开始定义一个整型变量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循环语句,如果输入的车辆位置超出范围,就要重新输入。
*/while(In->top>room) /*车辆离开*/{Out->top++;Out->stack[Out->top]=In->stack[In->top];In->stack[In->top]=NULL;In->top--;}/*如果栈顶位置In->top大于要离开的车位置room(即要离开的车不在停车场的门口)的话,在要离开的车辆前面的车就要先离开,开到临时停车场,即临时栈中,因此Out所表示的临时栈的栈顶top加1,用来表示临时停车场增加1辆车;接着把该车的信息拷贝到栈Out中,然后删除栈In的栈顶(即这辆车开走)。
*/ p=In->stack[In->top];In->stack[In->top]=NULL;In->top--;while(Out->top>=1){In->top++;In->stack[In->top]=Out->stack[Out->top];Out->stack[Out->top]=NULL; Out->top--;}/*直到要离开的车辆前面的车都开到临时停车场之后,该车才离开,离开之后,该车的信息结点In->stack[In->top]置空,然后栈顶In->top减1。