停车场管理系统(三)

时间:2021-10-07 03:18:55
停车场车辆管理主要设计源码:
void StopInput(SqStack *S)            //停车场车辆登记
{
	int e;
	int i;
	int j = 0;
	int isReach = FALSE;              //车到达与否
    int isLeave = FALSE;              //车离开与否	
	int leaveTime = 0;                //即尚未离开
	int cost = 0;                     //停车费用
	int isEmpty = TRUE;               //车位是否为空
	int *p = NULL;
    printf("\n--车辆到达登记--\n");		
	printf("\n请输入车牌号:(车牌号重复时自动退出)\n");
	scanf("%d",&e);
    isReach = TRUE;
	if(Search(S,0) && !Search(S,e))                   //车牌号为0时,停车位空出,优先将进入停车场的车辆放置于此
	{
		if((*S).top != (*S).base) //栈不为空时
		{
	        for(p= (*S).base;p <= (*S).top-1;p++)
			{
		        j++;
				//printf("\n--%d--\n",j);
		        if(j == 4)
				{
					time(&rawtime);
					*p = rawtime;
				    timeinfo = localtime (&rawtime);
			        printf("到达时间: %s",asctime(timeinfo));
				}
		        else if(j == 6)
				{	
				    if(*p != NULL)
					{
					    rawtime = *p;
				        timeinfo = localtime (&rawtime);
			            printf("离开时间: %s",asctime(timeinfo));
					}
				    else
					    printf("离开时间: 空\n");
				}
			    else if(j == 7)
				{
					*p = 0;
				    printf("停车费用:%d元\n",*p);
				}
			    else if(j == 8)
				{
					*p = FALSE;
				    if(*p == FALSE)
				        printf("停车位是否为空: 否\n");
				    else
                        printf("停车位是否为空: 是\n");
				    j = 0;
					break;
				}
		        else if(j == 1 || j == 2 || j == 3 || j == 5)
				{
				    if(j == 1)
					{
						while(*p != 0 && p <= (*S).top-1)
                        {
							for(i = 0;i < 8;i++)
							    p++;
							j = 1;
						}
						if(*p == 0)
						{
							*p = e;
							printf("\n车牌号: %d\n",*p);
						}
					}
				    if(j == 2)printf("停车位: %d\n",*p);
			        if(j == 3)
					{
						*p = TRUE;
					    if(*p == FALSE)
						    printf("到达: 否\n");
					    else
						    printf("到达: 是\n");
					}
				    if(j == 5)
					{
						*p = FALSE;
					    if(*p == FALSE)
					     	printf("离开: 否\n");
					    else
						    printf("离开: 是\n");
					}

				}
			}
		}
	}
	else{
	while(e != 0 && !Search(S,e))
	{   
		sLocation++;
		time(&rawtime);               //获取当前时间<秒>(case 1 即为到达时间)
		isEmpty = FALSE;
		Push(S,e);
		Push(S,sLocation);
		Push(S,isReach);
		Push(S,rawtime);
		Push(S,isLeave);		   
		Push(S,leaveTime);
		Push(S,cost);
		Push(S,isEmpty);
		printf("\n--车牌号%d登记成功--\n",e);														           
		printf("\n请输入车牌号:\n");
	    scanf("%d",&e);
	}
	printf("\n--车牌号已存在,无法登记--\n");
    StackTraverse(S);	//遍历输出
	}
}
void StopToLoad(dat *Q,int tempCarNumber)       //车辆从停车场转入便道
{
	int e;
	int i;
	int j = 0;
	int isReach = FALSE;              //车到达与否
    int isLeave = FALSE;              //车离开与否	
	int leaveTime = 0;                //即尚未离开
	int cost = 0;                     //停车费用
	int isEmpty = TRUE;               //车位是否为空
    isReach = TRUE;
	e = tempCarNumber;
	if(QSearch(Q,0) && !QSearch(Q,e))                   //车牌号为0时,停车位空出,优先将进入停车场的车辆放置于此
	{
		if((*Q).front != (*Q).rear)    //队列不为空时
		{
	         DAT *p = (*Q).front -> next;
	         while(p != NULL)
			 {	 
				j++;	
		        if(j == 4)
				{
					time(&rawtime);
					p -> data = rawtime;
				    timeinfo = localtime (&rawtime);
			        printf("到达时间: %s",asctime(timeinfo));
				}
		        else if(j == 6)
				{	
				    if(p -> data != NULL)
					{
					    rawtime = p -> data;
				        timeinfo = localtime (&rawtime);
			            printf("离开时间: %s",asctime(timeinfo));
					}
				    else
					    printf("离开时间: 空\n");
				}
			    else if(j == 7)
				{
					p -> data = 0;
				    printf("在便道停留时间:%d秒\n",p -> data);
				}
			    else if(j == 8)
				{
					p -> data = FALSE;
				    if(p -> data == FALSE)
				        printf("停车位是否为空: 否\n");
				    else
                        printf("停车位是否为空: 是\n");
				    j = 0;
					break;
				}
		        else if(j == 1 || j == 2 || j == 3 || j == 5)
				{
				    if(j == 1)
					{
						while(p -> data != 0)
                        {
							for(i = 0;i < 8;i++)
							{
								p = p -> next;
							}
							j = 1;
						}
						if(p -> data == 0)
						{
							p -> data = e;
							printf("\n车牌号: %d\n",p -> data);
						}
					}
				    if(j == 2)printf("便道车位: %d\n",p -> data);
			        if(j == 3)
					{
						p -> data = TRUE;
					    if(p -> data == FALSE)
						    printf("到达: 否\n");
					    else
						    printf("到达: 是\n");
					}
				    if(j == 5)
					{
						p -> data = FALSE;
					    if(p -> data == FALSE)
					     	printf("离开: 否\n");
					    else
						    printf("离开: 是\n");
					}

				}
				p = p -> next;
			 }
		}
	    printf("\n便道的车辆信息已更新:\n");
        QueueTraverse(Q);	//遍历输出
	    printf("\n-----------------------------\n");
	}	
	else{
	while(e != 0 && !QSearch(Q,e))
	{   
		lLocation++;
		time(&rawtime);               //获取当前时间<秒>(case 1 即为到达时间)
		isEmpty = FALSE;
		EnQueue(Q,e);
		EnQueue(Q,lLocation);
		EnQueue(Q,isReach);
		EnQueue(Q,rawtime);
		EnQueue(Q,isLeave);		   
		EnQueue(Q,leaveTime);
		EnQueue(Q,cost);
		EnQueue(Q,isEmpty);
		printf("\n--车牌号%d成功转入便道--\n",e);															           

	}
	printf("\n便道的车辆信息已更新:\n");
    QueueTraverse(Q);	//遍历输出
	printf("\n-----------------------------\n");
	}
}
void StopLeave(SqStack *S,dat *Q)    //车辆离开停车场
{
	int tempCarNumber;
	int flag;
	int e;
	int i;
    int j = 0;
	int *p = NULL;
	int isEmpty = TRUE;                //车位是否为空
	int cost = 0;                      //车辆停车费用
    int sCost = 2;                     //停车场停车费1秒2元
	int time1,time2;                   //用于记录离开和到达的时间(中间变量)
    printf("\n--车辆离开登记(车牌号不存在时自动退出)--\n");
	printf("\n请输入已经离开的车牌号:\n");
	scanf("%d",&e);
	while(e != 0 && Search(S,e))
    {
		tempCarNumber = e;
		printf("\n离开的车辆的信息如下:\n");
		printf("-----------------------------------\n");
		if((*S).top != (*S).base) //栈不为空时
		{
	         for(p = (*S).base;p <= (*S).top-1;p++)
			 {
		          j++;
				  //printf("\n--j = %d--\n",j);
		          if(j == 4)
				  {	  
			           if(*p != NULL)
					   {
				             rawtime = *p;
				             timeinfo = localtime (&rawtime);
			                 printf("到达时间: %s",asctime(timeinfo));
							 time1 = rawtime;
							 *p = 0;        //车辆离开后时间重置
					   }  
							
				 }
		         else if(j == 6)
				 {	
					  time(&rawtime);  //获取当前时间<秒>(case 1 即为到达时间)
				      timeinfo = localtime (&rawtime);
			          printf("离开时间: %s",asctime(timeinfo));
					  time2 = rawtime;
					  *p = 0;
				 }
				 else if(j == 7)
				 {
					  cost = (time2 - time1) * sCost;
					  printf("停车费用: %d元\n",cost);
					  cost = 0;
				}
			    else if(j == 8)
				{
					  *p = TRUE;
					  printf("停车位是否为空: 是\n");
					  printf("-----------------------------------\n");
					  j = 0;
					  break;
				}
		        else if(j == 1 || j == 2 || j == 3 || j == 5)
				{
			          if(j == 1)
					  {
						  while(*p != e)
						  {
							  for(i = 0;i < 8;i++)
							  { 
								  //printf("\n--p = %d--\n",*p);
								  p++;	 
							  }
							  j = 1;
						  }
						  if(*p == e)
						  {
							  printf("车牌号: %d\n",*p);
							  *p = 0;
						  }
					  }
				      else if(j == 2)printf("停车位: %d\n",*p);
			          else if(j == 3)
					  {
										     
					        if(*p == FALSE)
						        printf("到达: 否\n");
					        else
						        printf("到达:是\n");
						    *p = FALSE;
					  }
				      if(j == 5)
					  {
					        *p = TRUE;
					        if(*p == FALSE)
						        printf("离开: 否\n");
					        else
						        printf("离开:是\n");
						     *p = FALSE;
					  }
				}
			}
		}
		printf("\n离开停车场的该车辆是否要进入便道(1/0)?\n");
        scanf("%d",&flag);
	    if(flag == 1)
			StopToLoad(Q,tempCarNumber);
		printf("\n如果还有车辆需要离开停车场的话:\n");
		printf("请输入已经离开的车牌号:\n");
	    scanf("%d",&e);
	}
    printf("\n--查无此车牌号--\n");
}