现在的位置: 首页 > 综合 > 正文

停车管理

2013年04月15日 ⁄ 综合 ⁄ 共 3433字 ⁄ 字号 评论关闭
 

#include "iostream.h"
#include "stdlib.h"
#include "conio.h"
#define stackinitsize 3
typedef struct stack1
{
int spos;
int snum;
int smin,ssec,shour;
}stack1;
typedef struct
{
stack1 *top;
stack1 *base;
int stacksize;
}stack;
typedef struct qnode
{
int qpos;
int qnum;
int qmin,qsec,qhour;
struct qnode *next;
}qnode,*queueptr;
typedef struct {
queueptr front;
queueptr rear;
}linkqueue;
int initstack(stack &s)
{
s.base=(stack1 *)malloc(stackinitsize*sizeof(stack1));
if(!s.base)
{
  cout<<"it's can't malloc!"<<endl;
  exit(1);
}
s.top=s.base;
s.stacksize=stackinitsize;
s.top->shour=s.top->smin=s.top->snum=s.top->spos=s.top->ssec=0;
return 1;
}
initqueue(linkqueue &q)
{
q.fr.rear=(queueptr)malloc(sizeof(qnode));
if(!q.front)
{
  cout<<"it's can't malloc!"<<endl;
  exit(1);
}
q.front->next=NULL;
return 1;
}
int gettop(stack s,int &pos,int &num,int &hour, int &min, int &sec)
{
int e;
stack1 *p;
if(s.top==s.base)
{
  cout<<"it's a null!"<<endl;
  return 0;
}
p=s.top-1;
pos=p->spos;
num=p->snum;
hour=p->shour;
min=p->smin;
sec=p->ssec;
e=p->spos;
return e;
  
}
int push(stack &s,int pos,int num,int hour, int min, int sec)
{
s.top->spos=pos;s.top->snum=num;
s.top->shour=hour;s.top->smin=min;
s.top->ssec=sec;
s.top++;
return 1;
}
int pop(stack &s,int &pos,int &num,int &hour, int &min, int &sec)
{
s.top--;
pos=s.top->spos;num=s.top->snum;hour=s.top->shour;min=s.top->smin;
sec=s.top->ssec;
return 1;
}
int pop1(stack &s,int pos,int num,int hour, int min, int sec)
{
char a,b;
int hour1,min1,sec1;
int hour2,min2,sec2;
float value;
cout<<"please input pos's time to out of the car:"<<endl;
cin>>hour1>>a>>min1>>b>>sec1;
s.top--;
hour2=hour1-hour;min2=min1-min;sec2=sec1-sec;
value=(float)hour2*2+min2/60*2+sec2/120*2;
cout<<"the fee is "<<value<<endl;
return 1;
}
int enqueue(linkqueue &q,int pos,int num,int hour, int min, int sec)
{
queueptr p;
p=(queueptr)malloc(sizeof(qnode));
if(!p)
{
  cout<<"can't malloc!"<<endl;
  exit(1);
}
p->qpos=pos;p->qnum=num;p->qhour=hour;
p->qmin=min;p->qsec=sec;
p->next=NULL;
q.rear->next=p;
q.rear=p;
return 1;
­
}
int dequeue(linkqueue &q,int &pos,int &num,int &hour, int &min, int &sec)
{
if(q.front==q.rear)
{
  return 0;
}
queueptr p;
p=q.front->next;
pos=p->qpos;num=p->qnum;hour=p->qhour;min=p->qmin;sec=p->qsec;
q.front->next=p->next;
if(q.rear==p)
  q.rear=q.front;
free(p);
return 1;
}
main()
{
char show='1';
char a,b;
int pos,num,sec,hour,min;
int pos1;
int i=0;
stack s1,s2;
linkqueue q;
initstack(s1);
initstack(s2);
initqueue(q);
while(show!='E')
{
  cout<<"please input the value to control the car:"<<endl;
  cout<<"'A':Arrival,'D':Departure,'E':End"<<endl;
  cin>>show;
  
switch(show)
{
  
case 'A' :
  cout<<"/nplease input the pos:"<<endl;
  cin>>pos;
  cout<<"/nit's car number:"<<endl;
  cin>>num;
  cout<<"please input it's arrival time:(10:20:30)"<<endl;
  cin>>hour>>a>>min>>b>>sec;
  
  enqueue(q,pos,num,hour,min,sec);
  if(s1.top-s1.base<s1.stacksize)
  {
   dequeue(q,pos,num,hour,min,sec);
   push(s1,pos,num,hour,min,sec);
  }
  break;
case 'D' :
  cout<<"/nplease input the pos:"<<endl;
  cin>>pos1;
  if(s1.top==s1.base)
   cout<<"the field is no car!"<<endl;
  else
  {
      if(pos1==gettop(s1,pos,num,hour,min,sec))
    pop1(s1,pos,num,hour,min,sec);
   else
   {
    do
    {
     pop(s1,pos,num,hour,min,sec);
     push(s2,pos,num,hour,min,sec);
     i++;
    }while(pos1!=gettop(s1,pos,num,hour,min,sec));
    pop1(s1,pos,num,hour,min,sec);
    while(i--)
    {
     pop(s2,pos,num,hour,min,sec);
     push(s1,pos,num,hour,min,sec);
    }
    if(q.front!=q.rear)
    {
        while(s1.top-s1.base<s1.stacksize)
     {
          dequeue(q,pos,num,hour,min,sec);
          push(s1,pos,num,hour,min,sec);
     }
    }
   }
  }
  break;
case 'E' :
  exit(1);
default:
  cout<<"your input is wrong!"<<endl;
}
}
return 1;
}
­
还不够健壮!

抱歉!评论已关闭.