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

📄 parking.cpp

📁 停车场管理算法,数据结构的课程设计 主要是演示管理过程
💻 CPP
字号:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h" 


int PARKMENT_SIZE;
float ave1,ave;
#define  STACKINCREMENT   1


typedef struct{
  int num;
  float time;
}SQ;       

typedef struct{
  SQ *base;
  SQ *top;
  int stacksize;
}SqStack;


typedef struct QNode{
  SQ data;
  struct QNode *next;
}QNode,*QueuePtr;

typedef struct{
  QueuePtr front;
  QueuePtr rear;
}LinkQueue;


int InitStack(SqStack &S){
  S.base=(SQ *)malloc(PARKMENT_SIZE*sizeof(SQ));
  if(!S.base)  exit(0);
  S.top=S.base;
  S.stacksize=PARKMENT_SIZE;
  return  1;
}

void GetTop(SqStack S,SQ &e){
  if(S.top==S.base) return ;
  e=*(S.top-1);
}

void Push(SqStack &S,SQ e){
  *S.top++=e;
}

void Pop(SqStack &S,SQ &e){
  if(S.top==S.base)return ;
  e=*--S.top;
}

int EmptyStack(SqStack S){
  if(S.top==S.base) return 1;
   else return 0;
}


void InitQueue(LinkQueue &Q){
  Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
  if(!Q.front) exit(0);
  Q.front->next=NULL;
}

void GetHead(LinkQueue Q,SQ &e){
  if(Q.front==Q.rear) return;
  e=Q.front->next->data;
}


void EnQueue(LinkQueue &Q,SQ e){
  QueuePtr p;
  p=(QueuePtr)malloc(sizeof(QNode));
  if(!p) exit(0);
  p->data=e; p->next=NULL;
  Q.rear->next=p;
  Q.rear=p;
}

int  EmptyQueue(LinkQueue Q){
  if(Q.front==Q.rear)return 1;
  return 0;
}


void DeQueue(LinkQueue &Q,SQ &e){
  QueuePtr p;
  if(Q.front==Q.rear) return ;
  p=Q.front->next;
  e=p->data;
  Q.front->next=p->next;
  if(Q.rear==p) Q.rear=Q.front;
  free(p);
}

SqStack s1,s2;
LinkQueue q,q2;
SQ ss,qq;
int in=1,out=1;




void a(SQ &s){
  printf("\n请输入到达车辆的车牌号码:  ");
  scanf("%d",&s.num);
  printf("\n请输入车辆到达的时间:  ");
  scanf("%f",&s.time);
} 


void arr()
{
  if(in<=s1.stacksize)
   { 
     a(ss);
     Push(s1,ss);
     printf("\n车牌为 %d 的车辆在停车场内所在的位置: %d 号位\n",ss.num,in);
     in++;
   }
    else
     {
       printf("\n\n停车场中的位置已满,车辆只能停在便道上!!!!!!!!。\n");
       a(ss);
       EnQueue(q,ss);
       printf("\n车牌为 %d 的车辆在便道上的位置: %d 号位\n",ss.num,out);
       ++out;
     } 
}


void left()
{
  SQ t,tt;
  int e,i=1,j=1;
  float tm1,f,money,tm,money1;
  printf("\n请输入离开车辆的车牌号码:  ");
  scanf("%d",&e);
  printf("\n请输入车辆的离开时间:  ");
  scanf("%f",&f);
  t.num=e; t.time=f;
  GetTop(s1,tt);
  while(t.num!=tt.num && !EmptyStack(s1) )
    {
      Pop(s1,tt);
      Push(s2,tt);
      GetTop(s1,tt);
    }
  if( t.num==tt.num )
    { 

      tm=t.time-tt.time;
      money=ave*tm;
      printf("\n该车辆在车场内停留了: %f 小时 .",tm);
      printf("\n\n该车辆应付的款为(%f元/小时): %f .再见!",ave,money);
      Pop(s1,ss);
      --in;
    }
  else {j=0;}
  while(!EmptyStack(s2))
    {
      Pop(s2,ss);
      Push(s1,ss);
    } 
  if(j==1 && !EmptyStack(s1))
    {
      if(!EmptyQueue(q))
        {
          DeQueue(q,ss);
          out--;
          tm1=t.time-ss.time;
          money1=ave1*tm1;
          ss.time=t.time;
          Push(s1,ss);
          ++in;
          printf("\n\n 由于停车场内走了一辆车,所以车牌为 %d 的车辆由便道进入停车场的时间为:%f。\n",ss.num,ss.time);
          printf("\n %d号车已在便道等候了%f小时,所以应交钱%f元。谢谢。\n",ss.num,tm1,money1);
        }
    }
  if(j==0)
    {
      GetHead(q,ss);
      while(!EmptyQueue(q) && ss.num!=t.num)
        {
          DeQueue(q,ss);
          EnQueue(q2,ss);
	  GetHead(q,ss);
	}
      if(ss.num==t.num)
       {

         float tmb;
         tmb=t.time-ss.time;
         money=ave1*tmb;
         DeQueue(q,ss);
         printf("\n该车辆由便道上开走,该汽车应交停车费(%f元/小时)为:%f \n元。再见! ",ave1,money);
       }
      else { printf("\n出错,请核对车牌号码。\n"); }
      while(!EmptyQueue(q2))
        {
          DeQueue(q2,ss);
          EnQueue(q,ss);
        }
    }
}

list(SqStack s1)
{
  printf("\n          车牌         进入时间");
  while(!EmptyStack(s1))
    {
      *s1.top--;
      printf("\n         %d           %f",s1.top->num,s1.top->time);
    }
  return 0;
}

void main()
{
  int eof=1;
  char ch;
  printf("              &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
  printf("\n              欢迎来到2001(6)宗宗设计的停车场管理系统");
  printf("\n              &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
  printf("\n请输入停车场所能停放车辆数:");
  scanf("%d",&PARKMENT_SIZE);
  printf("\n请输入停车场每小时停车费用(元):ave=");
  scanf("%f",&ave);
  printf("\请输入便道每小时停车费用(元):  ave1=");
  scanf("%f",&ave1);
  InitStack(s1);InitStack(s2);InitQueue(q);InitQueue(q2);
  while(eof==1)
    {
      printf("\n\n                    ********** 停车场管理系统 *********");
      printf("\n                         输入字母 A or a表示车辆到达;");
      printf("\n                         输入字母 D or d表示车辆离开;");
      printf("\n                         输入字母 E or e表示退出系统;");
      printf("\n                         输入字母 L or l表示列出当前停车场内的车辆。");
      printf("\n\n 请输入你所需要的上述字母(然后按回车键):");
      ch=getchar();
      switch(ch)
        {
          case 'A':
          case 'a': arr(); break;
          case 'D':
          case 'd': left(); break;
          case 'E':
          case 'e': eof=0; break;
          case 'L':
          case 'l': list(s1);break;
          default: printf("\n\n           ******Pay attention!Don't input the wrong word!*******");
        }
   }
}

⌨️ 快捷键说明

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