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

📄 tingchechangguanlixitong.txt

📁 this procedure is simulated document management system disk space management, Disk Management, direc
💻 TXT
字号:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
#include"iostream.h"
#define stack_init_size 10
#define stackincrement 10
#define OK 1
#define NULL 0
#define ERROR 0
#define OVERFLOW 0
#define chewei 5 //停车场车位个数
typedef struct{
	char AorD;       //表示车到达或离去的信息  
	char num[10];    //表示车的车牌号码
	int time;        //表示车到达或离开的时间
}ElemType;
//栈
typedef struct{      //定义栈的结构体
	ElemType *base;  
	ElemType *top;   
	int stacksize;   //当前已分配的存储空间
}SqStack;
unsigned InitStack(SqStack &S)
 {//新建空栈
  S.base=(ElemType *)malloc(stack_init_size *sizeof(ElemType));
  if(!S.base)exit(OVERFLOW);  //存储分配失败
	S.top=S.base;
	S.stacksize=stack_init_size;
	return OK;
}//InitStack
unsigned push(SqStack &S,ElemType e){//在栈中插入元素。
	if((S.top-S.base)>=S.stacksize){//栈满 追加空间
		S.base=(ElemType *)realloc(S.base,(S.stacksize+stackincrement) * sizeof(ElemType));
		if(!S.base)exit(OVERFLOW);
		S.top=S.base+S.stacksize;
	}
	*S.top++ =e;
	return OK;
}
unsigned pop(SqStack &S,ElemType &e)
{//出栈
	if(S.top ==S.base)return ERROR;
	e= * --S.top;
	return OK;
}
int SeekStack(SqStack S,ElemType e,ElemType &m)
{//查找栈中是否和e有相同号码的这个元素,若有则返回OK,否则返回ERROR,并用m返回这个元素
	while(S.top!=S.base){
		m=*(--S.top);
		if(strcmp(m.num,e.num)==0)
			return 1;
	}
	return 0;
}//SeekStack
int length(SqStack S)
{ //栈
  return S.top - S.base;
} 
void Delete(SqStack &S,ElemType e)
{ //若栈不空,则删除S中元素为e的元素
 int len;
 int k;
 ElemType g,m,h;
 SqStack R;
 g=*--S.top;
 k=SeekStack( S, e,m);
 if(k!=0)
 { InitStack( R);
   while(strcmp(g.num,e.num))
    { S.top++;
      pop(S, h);
      push( R, h);
      
      g=*--S.top;
     }
    
    pop( S, h);
	
    cout<<h.num<<"车已顺利离开停车场";
    len=length( R);
    for(int i=1;i<=len;i++)
    { pop(R,h);
      push(S, h);
      
     }
  }
}
// 队列
typedef struct QNode{  
	ElemType cardata;
	struct QNode *next;
}QNode,*Queueptr;
typedef struct{      //定义队的结构体
	Queueptr front;  //队头指针
	Queueptr rear;   //队尾指针
}LinkQueue;

