⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 停车场管理系统.cpp

📁 停车场管理系统 这是本人第一次上传 如有问题可以交流一下 6102968
💻 CPP
字号:
#include<malloc.h>

#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
///计时,补上
#include<time.h>
///
#define stack_init_size 10
#define stackincrement 10
#define OK 1
#define ERROR 0
#define chewei 5 //停车场车位个数/
typedef int status;
typedef long selemtype;
typedef long qelemtype;


//栈。
typedef struct{
 selemtype stack_size;
 long *base;
 long*top;
 
}sqstack;
status initstack(sqstack &s){//新新建空栈
 s.base=(long *)malloc(stack_init_size * sizeof(long));
 if(!s.base)return 0;
 s.top=s.base;
 s.stack_size=stack_init_size;
 return OK;
}
status push(sqstack &s,selemtype e){//在栈中插入元素。
 if((s.top-s.base)>=s.stack_size){//栈满。追加空间
  s.base=(selemtype *)realloc(s.base,(s.stack_size+stackincrement) * sizeof(selemtype));
  if(!s.base)return 0;
  s.top=s.base+s.stack_size;
 }
 *s.top++ =e;
 return OK;
}
status pop(sqstack &s,selemtype &e){//出栈
 if(s.top ==s.base)return ERROR;
 e= * --s.top;
 return OK;
}
int length(sqstack s){//栈长度
 return s.top-s.base;
}
int chazhao(sqstack s,selemtype id){//查找元素在栈中的位置
 long *bb;bb=s.base;int bbb=0;
 int eqe;eqe=length(s);
 for(int ii=1;ii<=eqe;ii++){

  if(*bb==id){bbb=1;break;}
  bb++;
 }
 if(bbb=0)return 0;
 else if(ii>eqe)return 0;
 else return ii;
}

void xianshi(sqstack s){//显示栈内所有元素
 long *rr;rr=s.base;
 if(s.top ==s.base)cout<<"停车场内没有车辆\n";
 for(int iii=1;iii<=s.top-s.base;iii++){
  cout<<*rr<<" ";
  rr++;
 }
cout<<"\n";

return;
}

//队列
#define null 0

typedef struct Qnode{
 qelemtype data;
 struct Qnode *next;
}Qnode, *QueuePtr;
typedef struct{
 QueuePtr front;  //队头指针
 QueuePtr rear;   //队尾指针
}linkqueue;

status initqueue(linkqueue &Q){
 Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode));
 if(!Q.front)return ERROR;
 Q.front->next=null;
 return OK;
}

status enqueue(linkqueue &Q,qelemtype c){//插入元素
    QueuePtr p;
 p=(QueuePtr)malloc(sizeof(Qnode));
 if(!p)return ERROR;
 p->data=c;p->next = null;
 Q.rear->next=p;
 Q.rear=p;
 if(Q.front->next==null)Q.front->next=p;
 
 return OK;
}


status dequeue(linkqueue &Q,qelemtype &ee){//删除元素
 if(Q.front==Q.rear)return ERROR;
 QueuePtr p;
 p=Q.front->next;
 ee=p->data;
 Q.front->next=p->next;
 if(Q.rear==p)Q.rear=Q.front;
 free(p);
 return OK;
}
status changdu(linkqueue Q){//取得队列的长度
 if(Q.front->next==null)return 0;
 else if(Q.front==Q.rear)return 1;
 else{
  QueuePtr h;h=Q.front->next;
 for(int n=1;n<100;n++){
  if(h->next==null)break;
  h=h->next;}
 return n;}
}

status find(linkqueue Q,qelemtype t){//查找,返回车在队列中的位置。
QueuePtr k;qelemtype l;int x=0;
if(Q.front==Q.rear)return 0;
k=Q.front->next;
l=k->data;
if(l==t)return 1;
for(int wz=2;wz<=100;wz++){if(k->next==null)break;
 k=k->next;l=k->data;
 if(l==t){x=1;break;}


}
if(x=0)return 0;
else if(wz>changdu(Q))return 0;
else return wz;
} 


