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

📄 停车场管理程序.c

📁 停车场管理程序。好东西当然要大家一起分享。
💻 C
字号:
#define   STACK_INIT_SIZE  100
#include  "iostream.h"
#include  "stdlib.h"
#define   OK  1
#define   ERROR  0
#define    OVERFLOW  -2

struct car{
    int  carno;
    float intime;
float outtime;
};//停车场内的汽车

struct stack{
    car *base;
    car  *top;
    int stacksize;
};//车库

struct QNode{
car data;
QNode* next;
};//通道上的汽车

struct Queue{
      QNode *front;
      QNode *rear;
};//通道

void Input(car * car2 ,char i,int o){ //输入函数
               cout << "汽车状态:"<<i<<endl;
      cout << "汽车牌号:"<<car2->carno<<endl;
      cout << "汽车停留的时间(小时):"<< car2->outtime-car2->intime<<endl;
      cout << "汽车收费:"<<(car2->outtime-car2->intime)*o<<"元"<<endl<<endl;
} 

int  InitStack(stack &s){   
s.base=(car *)malloc (STACK_INIT_SIZE *sizeof(car));
if(!s.base) exit(-1);
s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return 1;
}//构造空栈

int Push(stack *s,car &car1)
{
   if(s->top-s->base >= s->stacksize) //栈满
   cout<<"车库已满,外面等待"<<endl;

   *s->top++=car1;
   return 1;
}//进车库

int Pop(stack *s,car &car1){
        if(s->top==s->base)  return ERROR;
        car1=*(--s->top);
  return OK;
}//出栈顶 

int OutPopIn(stack *s1, stack *s2,car *car2,car *car1,int i,int n)
{ 
  int m=n;
for(;i<n;n--)
{
   Pop(s1,*car1);
   Push(s2,*car1);//进入临时停车区
}
   Pop(s1,*car2);

for(;i<m;m--)
{
   Pop(s2,*car1);
   Push(s1,*car1);//从临时停车区返回
}
   return OK;
}//出栈的任意元素

int InitQueue(Queue &q)
{
   q.front=q.rear=(QNode *)malloc(sizeof(QNode));
   if(!q.front) exit(-1);
   q.front->next=NULL;
   return 1;
}//构造空队列

int EnQueue(Queue *q,QNode &car2)
{
   QNode  *p;
   p=(QNode *)malloc(sizeof(QNode));
   if(!p) exit(OVERFLOW);
   *p=car2;
   p->next=NULL;
   q->rear->next=p;
   q->rear=p;
   return OK;
}//插入队列元素

int DeQueue(Queue *q,QNode &car1)
{
    QNode *p;
if(q->front==q->rear) cout<<"外无车"<<endl;
    else {
p=q->front->next;
car1=*p;
    q->front->next=p->next;
if(q->rear==p) q->rear=q->front;
}
return OK;
}//出队列

void main()
{
    stack s1,s2;//s1表示车库,s2表示临时车库
Queue q3;//表示停车便道
car car1,car2;
QNode car3,car4;
QNode  *Q1;
  int l,o,z;
char i;
int n=0,m=1,x=0,y=0;
    InitStack(s1);//车库
    InitStack(s2);//等车区
    InitQueue(q3);//通道
cout<<"********************************车库管理系统*****************************"<<endl<<endl;
cout<<"请输入车库的容量:";
cin>>s1.stacksize;
cout<<"请输入汽车收费单价:";
cin>>o;
do{
cout<<"请输入汽车状态('A'表示到达,'D'表示离去,'E'表示输入结束):";
cin>>i;
if(i=='A')//进车
{
      Q1=&car3;
        cout <<"请输入汽车牌号 :";
     cin>>car3.data.carno;                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        EnQueue(&q3,car3); 
      if(s1.top-s1.base<s1.stacksize) 
   { 
   DeQueue(&q3,car4);
   cout<<"请输入该车进入车库的时间(小时):";
            cin >> car4.data.intime;
            Push(&s1,car4.data);
            n=s1.top-s1.base;//车库现有车辆数
   cout<<"车库停车位为:"<<n<<endl;
   }
       else if(s1.top-s1.base==s1.stacksize) 
    {   
       z=x-y-s1.stacksize;//z为便道上汽车数
       m=z;
            cout<<"车库已满,外面等待,便道停车位为:"<<++m<<endl;
    }
        x++ ;                            // 计数器   统计汽车总数
}
   else  if(i=='D')//出车
   {
     loop: 
     if(s1.top-s1.base==0)      {cout<<"车库内无车!"<<endl;}
  else{ 
          cout<<"要出车库的车的停车位:"<<endl;  
          cin>>l;
       if(l>s1.stacksize) {cout<<"输入错误!注意车库容量!"<<endl;goto loop;}
          if(l>s1.top-s1.base){cout<<"该车位无车重新输入!"<<endl;goto loop;}
          if(s1.top-s1.base>l)
    {  
     OutPopIn(&s1,&s2,&car2,&car1,l,s1.top-s1.base);     //车位不在栈顶,输出car2
     cout<<"请输入该车离开车库的时间(小时):";
     cin>>car2.outtime;
           Input(&car2,i,o);
    }
       else
    {
         Pop(&s1,car2);//车位为栈顶
               cout<<"请输入汽车离开车库的时间(小时):";
         cin>>car2.outtime;
         Input(&car2,i,o);
    }
      y++;    //计数器  统计出库车数
      if(q3.front!=q3.rear&&x-y!=0&&s1.top-s1.base<s1.stacksize)//注意如何判断队列元素个数
   {   
        DeQueue(&q3,car4);//便道上的车辆进车库
     cout<<"车库有空车位,便道上1号车位的车进库"<<endl;
     cout<<"该车车号为:"<<car4.data.carno<<endl;
     cout<<"请输入该车进入车库的时间(小时):";
     cin>>car4.data.intime;
        Push(&s1,car4.data);
   }
  }
   
   }
          else  if(i=='E') break;
            else  cout<<"重新输入汽车状态:"<<endl;
}while(1);
}

⌨️ 快捷键说明

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