unsigned InitQueue(LinkQueue &Q){//构造一个空队列
	Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));
	if(!Q.front)exit(OVERFLOW);
	Q.front->next=NULL;
	return OK;
}//InitQueue
unsigned EnQueue(LinkQueue &Q,ElemType e)
{//插入元素e为Q的新的队尾元素
	Queueptr p;
	p=(Queueptr)malloc(sizeof(QNode));
        if(!p)exit(OVERFLOW);
        p->cardata=e;
        p->next=NULL;
        Q.rear->next=p;
        Q.rear=p;
        if(Q.front->next==NULL)
        Q.front->next=p;
        return OK;
}
unsigned DeQueue(LinkQueue &Q,ElemType &e)
{//若队列不空,则删除Q的对头元素,并用e返回其值
	Queueptr p;
	if(Q.front==Q.rear)
            return ERROR;
	    p=Q.front->next;
	    e=p->cardata;
	    Q.front->next=p->next;
	    if(Q.rear==p)
            Q.rear=Q.front;
	      free(p);
	    return OK;
}
int Extent(LinkQueue Q)
{ //取得队列的长度
  if(Q.front->next==NULL)
  return 0;
  else if(Q.front->next==Q.rear)
  return 1;
       else {   
             Queueptr h;
             h=Q.front->next;
             for(int n=1;h->next;n++)
             {h=h->next;}
              return n;
              }
}
unsigned SeekQueue(LinkQueue &Q,ElemType e,ElemType &n)
{//查找队中是否有和e相同号码的这个元素,若有则返回OK,否则返回ERROR,并用n返回这个元素
	Queueptr p;
	p=Q.front;
	while(p->next){
		if(strcmp(p->next->cardata.num,e.num)==0)
		{
			n=p->next->cardata;
			return OK;
		}
		else
			p=p->next;
	}
	return ERROR;
}
void StackTrverse(SqStack S)
{ //输出栈中元素
  ElemType m;
  if(S.top==S.base)
  cout<<"停车场内没有车辆\n";
  else{
       while(S.top!=S.base)
        {m=* (--S.top);
         cout<<m.num<<"     ";
		 cout<<m.time<<endl;
         }
  }
}
void QueueTrverse(LinkQueue Q)
{//输出队列中的元素
 Queueptr p;
 p=Q.front;
 if(Q.front->next==NULL){return;}
 else
 {while (p->next)
   { cout<<p->next->cardata.num<<"     ";
     cout<<p->next->cardata.time<<endl;
     p=p->next;
    }
 }
}
long convert(char a[10])
{ //输入把字符转化成数字
  long result=0;
  for (int i=0;i<10;i++)
   { if(a[i]=='\0') break;
     if(a[i]<'0'||a[i]>'9')
       {return -1;}
     result=result*10+a[i]-48;
    }
  return result;
}
void main()
{//主函数
    int i=1,m=1,n=1,totaltime=0;
    ElemType e,f,g,h,r;
	long k;
    SqStack s;
    LinkQueue Q; 
    InitStack(s);
    InitQueue(Q);
    cout<<"*******************停车场 管理系统******************\n";
	cout<<"*****车停在停车场内0.2元每分钟,停在便道上免费";
	cout<<"*****\n\n";

    cout<<"(A:表示ARRIVAL  D:表示DEPARTURE  E:表示END)\n";
   
     for(i=1;;i++)
	 {cout<<"\n请输入车辆信息:A/D/E  车牌号码   到达/离开时间\n\n";

      loop: cin>>e.AorD>>e.num>>e.time;
      k=convert( e.num);
	  
      if(k==-1)
        {cout<<"输入错误,车牌号必须是数字,请重新输入\n";

           goto loop;
         }
       if(e.AorD=='A')
	  {
	   if(SeekStack(s,e,f))//查找栈中是否有和e相同号码的这个元素(车)
	    {cout<<"你输入的车牌号码有误(与停车场内的车有相同的),请重新输入:\n";
           goto loop;
	     }
	    else{
		  if(length(s)<5)
	        {
		   push(s,e);
		     cout<<"请将车停在停车场的第"<<length(s)<<"个位置\n\n";
                     cout<<"\n现在停车场内的车有:\n";
		     cout<<"车牌号码    停入停车场的时间\n\n";
		     StackTrverse(s);
                     cout<<"\n现在便道上没有车\n";
		    }      
		   else{
		        if(SeekQueue(Q,e,r))
                {//查找队中是否有和e相同号码的这个元素(车)
			    cout<<"你输入的车牌号码有误(与便道上的车有相同的),请重新输入:\n";
			    
			      goto loop; 
			    }
		           else
				   { EnQueue(Q,e);
			       cout<<"停车场已满,请将车停在便道的第"<<Extent(Q)+1<<"个位置\n";
			       cout<<"\n现在停车场内的车有:\n";
			       cout<<"车牌号码    停入停车场的时间\n\n";
			       StackTrverse(s);
			       cout<<"\n现在便道上的车有:\n";
			       cout<<"车牌号码    停入便道上的时间\n\n";
			        QueueTrverse(Q);
			       }
		        }
			}
	   
	   }
	    if(e.AorD=='D')
		{ if(SeekStack(s,e,f))
            {//查找栈中是否有和e相同号码的这个元素(车)
			Delete(s,f);
			totaltime=e.time-f.time;
		        cout<<"你的车在停车场内停留了"<<totaltime<<"分钟\n";
				cout<<"你应付停车费"<<totaltime*0.2<<"元\n\n";

				if(Extent(Q))
                 {
				   DeQueue(Q,g);
				   g.time=e.time;
				    push(s,g);
					cout<<g.num<<"车已停入停车场,计费开始.\n\n";
				    cout<<"\n现在停车场内的车有:\n";
			     	    cout<<"车牌号码    停入停车场的时间                                       \n\n";
			            StackTrverse(s);
                                    cout<<"\n现在便道上的车有:\n";
			            cout<<"车牌号码    停入便道上的时间                                      \n\n";
			            QueueTrverse(Q);
				   }
				else;
			    }
			 else
			    {
				  if(SeekQueue(Q,e,h))
				  {//查找队中是否有和e相同号码的这个元素(车)
					  if(strcmp(Q.front->next->cardata.num,h.num))
						  cout<<"请稍等,您的车在便道上无法直接开出来,请联系停车场管理员。\n\n";
					  else
					  {totaltime=e.time-h.time;
						   DeQueue(Q,e);
				   cout<<"你的车在便道上停留了"<<totaltime<<"分钟\n";
				   cout<<"你不用缴纳停车费\n\n";
					  }
				   cout<<"\n现在停车场内的车有:\n";
				   cout<<"车牌号码    停入停车场的时间\n\n";
			           StackTrverse(s);
                                   cout<<"\n现在便道上的车有:\n";
			           cout<<"车牌号码    停入便道上的时间\n\n";
			           QueueTrverse(Q);
				  }
				else
				  {cout<<"你的输入有误(停车场和便道上都没有此车),请重新输入:\n";
                                   goto loop;
			          }
			 }
		}
	    if(e.AorD=='E')
		
		{ cout<<"输入结束,请按任意键结束.\n";
	         break;   

		}
	}
	  
}	
    
 

⌨️ 快捷键说明

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