void xianshi2(linkqueue Q){//显示队列中所有元素
 QueuePtr k1;
 if(Q.front->next==null)return;
 else{k1=Q.front->next;
  for(int n1=1;;n1++){
   cout<<k1->data<<" ";
   if(k1->next==null)break;
   k1=k1->next;
  }
 }
cout<<"\n";
return;
}
   
//计费用结构体.后来补上
struct jifei{
 long idche;//车牌号
 time_t jinruahijian;//此车的进入时间
 int full; //判断结构体变量是否写入停车进入时间信息
}caitime[chewei];
//输入转化把字符转换为数字
long convert(char cid1[6]){

 long result=0;
 
 for (int cl=0;cl<=6;cl++)
 {
  if (cid1[cl]=='\0') break;
  if (cid1[cl]<'0' || cid1[cl]>'9') {return -1;} 
  result=result*10+(cid1[cl])-48; 
 }//把字符串转化为数值,这样的好处是当输入字符串等非正常信息时不会死循环
 
 return result;
}
int buzhijielikai(long carid,linkqueue &Q,sqstack &s,long &e,long &ee){
 long linshichedao[chewei];int pl;int lth;
 lth=length(s);
 pl=chazhao(s,carid);
 int n2;
 for(n2=0;n2<lth-pl;n2++){pop(s,e);linshichedao[n2]=e;}//出栈lth-pl次,把指定车辆后面的车都出栈赋给数组
 pop(s,e);//指定车辆出栈
 for(;n2>0;n2--){push(s,linshichedao[n2-1]);}//数组数据再进栈
 if(changdu(Q)!=0){dequeue(Q,ee);push(s,ee);
 cout<<endl<<"便道里的车"<<ee<<"已经进入车道,开始计费";
  
 
 //------------------------进栈计时,补上
 int h=0;
 for(h=0;h<=(chewei-1);h++){if(caitime[h].full==0)break;}
 caitime[h].idche=ee;
 caitime[h].jinruahijian=time(NULL);
 caitime[h].full=1;
 


//----------------以上为增加的计费模块
 }
 return 1;
}

 
int zhijielikai(linkqueue &Q,sqstack &s,long &e,long &ee){
 pop(s,e);
 if(changdu(Q)!=0){dequeue(Q,ee);push(s,ee);
 cout<<endl<<"便道里的车"<<ee<<"已经进入车道,开始计费"<<endl;
  
 
 //------------------------计时,补上
 int h=0;
 for(h=0;h<=(chewei-1);h++){if(caitime[h].full==0)break;}
 caitime[h].idche=ee;
 caitime[h].jinruahijian=time(NULL);
 caitime[h].full=1;
 

 }

//----------------以上为增加的计费模块}
 return 1;
}

void menu(){
cout<<"\n";
cout<<"\n-------------------------停车场管理系统--------------------------\n";
cout<<"                                                   disigned by 黄春亮\n";
cout<<"1.进入停车场停车\n";
cout<<"2.离开停车场\n";
cout<<"3.停车场信息\n";
cout<<"4.退出系统\n";
cout<<"请选择1-4: ";
return;
} 

void choose1(sqstack &s,linkqueue &Q){
char cid[6];
long cheid;
loop: cout<<"请输入你的车牌号,不大于7位: ";

cin>>cid;

cheid=convert(cid);
if(cheid==-1){cout<<"输入错误,车牌号必须是数字,请重新输入\n";goto loop;}
if((chazhao(s,cheid)!=0)||(find(Q,cheid)!=0)){cout<<"车辆已存在,请重新输入\n";goto loop;}
if(length(s)<chewei){
 push(s,cheid);
 //------------------------计时,补上
 int h=0;
 for(h=0;h<=(chewei-1);h++){if(caitime[h].full==0)break;}
 caitime[h].idche=cheid;
 caitime[h].jinruahijian=time(NULL);
 caitime[h].full=1;


//----------------以上为增加的计费模块
 int nn;nn=chazhao(s,cheid);
 if(nn)cout<<"请把车停在停车场第"<<nn<<"车位,现在开始计费,谢谢合作!";
 else cout<<"系统错误";
}
else {
 cout<<"停车场满,";
 enqueue(Q,cheid);
 int wiiz;
 wiiz=find(Q,cheid);
 if(wiiz<=0)cout<<"系统错误";
 
 cout<<"请停入便道"<<wiiz<<"车位,谢谢合作~!\n";
}
}

