停车场管理系统C、C++代码.doc_第1页
停车场管理系统C、C++代码.doc_第2页
停车场管理系统C、C++代码.doc_第3页
停车场管理系统C、C++代码.doc_第4页
停车场管理系统C、C++代码.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

#include using namespace std;#include #define MAX_STOP 4 /定义停车场最大停车数#define MAX_PLATE 10 /定义车牌号最大长度 /数据结构定义/定义存储汽车信息的结构体typedef struct char license_plateMAX_PLATE; /汽车牌照号码,定义为一个字符指针类型 char state; /汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示CAR;/定义模拟停车场的栈结构typedef struct CAR STOPMAX_STOP; /汽车信息的存储空间 int top; /用来指示栈顶位置的静态指针SeqStack;/定义模拟便道的队列结构typedef struct node CAR WAIT; /汽车信息的存储空间 struct node *next; /用来指示队列位置的动态指针QNode; /链队列节点的类型/定义链队列的收尾指针typedef struct QNode *front,*rear;LQueue; /将头尾指针封装在一起的链队/函数声明int Empty_LQueue(LQueue *q); /判队空int LeaveCheck(SeqStack parking , char *license_plate); /检查离开的车是否在停车场中int QueueLength(LQueue *q); /判队长度int Out_LQueue(LQueue *&sidewalk , char *license_plate); /出队操作int StackEmpty(SeqStack parking); /判断栈是否为空int StackFull(SeqStack parking); /判断栈是否为满int StackPop(SeqStack &parking); /出栈操作int StackTop(SeqStack parking , char *license_plate );/取栈顶元素void Car_come(SeqStack &parking , LQueue *&sidewalk); /有车到来时的操作void Car_leave(SeqStack &parking , LQueue *&sidewalk); /有车离开的操作void Display(SeqStack parking); /显示停车场内的所有信息 调试时用void InitStack(SeqStack &parking); /初始化栈void InitList(LQueue *&sidewalk); /初始化队列void In_LQueue(LQueue *&sidewalk , char *license_plate); /进队操作void Input_Check(char *license_plate); /检验输入的车牌是否合法void StackPush(SeqStack &parking , char *license_plate );/进栈操作void main() /定义变量 SeqStack parking; LQueue *sidewalk = NULL; char *choice = new char; int flag = 1; /定义一个变量 判断是否退出 /初始化一个为空的停车场 InitStack(parking); /初始化一个为空的便道 InitList(sidewalk); /运行界面及功能选择 while(flag) cout 停车场模拟管理系统 endl; cout*endl; coutt有车到来时请按【C】键endlendl; coutt有车要走时请按【l】键endlendl; coutt查看停车场请按【D】键endlendl; coutt要退出系统请按【Q】键endlendl; cout*endl; cout请选择操作:; gets(choice); if(1 != strlen(choice) cout请正确输入选项!; continue; else switch(*choice) case c: case C: Car_come(parking,sidewalk);break; case l: case L: Car_leave (parking,sidewalk);break; case q: case Q: flag=0;break; case d: case D: Display(parking);break; default: cout选择不正确!请重新选择endl; /有车到来时的操作void Car_come(SeqStack &parking , LQueue *&sidewalk) /定义变量 char license_plateMAX_PLATE; cout请输入车辆的车牌号码:; Input_Check(license_plate); /判断停车场是否已满,满则进入便道,不满进入停车场 if(StackFull(parking) In_LQueue(sidewalk , license_plate); /进入便道 cout停车场已满请在便道等候,您的位置为QueueLength(sidewalk) endl; else StackPush(parking , license_plate ); /进入停车场 cout请进入停车场中的parking.top+1号停车位endl; /有车离开时的操作void Car_leave(SeqStack &parking , LQueue *&sidewalk) /定义变量 SeqStack tmpparking; /定义临时停车场 char leave_license_plateMAX_PLATE; /要离开的车牌号 char license_plateMAX_PLATE; /存放从停车场中读出来的车牌信息 InitStack(tmpparking); /初始化临时停车场 /判断停车场中是否有车 if(StackEmpty(parking) cout当前停车场中没有车endl; return; /退出子函数 cout请输入要离开的车牌照:; Input_Check(leave_license_plate); cout当前停车场中有parking.top+1辆车endl; if(LeaveCheck(parking , leave_license_plate) /判断车是否在停车场中 /车在停车场中 cout您的车在LeaveCheck(parking , leave_license_plate)号车位上endl; while(StackTop(parking , license_plate ) & (strcmp(parking.STOPparking.top.license_plate , leave_license_plate) != 0) strcpy(parking.STOPparking.top.license_plate , license_plate); cout牌照为license_plate的车暂时退出停车场parking.top+1号位endl; StackPush(tmpparking , license_plate ); /停车场中的车暂时退出 进入临时停车场 StackPop(parking); /出栈 cout牌照为license_plate的车离开停车场parking.top+1号位endl; StackPop(parking); /出栈 /将临时停车场中的车停回停车场 while(StackEmpty(tmpparking) != 1) StackTop(tmpparking , license_plate ); StackPush(parking , license_plate ); cout牌照为license_plate的车进入停车场parking.top+1号位endl; license_plate0 = 0; StackPop(tmpparking); if(parking.top+1 = MAX_STOP-1) /判断车离开前停车场是否停满 if(QueueLength(sidewalk) /如果停满则判断便道上是否有车 /便道中有车 则从便道中停入停车场 Out_LQueue(sidewalk , license_plate); /出队 StackPush(parking , license_plate ); /入栈 cout在便道中牌照为license_plate的车进入停车场parking.top+1号位endl; else /车不在停车场中 cout您的车不在停车场中!endl;/初始化顺序栈void InitStack(SeqStack &parking) parking.top = -1;/判栈空int StackEmpty(SeqStack parking) if(parking.top = -1) return 1; else return 0;/判栈满int StackFull(SeqStack parking) if(parking.top = MAX_STOP-1) return 1; else return 0;/入栈void StackPush(SeqStack &parking , char *license_plate ) parking.top+; strcpy(parking.STOPparking.top.license_plate , license_plate); parking.STOPparking.top.state = p;/出栈 返回栈顶指针int StackPop(SeqStack &parking) if(StackEmpty(parking) return 0; else return parking.top-;/取栈顶元素int StackTop(SeqStack parking , char *license_plate ) if(StackEmpty(parking) return 0; else strcpy(license_plate , parking.STOPparking.top.license_plate); return 1; /显示所有void Display(SeqStack parking) if(parking.top = -1) cout停车场为空endl; else while(parking.top != -1) cout车牌号为:parking.STOPparking.top.license_plate; cout,停在parking.top + 1 号车位上front=sidewalk-rear = NULL;/入队void In_LQueue(LQueue *&sidewalk,char *license_plate) QNode *car_on_sidewalk; car_on_sidewalk = (QNode *)malloc(sizeof(QNode); /为新节点开辟新空间 strcpy(car_on_sidewalk-WAIT.license_plate , license_plate); /将数据写入节点 car_on_sidewalk-WAIT.state = s; /写入停车信息 car_on_sidewalk-next = NULL; if(Empty_LQueue(sidewalk) /队空则创建第一个节点 sidewalk-front = sidewalk-rear = car_on_sidewalk; else /队非空插入队尾 sidewalk-rear-next = car_on_sidewalk; sidewalk-rear = car_on_sidewalk; /判队空int Empty_LQueue(LQueue *q) if(q-front = NULL) return 1; else return 0;/判队长度 返回队长int QueueLength(LQueue *q) QNode *p=q-front; int i=0; while(p != NULL) i+; p=p-next; return i; /出队 成功返回1 队空返回0int Out_LQueue(LQueue *&sidewalk,char *license_plate) QNode *car_on_sidewalk; if(Empty_LQueue(sidewalk) /如果队空返回0 return 0; car_on_sidewalk = sidewalk-front; strcpy(license_plate , car_on_sidewalk-WAIT.license_plate);/取出队头元素 if(sidewalk-front = sidewalk-rear) /队中只有一个元素 sidewalk-front = sidewalk-rear=NULL; /删除元素 else sidewa

温馨提示

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

评论

0/150

提交评论