停车场管理系统源代码
停车场管理系统源代码

int main(){
int i=1;
int j=1;
int status;
float time,money;
LinkQueue Q;
Car car_I,car_D,car_M;
SqStack S;
SqStack2 S2;
InitStack(S);
InitStack2(S2);
InitQueue(Q);
}
time=car_D.time-car_I.time;
if(time<0.0) {
printf("输入时间有错!请重新输入!");
}
if(time>0.0&&time<=3.0){
money=time*4;
}
else money=time*6;
printf("你的车牌为%d的车,应收费%5.2f元。",car_D.CarNum,money);
printf("\t\t位置:%d",l++);
printf("\n");
q++;
}
return OK;
}
//备用车道(顺序栈)
typedef struct {
Car2 *top2;
Car2 *base2; //
int stacksize2;
}SqStack2;
//初始化
int InitStack2(SqStack2 &S2){
if(!StackFull(S)){
DeQueue(Q,car_M); //便道上的车离开后进入停车场,那么后面的车的位置都得变。
经典C源码 之 停车场管理系统

break;
case 'o':
if(!StackEmpty(S))
{
Pop(&S,&carout);
printf("The %dth car comes out\n",bel);
if(!QueueEmpty(Q))
{
QueueDelete(&Q,&carout);
Push(&S,carout);
{
stackcar->BottomStack=(struct Car *)malloc(STACKSIZE*sizeof(struct Car));
if(!(stackcar->BottomStack))
return 0;
stackcar->Top=stackcar->BottomStack;
stackcar->Size=STACKSIZE;
}
}
else
printf("There is on car!");
break;
case 'q':
printf("\nThere is %d cars in the garage\n",S.Top-S.BottomStack);
printf("There is %d cars in the queue waiting\n",Q.rear-Q.front);
if(!(Q->front))
return 0;
Q->front->next=0;
return 1;
}
int QueueEnter(struct LinkQueue *Queue,struct Car car)
停车场管理系统源程序

#include <stdio.h>/*包含了与标准I/O库有关的变量定义和宏定义*/#include <stdlib.h>/*文件包含所用的文件*/#include<conio.h>#include<io.h>#include <stdlib.h>int cars[12][4]={{1234,1,1,20},{2345,1,2,15},{3456,1,3,10},{4567,1,4,5},{0,1,5,0},{0,1,6,0},{0,2,1,0},{0,2,2,0},{0,2,3,0},{0,2,4,0},{0,2,5,0},{0,2,6,0}};/*二维数组代表停车信息*/void save(){FILE *fp;int i,j;if((fp=fopen("car.dat","w"))==NULL){printf("cannot open file\n");return;}for(i=0;i<12;i++)for(j=0;j<4;j++)if(fwrite(cars,2,1,fp)!=1)printf("file write error\n");fclose(fp);getchar();}void car_park(void)/*停车操作*/{int x,i,j;printf("\n ^-^ 欢迎您的光临! ^-^\n ");printf(" \n\n 请输入车牌号:\n\n");printf("\n 注意:车牌号要在1000至9999之间\n 输入错误的车牌号将返回菜单\n\n"); scanf("%d",&x);/*输入要停车的车牌号*/for (i=0;i<12;i++)if(cars[i][0]==x||x<1000||x>9999)break;if(i!=12){printf("\n错误的号码或已经停过了!!!\n");getchar();}/*如果此车号以在,打印此车已停*/else if(i==12&&x>=1000&&x<=9999){for (i=0;i<12;i++)if(cars[i][0]==0) {cars[i][0]=x;save();printf("\n\n成功\n\n");printf("层=%d,车位=%d\n",cars[i][1],cars[i][2]);printf("\n\n\nTwo times 'Enter' to end...");break;}/*如果此车号不在,则进行停车操作*/for (i=0;i<12;i++)if(cars[i][0]!=0) cars[i][3]+=5;/*所有停车时间+5*/save();/*保存以上信息到文件*/}}void car_get(void)/*取车操作*/{int i,y;float paid;int a;printf("\n 取车\n\n\n 输入车牌号:\n\n\n\n");printf("\n 车牌号在1000至9999之间\n 错误的号码\n\n"); scanf("%d",&y);/*输入要取车的车牌号*/for(i=0;i<12;i++){for(i=0;i<12;i++)if(cars[i][0]==y){cars[i][0]=0;/*取车后车牌号清零*/paid=0.2*cars[i][3]/5;/*计算停车费用*/printf("\n 计费(1--是2或任意键--否)\n\n\n");scanf("%d",&a);{switch(a){case 1:printf("\n\n\n价格是%8.2fyuan\n",paid);/*打印停车费用*/ cars[i][3]=0;/*时间清零*/save();break;case 2:printf("欢迎您下次光临");cars[i][3]=0;/*时间清零*/save();break;default: break;}}}else;break;}if(i==12)printf("\n此车不在停车场!!!\n");/*如果此车不在,打印号码不在*/}void printfdata()/*停车信息*/{int i,j;FILE *fp;fp=fopen("car.dat","r");/*打开文件"car.dat"*/printf(" \n Number Floor Position Time\n");for(i=0;i<12;i++){for(j=0;j<4;j++){fread(cars,2,1,fp);/*读文件*/printf(" %6d",cars[i][j]);}printf("\n");}fclose(fp);/*关闭文件"car.dat"*/}void save();void car_park(void);void car_get(void);void printfdata();char readcommand();void initialization();int main(){char c;printf("*******************************停车场管理操作程序*******************************\n");printf("设计者:秦民凯专业:岩土工程学号:20081002763 日期: 2010/9/2\n");;printf("--------------------------------------------------------------------------------\n");printf("按'enter'开始\n");while(1){initialization(); /*初始化界面*/c=readcommand(); /*读取停车场状况*/system("cls");switch(c){case 'p': car_park(); break;/*停车操作*/case 'P': car_park(); break;/*停车操作*/case 'g': car_get(); break;/*取车操作*/case 'G': car_get(); break;/*取车操作*/case 'd': printfdata();printf("\n\n please press 'Enter' to continue....\n");scanf("%c",&c); break;/*停车信息*/case 'D': printfdata(); /*停车信息*/printf("\n\n rreupklfdkplease press 'Enter' to continue....\n");scanf("%c",&c); break;case 'e': printf("\n\n\n\n Press 'Enter' to continue...");exit(0); break;case 'E': printf("\n\n\n\n Press 'Enter' to continue...");exit(0); break;default : printf("ERROR! Press 'Enter' to continue..."); getchar(); break;}}}/****************************************************************************** **/void initialization() /*初始函数*/{int i;getchar();printf("\n*********************************************************************** *********\n");printf(" 1. 停车--p 2. 取车--g 3. 停车时间--d 4.退出--E");printf("\n\n********************************************************************** **********\n");}char readcommand() /*选择函数*/{char c;while((c!='p')&&(c!='P')&&(c!='g')&&(c!='G')&&(c!='d')&&(c!='D')&&(c!='e')&&(c!='E')) {printf("输入p,g,d,e 选择!!\n");c=getchar();printf("\n");break;}return c;}。
C语言版停车位管理系统

C语⾔版停车位管理系统本⽂实例为⼤家分享了C语⾔实现停车位管理系统的具体代码,供⼤家参考,具体内容如下简单功能介绍1、录⼊车辆信息2、查找车辆信息3、删除车辆信息4、修改车辆信息5、查找区域车辆信息6、排序(按照车主姓名排序)7、展⽰所有车辆信息8、将录⼊的数据保存在⽂件中9、将⽂件中的数据读出算法构造链表的增删改查结构体的定义typedef struct Parking{char name[20]; //车主姓名char carname[10]; //车牌号long information; //车主联系⽅式char region; //车位区域编号int num; //车位编号struct Parking *next; //指针}Parking;录⼊车辆信息利⽤尾插法插⼊新添加的数据Parking *Addcar(Parking *head) //录⼊车辆信息{int x;system("cls"); //清屏操作system("color B"); //改变字体颜⾊Parking *p = head;while(p->next!=NULL) //利⽤尾插法插⼊新⽤户信息{p = p->next;}printf("输⼊需要添加的车辆个数:");scanf("%d", &x);while(x--) //输⼊⽤户信息{system("cls");Parking *Node = (Parking *)malloc(sizeof(Parking));printf("\n输⼊⽤户姓名:");scanf("%s",Node->name);printf("\n输⼊车牌号:");scanf("%s",Node->carname);printf("\n输⼊车主联系⽅式:");scanf("%ld",&Node->information);printf("\n输⼊车位区域编号:");getchar();scanf("%c",&Node->region);printf("\n输⼊车位编号:");scanf("%d",&Node->num);Node->next=NULL;p->next = Node;p = p->next;}printf("\n输⼊完成!");F(head); //打印添加后的⽤户信息printf("\n按任意键返回主页\n");getch(); //⽤来显⽰结果return head;}删除⽤户信息根据⽤户名匹配查找⽤户信息进⾏删除Parking *Delete(Parking *head) //删除⽤户信息{char name[20];system("cls");system("color B");printf("\n\t\t输⼊你要删除的⽤户姓名:");scanf("%s", name);Parking *p = head;Parking *q = p->next;while(q) //找到需要删除数据的前结点{if(strcmp(q->name,name)==0) //判断字符串是否相等函数{p->next = q->next;free(q); //释放内存空间break;}p = q;q = p->next;}if(p->next==NULL){printf("\n\t\t未找到该⽤户信息!");}else{printf("\n\t\t删除成功!!");F(head);}printf("\n\t\t按任意键返回主菜单");getch();return head;}查找⽤户信息根据字符串匹配查找⽤户信息void Find(Parking *head) //查找⽤户信息{system("cls");system("color B");char name[20];printf("\n\t\t输⼊你要查找的⽤户姓名:");scanf("%s", name);Parking *p = head;while(p->next){if(strcmp(p->next->name,name)==0){printf("找到了!\n");printf("该⽤户的信息如下:");printf("\n\t\t---⽤户姓名 %s",p->next->name);printf("\n\t\t---车牌号 %s",p->next->carname);printf("\n\t\t---车主联系⽅式 %ld",p->next->information); printf("\n\t\t---车位区域编号 %c",p->next->region);printf("\n\t\t---车位编号 %d",p->next->num);break;}p = p->next;}if(p->next==NULL)printf("\n\t\t没有找到该⽤户信息");printf("\n\t\t按任意键返回主菜单");getch();}修改⽤户信息查找⽤户找到后显⽰该⽤户的信息,根据⽤户选择修改信息Parking *Change(Parking *head) //修改⽤户信息{char name[20];system("cls");system("color B");printf("输⼊需要修改的⽤户姓名:");scanf("%s", name);Parking *p = head->next;while(p){if(strcmp(p->name,name)==0){system("cls");system("color B");int x;printf("\n\t\t --该⽤户信息-- \n\n");printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系⽅式---车位区域编号-----车位编号----\n");printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); printf("\n输⼊你要修改的信息编号:\n");printf(" 1-车主姓名 \n");printf(" 2-车牌号 \n");printf(" 3-车主联系⽅式 \n");printf(" 4-车位区域编号 \n");printf(" 5-车位编号 \n");scanf("%d", &x);switch(x){case 1:printf("\n\t输⼊修改后的信息");scanf("%s", p->name);break;case 2:printf("\n\t输⼊修改后的信息");scanf("%s", p->carname);break;case 3:printf("\n\t输⼊修改后的信息");scanf("%ld", &p->information);break;case 4:printf("\n\t输⼊修改后的信息");scanf("%c", &p->region);break;case 5:printf("\n\t输⼊修改后的信息");scanf("%d", &p->num);break;}printf("\n\t\t修改后的⽤户信息为");printf("\t车主姓名--------车牌号-------车主联系⽅式---车位区域编号-----车位编号----\n");printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num); break;}p = p->next;}if(p==NULL){printf("\n未找到相应⽤户");printf("\n按任意键返回主页\n");getch();return head;}printf("\n修改完成!");F(head); //显⽰修改后的全部信息printf("\n按任意键返回主页\n");getch();return head;}其他链表操作排序(根据⽤户姓名排序)void *Sort(Parking *head) //排序{Parking *p=head;Parking *q,*p1=NULL,*p2=NULL;while(p->next != NULL){q = p->next;while(q->next != NULL){if(strcmp(p->next->name,q->next->name)>0) //字符串⽐较{p1 = p->next; //记录p与q的下⼀结点p2 = q->next;q->next = q->next->next;p->next = p2;p2->next = p1;}elseq = q->next;}p = p->next;}F(head);printf("\n\t\t按任意键返回主菜单");getch();}查找区域车辆信息void RegionalVehicles(Parking *head) //寻找指定区域内车辆信息{system("cls");system("color B");char c;printf("\n\t\t输⼊你想要查看的区域");getchar();scanf("%c", &c);Parking *p = head->next;printf("\n\t\t --%c区域内车辆⽤户信息-- \n\n",c);printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系⽅式---车位区域编号-----车位编号----\n");while(p){if(p->region==c) //判断区域字符与输⼊字符是否相等,相等则输出{printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);}p = p->next;}printf("\n\t\t按任意键返回主菜单");getch();}⽂件的读取与输⼊将数据保存在⽂件中之所以⽤w形式打开⽂件是因为我在程序运⾏前已将⽂件内数据读出,最后进⾏保存数据时覆盖原数据不会导致原数据丢失void Preservation(Parking *head) //保存数据在⽂件中{const char* filename1 = "C:/Users/judicious/Desktop/car.text"; //⽂件路径FILE *fp = fopen(filename1, "w"); //以写的⽅式打开⽂件,若⽂件不存在,则建⽴新的⽂件。
C语言停车场管理系统源代码.doc

#include<stdio.h>#include<stdlib.h>#define stacksize 2 //车站//容量///////////////////////////////////////////////////////typedef struct Snode{int number;float int_time[2];float bian_time[2];}record;typedef struct {record *base;record *top;int size;}Stack;/////////////////////////////////////////////////////typedef struct Qnode{int number;float int_time[2];struct Qnode *next;}Qnode,*Queue;typedef struct {Queue front;Queue rear;}Linkqueue;void xunhuan(Stack L,Linkqueue Q);void jixu(Stack L,Linkqueue Q);//////////////////////////////////////////////////////////////////////////////////////////////////////////void InitStack(Stack &L) //堆栈操作{L.base=(record*)malloc(sizeof(Snode)*stacksize);if(!L.base)exit(0);L.top=L.base;L.size=stacksize;}/////////////////////////////////////////////////////void input(Stack &L,record h){*L.top++=h;}///////////////////////////////////////////////////Snode output(Stack &L,record &e){e=*--L.top;return e;}int Stackman(Stack L){if(L.top-L.base==L.size)return 0;elsereturn 1;}int StackEmpty(Stack L){if(L.base==L.top)return 0;elsereturn 1;}////////////////////////////////////////////////////////////////////////////////////////////////////void Initque(Linkqueue &Q) //队列操作{Q.front=Q.rear=(Queue)malloc(sizeof(Qnode));if(!Q.front)exit(0);Q.front->next=NULL;}//////////////////////////////////////////////////void enqueue(Linkqueue &Q,int number,float time[]){Queue q;printf("停车场已满,请将车辆停入便道!\n");q=(Queue)malloc(sizeof(Qnode));q->int_time[0]=time[0];q->int_time[1]=time[1];q->number=number;q->next=NULL;Q.rear->next=q;Q.rear=q;}///////////////////////////////////////////////////void outqueue(Linkqueue &Q,Queue &e) //此处有点问题??????????????{// Qnode *q;// q=(Queue)malloc(sizeof(Qnode));e=Q.front->next;// Q.front->next=q->next;//delete q;Q.front->next=Q.front->next->next;if(Q.rear==e){Q.front=Q.rear;// Q.front=NULL;}}int QEmpty(Linkqueue Q){if(Q.rear==Q.front)return 0;elsereturn 1;}//////////////////////////////////////////////////// //停车场管理操作////////////////////////////////////////////////////void jixu(Stack L,Linkqueue Q){int n;fflush(stdin);scanf("%d",&n);switch(n){case 1:printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");xunhuan(L,Q);break;case 2:printf("****************************退出管理系统*****************************\n");default:printf("\n输入错误,请重新输入: ");jixu(L,Q);break;}}void jiaofei(float time[],float time1[],float time2[]) //缴费操作{float data1,data2;double money;if(time2[0]!=0&&time2[1]!=0)data2=(time1[0]-time2[0]-1)*60+60-time2[1]+time1[1];elsedata2=0;data1=(time[0]-time1[0]-1)*60+60-time1[1]+time[1];// printf("进入车场时间%f,退出车场时间%f\n",time1[1],time[1]);printf("你的停车时间为%lf小时,在便道停留时间%f小时\n",data1/60,data2/60);money=data1/60*5.0+data2/60*2.0;printf("请交纳%lf元\n",money);/* if(data1<=60.0)printf("请交纳5元。
停车场管理系统的代码

设停车场是一个可停放n 辆车的狭长通道,且只有一个大门可供汽车进出。
在停 车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。
若 车场内已停满n 辆车,则后来的汽车要在门外的便道上等候, 当有车开走时,便 道上的第一辆车即可开入。
当停车场内某辆车要离开时,在它之后进去的车辆必 须先推出车场为它让路,待该辆车开出大门以后,其他车辆再按原次序返回车场。
每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收 费)。
试编写程序,模拟上述管理过程。
要求以顺序栈模拟停车场,以链队列模 拟便道。
从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达” 还是“离去” (2)汽车牌照号码;(3) “到达”或“离去”的时刻。
与每组输入信 息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置; 如果是离去的车辆,则输出其在停车场中停留的时间和应缴的费用。
(需另设一个栈,临时停放为让路而从车场退出的车。
)#include<iostream> #define M 5using namespace std;typedef int Datatype;typedef struct {Datatype bianhao[M];int top;int h[M]; // int m[M]; //int s[M]; // }Seqstack; // typedef struct Node // { Datatype bianhao; struct Node *next; }node;typedef struct{node *front;node *rear;int count;}biandao; // 便道//停车场顺序栈初始化void lnitSeqstack(Seqstack *t)时分秒停车场栈的定义{t->top=-1;}//进栈,即进入停车场int Push(Seqstack *t,int x,int h,int m,int s){if(t->top==M-1)return 0; // 停车场栈已满t->top++;t->bianhao[t->top]=x;t->h[t->top]=h;t->m[t->top]=m;t->s[t->top]=s;return 1;}//出栈,即离开停车场int Pop(Seqstack *t,int *x,int *h,int *m,int *s) {if(t->top==-1)return 0;else{*x=t->bianhao[t->top]; *h=t->h[t->top]; *m=t->m[t->top];*s=t->s[t->top]; t->top--;return 1;}}//查找某牌照的车在停车场中的位置,若找到则返回其位置,否则返回-1int Find(Seqstack t,int x){int i;for(i=0;iv=t.top;i++){ if(t.bianhao[i]!=x) continue;elsebreak;}if(i>t.top)return(-1);elsereturn(i);}//判断停车场内是否已满int lsSeqstackFull(Seqstack t){if(t.top==M-1)return 1;elsereturn 0;}//判断停车场内是否已没有车辆int lsSeqstackEmpty(Seqstack t) {if(t.top==-1)return 1;elsereturn 0;}//依次显示停车场内停放的所有车辆void ShowSeqstack(Seqstack t) {int i;if(t.top==-1)coutvv"停车场内没有停放车辆"vvendl;elsefor(i=0;i<=t.top;i++)coutvv"牌照:"vvt.bianhao[i]vvendl;}//队列初始化int Initbiandao(biandao *Q){Q->front=new node;if(Q-> front!=NULL){Q->rear=Q->fr ont;Q->front->next=NULL;Q->count=0;return(true);}else return(false);}//入队操作,即当停车场满了的时候,再到达的车辆进去便道队列int Enterbiandao(biandao *Q,int x) {node *NewNode; NewNode=new node; if(NewNode!=NULL) {NewNode->bianhao=x; NewNode->next=NULL;Q->rear->next=NewNode; Q->rear=NewNode;Q->co un t++;return(true);}else return(false);}//出队操作,即便道上的车辆从便道开出来int Deletebiandao(biandao *Q,int *x){node *p;if(Q->fro nt==Q->rear)return(false);p=Q->front->next;Q->front->next=p->next; if(Q->rear==p) Q->rear=Q->fr ont;*x=p->bianhao;free(p);Q->count--;return(true);}//判断便道队列是否为空int lsbiandaoEmpty(biandao Q){if(Q.front==Q.rear) return(true);elsereturn(false);// 当count=0时,就空了}//依次显示便道上停放的所有车辆void Showbiandao(biandao Q)node *p;p=Q.front->next;if(p==NULL)coutvv"便道上没有停放车辆!"vvendl;elsewhile(p!=NULL){coutvv" 牌照:"vvp->bianhaovvendl; p=p->n ext;}}36//计算停留时间差double Time(int h1,int m1,int s1,int h2,int m2,int s2) {double p,q;p=h1*3600+m1*60+s1 -(h2*3600+m2*60+s2); q=(double)p/3600;return(q);}//计算停车费用double Cost(double t,int u){return(t*u);}//主函数void main(){double time,cost;int ch;int x,*y, z;int i,flag=1,h,m,s,unit_price,hh,mm,ss;y=new int; Seqstack *t;// 定义停车栈t=new Seqstack;InitSeqstack(t);biandao *Q;// 定义便道队列Q=new biandao;Initbiandao(Q); Seqstack *r; //定义让路 栈r=new Seqstack;InitSeqstack(r);coutvv"请设置停车费用单价:(_元/小时)"vvendl; cin>>unit_price;while(flag){ 束"vvendl;cin>>ch;switch(ch) {case 1:coutvv" 请输入到达的汽车牌照号码:"vvendl; cin>>x;if(lsSeqstackFull(*t)){coutvv" 停车场已满,请在便道等候 !"vvendl; "vvendlvv"2: 离开"vvendlvv"3:依次显示停车场内停放车H***************************" coutvv" 请选 择命令:"vvendlvv"1:辆"vvendlvv"4:依次显示便道上停放车辆 "<<endlvv"5: 结 coutvv vvendl;coutvv H***************************" vvendl;Enterbiandao(Q,x);coutvv" 将此车停放在便道的"vvQ->countvv" 号位置!"vvendl;}else{while(1){coutvv" 请输入到达的时间(例如,21 08 23) : "vvendl;cin>>h>>m>>s;if (hv0 || h>23) continue; //输入数据不合法,回去重新输入if (mv0 || m>59) continue;if (s>-1 && sv61)break;//输入时间全部合法,退出循环}Push(t,x,h,m,s);coutvv" 将此车停放在停车场的"vvt->top+1vv" 号停车位置"vvendl;}break;case 2:if(lsSeqstackEmpty(*t))coutvv" 停车场内已没有车辆"vvendl;else{coutvv" 请输入要离开的汽车的车牌照号码:"vvendl;cin>>x;if(Find(*t,x)==-1)coutvv" 停车场内没有该汽车!"vvendl;else//有该号码的汽车{while⑴{coutvv" 请输入离开的时间(例如,2358 03) : "vvendl;cin>>h>>m>>s;if (h<0 || h>23) continue;//输入数据不合法,回去重新输入if (m<0 || m>59) continue;if (s>-1 && s<61)break; // 输入时间全部合法,退出循环}if(Find(*t,x)==t->top){Pop(t,y,&hh,&mm,& ss);//要离开的车辆正好是最后一辆进入停车场的车time=Time(h,m,s,hh,mm,ss);coutvv" 停留时间为:"vvtimevv"小时"vvendl; // 结账cost=Cost(time,unit_price);coutvv"应缴费用为:"vvcostvv" 元"vvendl;}else{for(i=(Find(*t,x)+1);iv=t->top;)〃该车不是最后一辆进入停车场的车,其它车要让路{Pop(t,y,&hh,&mm,& ss);Push(r,*y,hh,mm,ss); //进入让路栈rPop(t,y,&hh,&mm, &ss);//要离开的车辆离开了time=Time(h,m,s,hh,mm,ss);coutvv" 停留时间为:时"vvendl; // 结账cost=Cost(time,unit_price);coutvv"应缴费用为: "vvendl;for(i=0;iv=r->top;) // 让路的车辆重新回到停车场{Pop(r,y,&hh,&mm, &ss); Push(t,*y,hh,mm,ss); }}if(!lsbiandaoEmpty(*Q)){Deletebiandao(Q, &z);//便道上的第一辆车出队Push(t, z, h,m,s);//进入停车场,默认进入的时刻就是刚才的车离开的时刻}elsecoutvv"便道上没有车辆等候!"vvendl;}}break;"vvtimevv"小 "vvcostvv"元case 3:ShowSeqstack(*t); break;case 4:Showbiandao(*Q); break;case 5:flag=O;break;default:cout<<"错误命令!"vvendl;}}}。
C停车场管理系统简单代码实现

C停车场管理系统简单代码实现#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 30 /*车库容量*/#define price 30 /*每车每小时费用*/typedef struct time{int hour;int min;}Time; /*时间结点*/typedef struct node{char num[10];Time reach;Time leave;}CarNode; /*车辆信息结点*/typedef struct NODE{CarNode *stack[MAX+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 main(){system("color 00f");SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化车站*/InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/while(1){cout<<" 欢迎光临"<<endl;cout<<"**************************"<<endl;cout<<" 1. 车辆到达"<<endl;cout<<" 2. 车辆离开"<<endl;cout<<" 3. 列表显示"<<endl;cout<<" 4. 退出系统"<<endl;cout<<"**************************"<<endl;cout<<"请选择所需要的服务!"<<endl;cout<<"请注意正确输入时间,不要为非数字!"<<endl;while(1){cin>>ch;if(ch>=1&&ch<=4)break;else cout<<"请选择:1|2|3|4."<<endl;}switch(ch){case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/case 3:List(Enter,Wait);break; /*列表打印信息*/case 4:exit(0); /*退出主程序*/default: break;}}}void InitStack(SeqStackCar *s) /*初始化栈*/{int i;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->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 room) /*打印出站车的信息*/ {int A1,A2,B1,B2;cout<<"请输入离开的时间:/**:**/"<<endl;cin>>p->leave.hour;while(p->leave.hour<p->reach.hour||p->leave.hour>23) {cout<<"error!"<<endl;cout<<"请输入离开的时间的时("<<p->reach.hour<<"-23)"<<endl;cin>>p->leave.hour;B1=p->leave.hour;}cout<<":"<<endl;cin>>p->leave.min;cout<<endl<<"离开车辆的车牌号为:"<<endl;puts(p->num);cout<<"其到达时间为:"<<p->reach.hour<<":"<<p->reach.min<<endl;cout<<"离开时间为: "<<p->leave.hour<<":"<<p->leave.min<<endl;A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;cout<<"应交费用为: "<<((B1-A1)*60+(B2-A2))*price<<"元!"<<endl;free(p);}int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/{CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();cout<<"请输入车牌号(例:A1234):"<<endl;gets(p->num);if(Enter->top<MAX) /*车场未满,车进车场*/{Enter->top++;cout<<"车辆在车场第"<<Enter->top <<"位置!"<<endl;cout<<"请输入到达时间:/**:**/"<<endl;cin>>p->reach.hour;while(p->reach.hour<0||p->reach.hour>23){cout<<"error!"<<endl;cout<<"请输入到达时间的时(0-23)!"<<endl;cin>>p->reach.hour;}cout<<":"<<endl;cin>>p->reach.min;while(p->reach.min<0||p->reach.min>59){cout<<"error!"<<endl;cout<<"请输入到达时间的分(0-59)!"<<endl;cin>>p->reach.min;}Enter->stack[Enter->top]=p;return(1);}else /*车场已满,车进便道*/{cout<<"该车须在便道等待!"<<endl;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 room;CarNode *p,*t;QueueNode *q;/*判断车场内是否有车*/if(Enter->top>0) /*有车*/{while(1) /*输入离开车辆的信息*/{cout<<"请输入车在车场的位置1--"<<Enter->top<<":";cin>>room;if(room>=1&&room<=Enter->top) break;}while(Enter->top>room) /*车辆离开*/{Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p,room);/*判断通道上是否有车及车站是否已满*/if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/{q=W->head->next;t=q->data;Enter->top++;cout<<"便道的"<<t->num<<"号车进入车场第"<<Enter->top<<"位置!"<<endl;cout<<"请输入现在的时间如/*:*/:"<<endl;if(p->reach.hour<0||p->reach.hour>23){cout<<"error!"<<endl;cout<<"请输入到达时间的时(0-23)!"<<endl;cin>>p->reach.hour;}cout<<":"<<endl;cin>>p->reach.min;if(p->reach.min<0||p->reach.min>59){cout<<"error!"<<endl;cout<<"请输入到达时间的分(0-59)!"<<endl;cin>>p->reach.min;}W->head->next=q->next;if(q==W->rear) W->rear=W->head;Enter->stack[Enter->top]=t;free(q);}else cout<<"便道里没有车!"<<endl;}else cout<<"车场里没有车!"<<endl; /*没车*/}void List1(SeqStackCar *S) /*列表显示车场信息*/{int i;if(S->top>0) /*判断车站内是否有车*/{cout<<"车场:"<<endl;cout<<" 位置到达时间车牌号"<<endl;for(i=1;i<=S->top;i++){cout<<" "<<i<<""<<S->stack[i]->reach.hour<<":"<<S->stack[i]->reach.min<<" "<<S->stack[i]->num<<endl;}}else cout<<"车场里没有车!"<<endl;}void List2(LinkQueueCar *W) /*列表显示便道信息*/ {QueueNode *p;p=W->head->next;if(W->head!=W->rear) /*判断通道上是否有车*/ {cout<<"等待车辆的号码为:"<<endl;while(p!=NULL){puts(p->data->num);p=p->next;}}else cout<<"便道里没有车!";}void List(SeqStackCar S,LinkQueueCar W){int flag,tag;flag=1;while(flag){cout<<"请选择1|2|3:"<<endl;cout<<"1.车场"<<endl<<"2.便道"<<endl<<"3.返回"<<endl;while(1){cin>>tag;if(tag>=1||tag<=3) break;else cout<<"请选择1|2|3:"<<endl;}switch(tag){case 1:List1(&S);break; /*列表显示车场信息*/case 2:List2(&W);break; /*列表显示便道信息*/case 3:flag=0;break;default: break;}}}。
停车场管理系统代码

// 1、停车场管理.cpp : Defines the entry point for the console application. //^include stdafx.h*'^include vcon 1o.h>^include <malloc・h>^include <stdio.h>^include <stdlib.h>^include <windows. h>//清空当前屏幕#define ClearScreen() system( 'cls M )〃设置背景前景颜色//#define setcolor() system(u color 2f )//显不字符串szPrompt并等待用户按下任意键#define Pause( szPrompt) printf( %s: szPrompt ),getch()typedef struct carinformation // 车辆信息{char szRegistrationMark[64]; // 车牌号char szArrivalTime[16]; // 到达时间char szEntranceT1me[16]; //进入停车场(开始计费)时间char szDepartureTime[16]; // 离开时间} TCARINFORMATION, *LPTCARINFORAAATION;typedef struct carstack{LPTCARINFORMATION IpCarlnformation; // 车辆信息int nTop; //栈顶元素下标int nStackSize; // 栈容量} TCARSTACK, *LPTCARSTACK;//初始化栈IpCarStack,将其容量设置为nSizevoid ln1tStack( LPTCARSTACK ftlpCarStack, int nSize ){IpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ));lpCarStack->lpCarlnformation = ( LPTCARINFORMATION ) malloc( nSize * sizeof ( TCARINFORAAATION ));lpCarStack->nTop = -1;lpCarStack->nStackSize = n Size;}// 车辆信息carinfo 入栈IpCarStackvoid Push( LPTCARSTACK ftlpCarStack, TCARINFORAAATION carinfo ){IpCarStack-Top++;lpCarStack->lpCarl nformation [lpCarStack->nTop] = carinfo;}//车辆信息从栈IpCarStack中弹出并存入carinfovoid Pop( LPTCARSTACK ftlpCarStack, TCARINFORMATION &carinfo ) {carinfo = lpCarStack->lpCarlnformation[lpCarStack-> nTop];IpCarStack->nTop・・;}//若栈IpCarstack空,返回TRUE;否贝!J,返回FALSEBOOL IsStackEmptyf LPTCARSTACK IpCarStack ){return IpCarStackjnTop == -1;}//若栈IpStackFull满,返回TRUE;否则,返回FALSEBOOL IsStackFulK LPTCARSTACK IpCarStack ) return lpCarStack->nTop == ( lpCarStack->nStackSize • 1 );}// 销毁栈IpCarStack,将指针IpCarStack 置为NULLvoid DestroyStack( LPTCARSTACK &IpCarStack ){free( lpCarStack->lpCarlnformation );free( IpCarStack );IpCarStack = NULL;}typedef struct carnode // 链队结点信息{TCARINFORMATION carinfo; // 车辆信息struct carnode *lpNext; //指向下一个元素的指针} TCARNODE, *LPTCARNODE;typedef struct carqueue // ¥连队{LPTCARNODE IpHead; // 头结点LPTCARNODE IpRear; //指向当前队尾的指针int nEffectivesize; //当前队中元素个数} TCARQUEUE, *LPTCARQUEUE;//初始化链队IpCarQueuevoid lnitQueue( LPTCARQUEUE ftlpCarQueue ){IpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE )); lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ));lpCarQueue->lpHead->lpNext = NULL;lpCarQueue->lpRear = lpCarQueue->lpHead;IpCarQueue-EffectiveSize = 0;}// 车辆信息carinfo 入队IpCarQueuevoid EnQueue( LPTCARQUEUE ftlpCarQueue, TCARINFORMATION carinfo ) {LPTCARNODE IpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode )); lpCarNode->car1nfo = cari nfo;lpCarNode->lpNext = NULL;lpCarQueue->lpRear->lpNext = IpCarNode;lpCarQueue->lpRear = lpCarQueue->lpRear->lpNext;IpCarQueue->n EffectiveSize++;}//队头元素从链队IpCarQueue中出队并存入carinfovoid DeQueue( LPTCARQUEUE ftlpCarQueue, TCARINFORMATION ftcarinfo ) { LPTCARNODE IpTemp = lpCarQueue->lpHead->lpNext;carinfo = IpTemp ・>cari nfo;lpCarQueue->lpHead->lpNext = IpTemp ・> IpNext;free( IpTemp );IpCarQueue->n EffectiveSize-;}//若链队IpCarQueue为空,返回TRUE;否则,返回FALSEBOOL lsQueueEmpty( LPTCARQUEUE IpCarQueue ){return LpCarQueue->nEffect1veSize == 0;}//销毁链队IpCarQueuevoid DestroyQueue( LPTCARQUEUE EtlpCarQueue )LPTCARNODE IpNextCarNode = NULL;for ( LPTCARNODE IpCarNode = lpCarQueue->lpHead; IpCarNode != NULL; IpCarNode = IpNextCarNode ){IpNextCarNode = lpCarNode->lpNext;free( IpCarNode );}free( IpCarQueue );IpCarQueue = NULL;}//将字符串时间格式转换为数字(分钟)格式,例如12:36将被转换为756 (12 * 60 + 36)int ConvertTimeFormat( char *lpTime ){Int nHour = 0;int nMinute = 0;sscanf( IpTime, “%d:%d; 8tnHour, SnMinute );return nHour * 60 + nMinute;}//根据在停车场内的停留时间nContinuanceMinutes (分钟)计算费用double CalculateExpense( int nContinuanceMinutes ){return nContinuanceMinutes * ( 5.0 / 60 );}int main( void ){// setcolor();Int nParkCapability = 0; // 停车场容量putchar( \n*);PHns)jscanf(・•衣d jppnparkcapabujry「LPTCARSTACK -pear-stack"NULL"二®世曲生需更蹦-njrsrack 二pcarsrack 》nparkcmpmbsrty)八LPTCARQUEUE 【Pear-Queue =NULL"、二冊®曲爲兰赫更-njrQueue(-pcarQueue)jcharcCommandTypeHNULLj二劭3淋起 charSzuser-npuru28jH宀NULLY二a l}^> do宀Qearscreenoj二 seccoor(rpurchar(An ・rI .... );I -n -)j1 ->・-W 養区);purs(d ・W S B J F)jI H ・)」1-0・)」pucchar( -\n ・)一purs(=0辽)j P U £・A S§A 3926N 3W 3・・rPUS ・・9SPA3926二 444・・);puts(ni・);puts( © );putchar( \rf );printf(“请输入命令:“);seanf( “%s", szllserlnput);puts(H ................. “);char szCarlnformation[128] = { NULL};sscanff szllserlnput, //将命令类型与车辆信息分开存放”%c,%s“,&cCommandType, //用户输入的前半部分,即命令类型szCarlnformation //用户输入的后半部分,即车辆信息);char *LpCommaLocation = NULL; //车辆信息字符串中的逗号位置for ( IpCommaLocation = szCarlnformation; *lpCommaLocation != *\0'; lpCommaLocation++ ){if (*lpCommaLocation ==){break;}}*lpCommaLocati on = \0';TCARINFORMATION carinfo = { NULL }; //存储本次用户输入的车辆信息strcpy( carinfo.szRegistrationMark, szCarlnformation );if ( cCommandType == A )strcpy( carinfo.szArrivalTime, IpCommaLocation + 1 );if ( FALSE == lsStackFull( IpCarStack )){strcpy( carinfo.szEntranceTime, carinfo.szArrivalTime ); Push( IpCarStack, carinfo );printf(“已进入停车场第%d个车位\n“,lpCarStack->nTop + 1);printf("车牌号:\t\t%s\n", carinfo.szRegistrationMark ); printf("进入时间:\t%s\n", carinfo.szEntranceTime ); puts(“是否收费:\t是“);}else{EnQueue( IpCarQueue, carinfo );printf(“停车场已满,已停放在便道的第%d个车位\n“,lpCarQueue->nEffectiveS1ze);printf("车牌号:\t\t%s\n", carinfo.szRegistrationMark ); printf("停放时间:\t%s\n", carinfo.szArrivalTime );puts( ••是否收费:\t否”);}}else if ( cCommandType == 'D')strcpy( carinfo.szDepartureTime, IpCommaLocation + 1 );LPTCARSTACK IpTempCarStack = NULL;lnitStack( IpTempCarStack, nParkCapability );TCARINFORMATION carinfoOut = { NULL };BOOL blsCarFound = FALSE;while ( FALSE == lsStackEmpty( IpCarStack )){Pop( IpCarStack, carinfoOut);if ( 0 != strcmp( carinfoOut.szRegistrationMark, carinfo.szRegistrationMark )) {Push( IpTempCarStack, carinfoOut);}else{blsCarFound = TRUE;break;}}while ( FALSE == IsStackEmptyf IpTempCarStack )){TCARINFORAAATION tempcarinfo = { NULL };Pop( IpTempCarStack, tempcarinfo );Push( IpCarStack, tempcarinfo );} if ( FALSE == blsCarFound ) printf(1车牌号为%s 的车未进入停车场・\n;carinfo.szRegistrationMark );Pause(M.................... \n按任意键输入下 V信息…\n“);continue;strcpy( carinfoOut.szDepartureTime, carinfo.szDepartureTime );int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime ); Int nDepartureTIme = ConvertTimeFormat( carinfoOut.szDepartureTime ); int nContinuanceMinutes = nDepartureTime • nEntranceTime;printf("计费时段:\t%s - %s (共%d 分钟)\n",carinfoOut.szE ntran ceTime,carinfoOut.szDepartureTime, nContinu anceMinutes);double rExpense = CalculateExpense( nContinuanceMinutes );printf("应交纳的费用:\t%.1 If 7E\n", rExpense );if ( FALSE == lsQueueEmpty( IpCarQueue )){TCARINFORAAATION tempcarinfo = { NULL };DeQueue( IpCarQueue, tempcarinfo );strcpy( tempcarinfo.szEntranceTim® carinfoOut.szDepartureTime ); Push( IpCarStack, tempcarinfo );puts(" .................... ”);printf(“停放在便道的第1个车位,车牌号为%s的车已进入停车场\n“,tempcarinfo. szRegistrati on Markelse if ( cCommandType == E )puts( "********************"puts(H :吴远彦\n M);puts「学号:\n u);Uts( M********************" )•break;else if ( cCommandType == 0*){ClearScree n();//setcolor();putchar( *\n );puts( “[停车场使用情况]\n“);puts( •[车位]\t[车牌号]\t倒达时间]\t[进入(开始计费)时间]\n“); for (in t i = 0; i <= IpCarStack-Top; i++ ){printf( M%d\t%s\t\t%s\t\t%s\n\i + 1,IpCarStack- > IpCar I nformati on [i]・ szRegistratio nAAark, lpCarStack->lpCarlnformat1 on [i].szArrivalTime,lpCarStack->lpCarlnformation[i].szE ntranceTime);}putchar( \n );putchar( \n );putchar( \n );puts( •■[便道使用情况]\n“);puts( •[车位]\t[车牌号]\t[到达时间]\t[进入(开始计费)时间]\n“); int nNum = 0;for ( LPTCARNODE IpCarNode = lpCarQueue->lpHead->lpNext; IpCarNode != NULL; IpCarNode = lpCarNode->lpNext ){n Num++;printf( ,,%d\t%s\t\t%s\t\t%s\n\n Num,lpCarNode->carinfo.szRegistratio nMark,lpCarNode->carinfo.szArrivalTime,lpCarNode->carinfo.szEntra nceTime);}putchar( \n );}else{puts(“输入信息有误.第f 字符只能为'A'或D或E或0'(区分大宵) }Pause(”.................... \n按任意键输入下一息.\n“);} while ( TRUE );DestroyStack( IpCarStack );DestroyQueue( IpCarQueue );Pause( “\n按任意键退出程序...\n“);return 0;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//停车场管理系统#include<stdio.h>#include<stdlib.h>#define OVERFLOW 0#define ERROR 0#define OK 1#define STACKSIZE 2 //车库容量//时间节点typedef struct time{int hour;int min;}Time;//车辆信息typedef struct{char CarNum;float time;int pos_a; //车在停车场中的位置int pos_b; //车在便道上的位置int flag;}Car,Car2;//车库信息(顺序栈)typedef struct{Car *top;Car *base;int stacksize;}SqStack;//初始化int InitStack(SqStack &S){S.base=new Car[STACKSIZE];if(!S.base) exit(OVERFLOW);S.top=S.base;S.stacksize=STACKSIZE;return OK;}//判空int StackEmpty(SqStack S){if(S.top==S.base) return OK;else return ERROR;}//判满int StackFull(SqStack S){if(S.top-S.base>=S.stacksize) return OK;else return ERROR;}//入栈int Push(SqStack &S,Car e){if(S.top-S.base==S.stacksize) return ERROR;*S.top++=e;return OK;}//出栈int Pop(SqStack &S,Car &e){if(S.top==S.base) return ERROR;e=*--S.top;return OK;}//遍历栈int StackTraverse(SqStack S) {Car *p=S.top;Car *q=S.base;int l=1;if(StackEmpty(S)){for(int j=1;j<=STACKSIZE;j++){printf("\t车牌:");printf("\t\t到达时间:");printf("\t位置%d:空空",j);printf("\n");}return OK;}while(p!=q){Car car=*(q);printf("\t车牌: %d",car.CarNum);printf("\t\t到达时间:%5.2f",car.time);printf("\t\t位置:%d",l++);printf("\n");q++;}return OK;}//备用车道(顺序栈)typedef struct {Car2 *top2;Car2 *base2; // int stacksize2;}SqStack2;//初始化int InitStack2(SqStack2 &S2){S2.base2=new Car2[STACKSIZE];if(!S2.top2) exit(OVERFLOW); //S2.top2=S2.base2;S2.stacksize2=STACKSIZE;return OK;}//判空int StackEmpty2(SqStack2 S2){if(S2.top2==S2.base2) return OK;else return ERROR;}//进栈int Push2(SqStack2 &S2,Car2 e2){if(S2.top2-S2.base2==STACKSIZE) return ERROR;*S2.top2++=e2;return OK;}//出栈int Pop2(SqStack2 &S2,Car2 &e2){if(S2.top2==S2.base2) return ERROR;e2=*--S2.top2;return OK;}//车道信息(链队)typedef struct QNode{Car data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;}LinkQueue;//初始化int InitQueue(LinkQueue &Q){Q.front=Q.rear=new QNode;Q.front->next=NULL;return OK;}//进队int EnQueue(LinkQueue &Q,Car e){ QueuePtr p;p=new QNode;p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return OK;}//判空int QueueEmpty(LinkQueue Q){if(Q.front==Q.rear) return OK;else return ERROR;}//出队int DeQueue(LinkQueue &Q,Car &e){ QueuePtr p;if(Q.front==Q.rear) return ERROR;p=Q.front->next;e=p->data;Q.front->next=p->next;delete p;return OK;}//主函数int main(){int i=1;int j=1;int status;float time,money;LinkQueue Q;Car car_I,car_D,car_M;SqStack S;SqStack2 S2;InitStack(S);InitStack2(S2);InitQueue(Q);while(1){printf("\t\t\t欢迎来到XXX停车场!\n");printf("*****************************************************************\n");printf("\t\t\t1--车辆到达停车场\n");printf("\t\t\t2--车辆离开停车场\n");printf("\t\t\t3--停车场存放车辆情况\n");printf("\t\t\t0--退出程序\n");printf("*****************************************************************\n");printf("选择(0-3):\n");scanf("%d",&status) ;if(status==1){printf("\t请输入车牌号:");scanf("%d",&car_I.CarNum);printf("\t请输入车到达的时间:");scanf("%f",&car_I.time);if(!StackFull(S)){Push(S,car_I); //车进入车库car_I.pos_a=i;car_I.flag=1;i=i+1;for(int m=1;m<50;m++) //边线printf("--");printf("\n");printf("\t车牌号:");printf("%d",car_I.CarNum);printf("\t到达时间:");printf("%5.1f\t",car_I.time);printf("\t车库中的位置是:%d\n",car_I.pos_a);for(int m=1;m<50;m++) //边线printf("--");printf("\n");printf("\n");printf("\n");}else{EnQueue(Q,car_I);car_I.pos_b=j;car_I.flag=0; //++j;printf("\n");printf("\tSorry!我们的车库已满!!!,您可以把车!!免费!!停在车道上!\n");printf("\n");for(int m=1;m<50;m++) //边线printf("..");printf("\n");printf("\t车牌号:");printf("%d",car_I.CarNum);printf("\t便道上的位置为:%d\n",car_I.pos_b);for(int m=1;m<50;m++) //边线printf("..");printf("\n");printf("\n");printf("\n");}}else if(status==2){ //指令为2,开车离去(如果车在车库里收取停车费;在便道上则免费)printf("请输入客户的车牌号:");scanf("%d",&car_D.CarNum);printf("请输入现在的时间:");scanf("%f",&car_D.time);i=i-1;int flag=0;//判断车是否在便道上if(StackFull(S)){Car *p=S.top;Car *q=S.base;while(p!=q){Car car=*(q);if(car.CarNum!=car_D.CarNum){flag++;}if(car.CarNum==car_D.CarNum){goto loop;}q++;} //whileif(flag>=STACKSIZE){printf("您的车停在便道上,所以免费!!!");}printf("\n");printf("\n");printf("\n");} //ifelse{loop:do{ //挡在前面的车给要出去的车让路Pop(S,car_M);//加一个判断,判断是不是停车场里的车if(car_D.CarNum!=car_M.CarNum){Push2(S2,car_M);}else{car_I.time=car_M.time;}}while(car_D.CarNum!=car_M.CarNum);while(!StackEmpty2(S2)){ //让路的车返回去Pop2(S2,car_M);Push(S,car_M);}while(!QueueEmpty(Q)&&!StackFull(S)){if(!StackFull(S)){DeQueue(Q,car_M); //便道上的车离开后进入停车场,那么后面的车的位置都得变。