void choose2(sqstack &s,linkqueue &Q,long &e,long &ee){
 char qwe[6];time_t likaishijain;int sb;
 long qaz;
    loop1: cout<<"请输入要离开的车牌号码: ";
 cin>>qwe;
 qaz=convert(qwe);
 if(qaz==-1){cout<<"输入错误,车牌号必须是数字,请重新输入\n";goto loop1;}
 
 int poi;poi=chazhao(s,qaz);
 if(poi==0){
  poi=find(Q,qaz);
  if(poi==0){cout<<"你的车未在本停车场";return;}
  else {cout<<"你的车停在本停车场便道里,此刻无法离开";return;}
 }
 else {
  cout<<"你的车在停车场第"<<poi<<"停车位里";
  if(poi==length(s)){cout<<",可以直接开走\n";
  
  ///////计时,补上
  likaishijain=time(NULL);
   for(sb=0;sb<=(chewei-1);sb++){if(caitime[sb].idche==qaz)break;}
   cout<<"你的停车时间为(便道里不计时)"<<difftime(likaishijain,caitime[sb].jinruahijian)<<"秒";
   cout<<",每秒收费1元,请交"<<difftime(likaishijain,caitime[sb].jinruahijian)<<"元";
   caitime[sb].full=0;
   cout<<endl<<"车辆已经离开\n\n";

  ////////
   
   zhijielikai(Q,s,e,ee);return;}
  else {
   cout<<",待后面的车移入临时车道后可开走\n";
   
   ///////计时,补上
  likaishijain=time(NULL);
   for(sb=0;sb<=(chewei-1);sb++){if(caitime[sb].idche==qaz)break;}
   cout<<"你的停车时间为(便道里不计时)"<<difftime(likaishijain,caitime[sb].jinruahijian)<<"秒";
   cout<<",每秒收费1元,请交"<<difftime(likaishijain,caitime[sb].jinruahijian)<<"元";
   caitime[sb].full=0;
   cout<<endl<<"车辆已经离开\n\n";

  ////////

   buzhijielikai(qaz,Q,s,e,ee);return;
   
  }
 }
}


void choose3(sqstack &s,linkqueue &Q){
 cout<<"\n----------------------欢迎光临本停车场----------------------\n";
 if(length(s)<chewei)cout<<"本停车场现在还有"<<chewei-length(s)<<"个车位";
 else cout<<"本停车场车位已满,您可以把车停在便道";
 cout<<"\n";
 if(length(s)!=0){cout<<"停车场停车位共"<<length(s)<<"辆车\n";
 cout<<"停车位里的车辆:\n";
 xianshi(s);}
 else cout<<"停车位是空的\n";
 
 if(changdu(Q)!=0){
  cout<<"便道里共"<<changdu(Q)<<"辆车\n";
  cout<<"便道里的车辆:\n";
  xianshi2(Q);}
 else cout<<"便道里没有车\n";
 
 return;
}

void main(){
 long e;long ee;int quit=1;//e ee位出栈时要用到的返回值
 sqstack  s;linkqueue Q;char back[1];

 initstack(s);
 initqueue(Q);
 while(quit){
 menu();
 char choosea[1];
 cin>>choosea;
 switch(choosea[0]){
 case '1':choose1(s,Q);break;
 case '2':choose2(s,Q,e,ee);cout<<"\n"<<"输入任何数返回\n";cin>>back;break;
 case '3':choose3(s,Q);cout<<"\n"<<"输入任何数返回\n";cin>>back;break;
 case '4':cout<<"谢谢使用,再见";quit=0;break;
 default:cout<<"选择错误";cout<<"\n"<<"输入任何数返回\n";cin>>back;break;
 }

 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -