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

📄 停车场的管理.txt

📁 这个是我从网上找的,运行过了.
💻 TXT
字号:
 


#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "time.h" 
#define null 0
#define Maxsize 4

void clear(char a[])

{
 int i,counta;
 counta=strlen(a);
 for(i=0;i<counta;i++)
  a[i]='\0';
}

struct car   //定义车的结构体
{
 char message[10];
 char num[10];
 char intime[10];
 char outtime[10];
 int expense;
 int delay;
 int position;
};


typedef struct   //*****************************************栈*********************************
{
 struct car d[Maxsize];
 int top;
}SeqStack;

void init(SeqStack *s)  //初始化栈
{
 s->top=-1;
}

int isemptystack(SeqStack *s)      //判断栈是否为空
{
 if(s->top==-1)
  return 1;
 else
  return 0;
}

int isfullstack(SeqStack *s)    //判断栈是否为满
{
 if(s->top==Maxsize-1)
  return 1;
 else
  return 0;
}

void push(SeqStack *s,struct car x)   // 进栈
{
 if(!isfullstack(s)) 
 {
  s->top++;
  s->d[s->top]=x;
 }
}

struct car pop(SeqStack *s)   //,取栈顶元素,出栈
{
 car x;
 if(s->top!=-1)
 {
  x=s->d[s->top];
  s->top--;
  return x;
 }

}


car gettop(SeqStack *s)  //取栈顶元素
{
 car x;
 if(s->top!=-1) 
 {
  x=s->d[s->top];
  return x;
 }
 
}
 //*************************************************栈*************************************


//*****************************************队列链表**************************************

typedef struct slnode    //定义链队列的接点性质
{
 struct car data;
 struct slnode *next;
}slnodetype;

typedef struct    //定义链的性质
{
 slnodetype *head;
 slnodetype *rear;
}linkq;

void initq(linkq *q)   //初始化链队列
{
 q->head=(slnodetype*)malloc(sizeof(slnodetype));
 q->rear=q->head;
 q->head->next=null;
 q->rear->next=null;
}


void addq(linkq *q,struct car x)      //进队列*************some problem 
{
 slnodetype *p;
 p=(slnodetype*)malloc(sizeof(slnodetype));
 p->data=x;  
 p->next=null;  
 q->rear->next=p;
 q->rear=p;
} 


struct car delq(linkq *q)    //出链队列
{
 slnodetype *p;
 struct car x;
 if(q->head!=q->rear)
 {
  p=q->head->next;
  if(p->next==null)
  {
   x=p->data;
   q->rear=q->head;
   free(p);
  }
  else
  {
   q->head->next=p->next;
   x=p->data;
   free(p);
  }
  return x;
 }
 
}


int isemptyq(linkq *q)    //判断链队列是否为空
{
 if(q->rear==q->head)
  return 1;
 else
  return 0;

}

   //*******************************队列链表***********************

void print1(struct car x)   //进站前的信息
{

 printf("车牌\t进站时间\t进/出站\t停留时间\t费用\n");
 printf("%s\t\t",x.num);
 printf("Movein\t\t\t\n");

}


void print3(struct car *x)   //出站时的信息
{

 printf("车牌 进站时间  进/出站 出站时间 原来位置 停留时间(秒) 费用(美分)\n");
 printf("%s ",x->num);
 printf("%s\t",x->intime);
 printf("出   ");
 printf(" %s\t",x->outtime);
 printf("  %d\t ",x->position);
 printf("  %d\t",x->delay);
 printf("\t%d\n",x->expense);

}

void printstack(SeqStack *s)
{
 int i;

 if(isemptystack(s))
  printf("车站内没有车.");
 else
 {
  printf("\t车站内\n位置\t车牌\t进站时间 站内状况\n");
  for(i=0;i<=s->top;i++)
  {
   printf("%d\t",s->d[i].position);
   printf("%s\t",s->d[i].num);
   printf("%s\n",s->d[i].intime);
  }
  printf("\t\t\t共%d辆",s->top+1);
  if(s->top==Maxsize-1)
   printf("(已满)\n");
  else
   printf("(还能放%d辆)\n",Maxsize-1-s->top);
   printf("\n");
 }

}

 

void printq(linkq *q)
{
 
 if(!isemptyq(q))
 {
  slnodetype *p;
  p=q->head->next;
  printf("\t过道:\n车牌\t进道时间\n");
  printf("%s\t%s\n",p->data.num,p->data.intime);
  while(p->next!=null)
  {
   p=p->next;
   printf("%s\t%s\n",p->data.num,p->data.intime);
  }
 }
 else
  printf("\n过道上没有车在等待\n");
 
}

void review(SeqStack *s,linkq *q)    //查看车站和过道上的情况
{
 printf("**************************************\n");
 printstack(s);
 printq(q);
 printf("**************************************\n");
}

