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

📄 carstop.txt

📁 用C语言编写的一个可以简单实现对停车场的管理的小程序!
💻 TXT
字号:
#include   <stdio.h>    /* 输入输出函数*/
#include   <stdlib.h>   /*输入输出函数*/
#include   <malloc.h>   /*动态分配函数*/  
#include   <conio.h>    /*基本输入输出函数*/
#define    MAX 2           /*车站容量*/
#define    price 0.2       /*计费标准*/
#define    OVERFLOW -2
#define    ERROR  0
#define    OK  1
/***************时间结点******************/
typedef struct  time {
	int hour;
	int min;
}time;
/***************车辆结点******************/
typedef struct cardata{
	int hao;
    time arrive;
}cardata;
/*****************模拟车站********************/
typedef struct sqstackcar{
	cardata *base;
	cardata *top;
    int place;
	int stacksize;	
}sqstackcar;
/*****************便道结点********************/
typedef struct Qnode{
	cardata data;
	struct Qnode *next;	
}Qnode,*Queueptr;
/********************模拟便道*****************/
typedef struct LinkQueueCar{
	Qnode *front;
	Qnode *rear;
}LinkQueueCar;
/*****************初始化栈******************/
    int Initsqstackcar(sqstackcar &s)
{
	s.base=(cardata *)malloc(MAX*sizeof(cardata));
	if(!s.base)  return(OVERFLOW);
	     s.top=s.base;
        s.place=0;
        s.stacksize=MAX;
	     return OK;
}
/****************入栈函数*******************/
   int push(sqstackcar &s,cardata *e)
  {
  if(s.top-s.base>=s.stacksize)
   return ERROR;
   s.top->hao=e->hao;
   s.top->arrive.hour=e->arrive.hour;
   s.top->arrive.min=e->arrive.min;
   ++s.top;
   s.place=s.place+1;
   return OK;
  }
/*****************删除栈顶函数**************/  
      pop (sqstackcar &s,cardata *e)
{
	 if(s.top==s.base)
         return ERROR;
	     --s.top;
         e->hao=s.top->hao;
	 e->arrive.hour=s.top->arrive.hour;
	 e->arrive.min=s.top->arrive.min;
	 s.place--;
	 return OK;
 }
/*****************建队函数********************/
int InitQueue(LinkQueueCar &Q)
{
	Q.front=Q.rear=(Qnode *)malloc(sizeof(Qnode));
	if(!Q.front)  exit(OVERFLOW);
	Q.front->next=NULL;
	return OK;
}
/*****************入队函数*********************/
int enQuene(LinkQueueCar &q,cardata *e)
{    Qnode *p;
	  p=(Qnode *)malloc(sizeof(Qnode));
	  if(!p)   exit(OVERFLOW);
        p->data.hao=e->hao;
    	 p->data.arrive.hour=e->arrive.hour;
	    p->data.arrive.min=e->arrive.min;
    	p->next=NULL;
       q.rear->next=p;
	    q.rear=p;
	    return OK;	
}
/******************出队函数**********************/
       DeQueue(LinkQueueCar &Q,cardata *e)
{
       Queueptr p;
	   if(Q.front==Q.rear)
	   return ERROR;
		p=Q.front->next;
       e->hao=p->data.hao;
       e->arrive.hour=p->data.arrive.hour;
	   e->arrive.min=p->data.arrive.min;
		Q.front->next=p->next;
	   if(Q.rear==p)
          Q.rear=Q.front;
          free(p);  
          return OK;	
}
/*************车辆到达***********************/
int arrive(sqstackcar &s,LinkQueueCar &Q)
 { 
 	    cardata *car;
 	    car=(cardata *)malloc(sizeof(cardata));
         printf(" \n\t\t 请输入车牌号:");
	     scanf("%d",&(car->hao));
	     printf(" \n\t\t  请输入你的到达时间/**:**/:");
	     canf("%d:%d",&(car->arrive.hour),&(car->arrive.min));
       	if(push(s,car))
        printf("\n\t\t 该车的停放位置是:%d",s.place);
	     else
        {
	if(enQuene(Q,car))
        {
	printf("\n\t\t车站已满,请在便道中等待!\n");}
         else
        {
	printf("\n\t\t对不起暂时不能进入便道,请稍后再试! \n ");
	getch();}
			          }
	          return OK;	  
 }