void gettime(char a[])    //获取时间
{ 
 int i;
   static char nowtime[30];
 time_t t; 
   time(&t); 
   strcpy(nowtime,ctime(&t));
   for(i=0;i<9;i++)
    nowtime[i]=nowtime[i+11];
   nowtime[i]='\0';
   strcpy(a,nowtime);
    
} 
void incar(SeqStack *s,linkq *q)          //车进站 ****************************
{
 
 struct car k;
 static char nowtime1[10];
 printf("请你输入车牌(2-5位):\n");
 gets(k.num); 
 gettime(nowtime1);
 
 
  strcpy(k.intime,nowtime1);

  if(!isfullstack(s)&&isemptyq(q))   //如果车站不满,而且过道上没有车则,直接进入车站
  {
   k.position=(s->top)+2;  
   push(s,k);
   printstack(s);  
  }

  else if(isfullstack(s)||!isemptyq(q))   //如果过道上还有车,则必须放在过道上
  {
   
   printf("************************警告*******************************\n车站已满,请先暂时放在过道.\n现在情况如下:\n");
   k.position=Maxsize;
   addq(q,k);//放在过道上

   printstack(s);  //输出车站的情况         
   printq(q);   //同时输出当时过道上的情况
   printf("***********************************************************\n");
  }
 
}


void outcar(SeqStack *s,linkq *q)    //车出站
{
 SeqStack p;   //申请临时放车的地方
 init(&p);
 char nowtime[10];
 int i,pos;
 long cost;
 int hour,min,sec;
 struct car x,b,y1,y2,z;
 
 if(isemptystack(s))
 { 
  printf("车站是空的,不能再出站了!\n");
  printf("\a");
 }

 else    
 {
  printf("现在车站的情况是:\n");
  printstack(s);
  printf("你要出站的车的序号:\n");
  scanf("%d",&pos);
  if(pos>0&&pos<=s->top+1)
  {
   for(i=s->top+1;i>pos;i--)
   {
    x=pop(s);
    x.position=x.position-1;
    push(&p,x);
   }
   b=pop(s);
   gettime(nowtime);
   strcpy(b.outtime,nowtime);
   hour=(b.outtime[0]-'0')*10+(b.outtime[1]-'0')-((b.intime[0]-'0')*10+(b.intime[1]-'0'));
   min=(b.outtime[3]-'0')*10+(b.outtime[4]-'0')-((b.intime[3]-'0')*10+(b.intime[4]-'0'));
   sec=(b.outtime[6]-'0')*10+(b.outtime[7]-'0')-((b.intime[6]-'0')*10+(b.intime[7]-'0'));
   b.delay=hour*3600+min*60+sec;
   cost=b.delay;
   b.expense=cost;
   print3(&b); //输出车出站时的情况---进入时间,出站时间,原来位置,花的费用等
   while(!isemptystack(&p))   //车出来后把刚才退出的车重新放回
   {
    z=pop(&p);
    push(s,z);
   }
   if(!isfullstack(s)&&!isemptyq(q))
   {
    y1=delq(q);
    strcpy(y1.intime,nowtime);
    push(s,y1);
   }
   while(!isfullstack(s)&&!isemptyq(q))  //只要过道上有车,就往车站里进,除非车站满了
   {
    y2=delq(q);
    push(s,y2);
   }
   
  }
  else
  { 
   printf("没有你要的车号!\n");
   printf("\a");
  }
 }
}     

void main()
{
 SeqStack park;
 linkq q;
 init(&park);
 initq(&q); 
 char mess[10];
 
 printf("\t\t\t车场管理系统\n\t\t\t\t------01软件学院  吴海松(2003.10.23)\n\n\n");
 printf("提示:车站内最多只能放Maxsize(由系统中定义)辆车,多余的暂时放在过道上.\n车站内收费标准:1美分/秒,过道上不收费.\n");
 printf("你想进行什么操作?\nin ---->车进站\nout ---->车出站\nlist ---->查看车站及过道中的情况\nhelp ---->获取帮助\nend ---->退出系统\n");
 printf("\n操作:");
 gets(mess);
 while(1)
 {
  if(strcmp(mess,"end")==0)
  {
   printf("\t\t\t欢迎下次再来,再见!\n");
   break;
  }
  else if(strcmp(mess,"help")==0)
  {
   printf("你想进行什么操作?\nin ---->车进站\nout ---->车出站\nlist ---->查看车站及过道中的情况\nhelp ---->获取帮助\nend ---->退出系统\n");
   printf("操作:");
   clear(mess);
   gets(mess);
  }
  else
  {
   
   if(strcmp(mess,"list")==0)
   { review(&park,&q);
    printf("操作:");
   }
   else if(strcmp(mess,"in")==0)
   { incar(&park,&q);
    printf("操作:");
   }
   else if(strcmp(mess,"out")==0)
   { outcar(&park,&q);
   }
   else
    printf("操作:");
   clear(mess);
   gets(mess);
  }
 }
 

}

 

⌨️ 快捷键说明

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