/********************车辆离开**********************/ 
 void left(sqstackcar &s,LinkQueueCar &Q)
 {	 int a,b,c;
     double money;
     sqstackcar s1;
     Initsqstackcar(s1);
     cardata *e;
     e=s.top-1;
	  printf("\n\t\t请输入离开的车牌号:");
	 scanf("%d",&a);
	while(e->hao!=a&&e!=s.base-1)
	{   pop(s,e);
		push(s1,e);		
	} 
	    printf("\n\t\t请输入离站时间/**:**/:");
    	 scanf("%d:%d",&b,&c);
        printf("\n\t\t 请确认你的时间记录\n\t\t");
	        printf("\n\t\t该车进站时间:
	%d:%d\n",e->arrive.hour,e->arrive.min);
        printf("\n\t\t该车出站时间:%d:%d\n",b,c);
	     money=price*((b-e->arrive.hour)*60+(c-e->arrive.min));
		 printf("\n\t\t所以您需支付:%.2f",money);
		 pop(s1,e);
		 while(s1.top!=s1.base)
		{
			pop(s1,e);
			push(s,e);
		}
	if((s.top-s.base<=MAX)&&(Q.front!=Q.rear))
		{
			DeQueue(Q,e);
printf("\n\t\t%d号车即将进入车站,请输入到站时间/**:**/:",e->hao);
	scanf("%d:%d",&(e->arrive.hour),&(e->arrive.min));
            push(s,e);
		}
 }
/*****************查找函数**********************/
void print(sqstackcar &s,int num)  
{   
	cardata e;
	int n,i;
	n=s.place; 
	i=1;
	for(;i<=n;i++)
	{
	  e=*(s.top-i); 
	  if(e.hao==num)
 	  {
 	  printf("\n\t\t你所查询的车是%d\n",num);
	      printf("\n\t\t你所查询的车的位置%d:\n",n-i+1);
	printf("\n\t\t其到达时间为/**:**/: 
	%d:%d",e.arrive.hour,e.arrive.min);
        break;
 	  }
 	  else
 	  {
	  printf("\n\t\t 对不起,暂时没有该车的记录,请你稍后再试! \n");
  	   } 
	}
}
/*************整体查找*********************/
 void quanbu(sqstackcar &s,LinkQueueCar &Q)
 { 
 	Queueptr p;
	cardata *pcar=s.top;
 	int n; n=s.place;
 	if(s.top==s.base)
         printf("\n\t\t站内没有车!\n");
 	 else{ printf("\n\t\t  站基本情况如下:\n");
	printf("\n\t\t牌号   位置  到达时间/**:**/\n");	
	for(;n>0;)
	{
	pcar--;
	printf("\n\t\t%d%d%d:%d\n",
	pcar->hao,n,pcar->arrive.hour,pcar->arrive.min);
	n=n-1;
	 }
	printf("\n");
 	    }
 		 if(Q.front==Q.rear)
            printf("\n\t\t便道没有车!\n");
 		else
	{
        for(p=Q.front->next;p!=NULL;p=p->next)
        {
	printf("\n\t\t 便道基本情况如下牌号: \n");
 	    printf("%d\n",p->data.hao);
		}
 	    }
       }
/****************主菜单********************/
 void minemu()
{
	int ch;  int num;
	sqstackcar s;
    LinkQueueCar Q;
	Initsqstackcar(s);
	InitQueue(Q);	
	while(1)
	{
	printf("\n\t\t\t欢迎使用车站管理系统\n ");
	printf("\n\t1--车辆到达 2--车辆离开 3--车场概况 4--全部  5--退出系统\n");	
		 	printf(" \n\t\t 请输入你的选择:");
			scanf("%d",&ch);
				{
		switch(ch)
	   {
		case 1:        arrive(s,Q);		             
		       printf("\n\t\请按任意键返回.......\n");
		               getch();			                 
		               break;
		case 2:    left(s,Q); 
		     printf("\n\n\t\t请按任意键返回.......\n");
		               getch();		                     
		               break;
	   case 3: printf("\n\t\t 请输入你查询的车的牌号:");
		               scanf("%d",&num);
			           print(s,num); 
		      printf("\n\t\t请按任意键返回.......\n");
		               getch();		              
		               break;
		               	
		case 4:   quanbu(s,Q); 
		      printf("\n\t\t 请按任意键返回.......\n");
		               getch();		             
		               break;              	
		case 5:	       exit(0); break;	
		
	      
                
		}
	}
	}
}
/***************主函数********************/
void  main()
{ 
minemu();
	}

⌨️ 快捷键说明

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