停车场管理系统(五)

时间:2022-10-17 03:18:38

4.3.3 信息总览算法

1、信息总览算法的实现十分简单,包含两个部分:停车场车辆信息总览和便道车辆信息总览。由于停车场和便道的车辆信息的处理和保存采用的是不同的数据结构,所以对信息的总览需要根据需要将车辆信息进行分隔,实现信息的正确输出,避免访问出错或者数据混乱。

2、停车场信息总览:对顺序存储的栈进行遍历,采用自增的标记将数据进行区分,将不同的数据加上相应的修饰输出(例如:

车牌号:10086

停车位:1

到达:是

到达时间:Tue Mar 12 20:57:20 2013

离开:否

离开时间:空

停车费用:0元

停车位是否为空:否)。

备注:停车费用会在车辆离开停车场后进行清算。

3、便道车辆信息总览:对链式存储的队列进行遍历,同样采用的自增编辑对数据进行区分,将不同的数据加上对应的修饰输出(例如:

车牌号:10087

便道车位:1

到达:是

到达时间:Tue Mar 12 20:59:41 2013

离开:否

离开时间:空

在便道停留时间:0秒

停车位是否为空:否)。

备注:便道停留时间会在车辆离开便道后进行清算。


信息总览主要设计源码:
//便道车辆信息总览
int QueueTraverse(dat *Q)
{
	int j = 0;
	if((*Q).front == (*Q).rear && (*Q).front != NULL){printf("\n--便道没有车辆停靠--\n");return(FALSE);}
	if((*Q).front == NULL){printf("\n--队列不存在--\n");return(FALSE);}

	DAT *p = (*Q).front -> next;
	printf("\n-----------------------------------------------------------\n");
	while(p != NULL)
	{
	    j++;
		//printf("\n--j = %d--\n",j);
		//printf("\n--p = %d--\n",p -> data);
		if(j == 4)
		{
			if(p -> data != NULL)
			{
				rawtime = p -> data;
				timeinfo = localtime (&rawtime);
			    printf("到达时间: %s",asctime(timeinfo));
			}
		    else
                printf("到达时间: 空\n");
		}
		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)
		{
			printf("在便道停留时间:%d秒\n",p -> data);
		}
		else if(j == 8)
		{
			if(p -> data == FALSE)
			    printf("停车位是否为空: 否\n");
			else
                printf("停车位是否为空: 是\n");
			j = 0;
		}
		else if(j == 1 || j == 2 || j == 3 || j == 5)
		{
			if(j == 1){if(p -> data != NULL)printf("\n车牌号: %d\n",p -> data);else printf("\n车牌号: 空\n");}
			if(j == 2)printf("便道车位: %d\n",p -> data);
			if(j == 3)
			{
			    if(p -> data == FALSE)
				    printf("到达: 否\n");
				else
					printf("到达: 是\n");
			}
			if(j == 5)
			{
				if(p -> data == FALSE)
					printf("离开: 否\n");
				else
					printf("离开: 是\n");
			}
		}
		p = p -> next;	
	} 
	return OK;
}
//停车场车辆信息总览
int StackTraverse(SqStack *S)
{
	//printf("\n*****遍历输出*****\n\n");
    int *p = NULL;
    //int length = 0;
	int j = 0;
	if((*S).top == (*S).base && (*S).base != NULL)
	{
		printf("\n--停车场没有车辆--\n");
	}
	if((*S).base == NULL)
	{
		printf("\n--栈不存在,无法遍历输出--\n");
		return ERROR;
	}
    printf("\n-----------------------------------------------------------\n");
    if((*S).top != (*S).base) //栈不为空时
    {
	    for(p= (*S).base;p <= (*S).top-1;p++)
		{
		    j++;
		    if(j == 4)
			{
			    if(*p != NULL)
				{
				    rawtime = *p;
				    timeinfo = localtime (&rawtime);
			        printf("到达时间: %s",asctime(timeinfo));
				}
				else
                    printf("到达时间: 空\n");
			}
		    else if(j == 6)
			{	
				if(*p != NULL)
				{
					rawtime = *p;
				    timeinfo = localtime (&rawtime);
			        printf("离开时间: %s",asctime(timeinfo));
				}
				else
					printf("离开时间: 空\n");
			}
			else if(j == 7)
			{
				printf("停车费用:%d元\n",*p);
			}
			else if(j == 8)
			{
				if(*p == FALSE)
				    printf("停车位是否为空: 否\n");
				else
                    printf("停车位是否为空: 是\n");
				j = 0;
			}
		    else if(j == 1 || j == 2 || j == 3 || j == 5)
			{
				 if(j == 1){if(*p != NULL)printf("\n车牌号: %d\n",*p);else printf("\n车牌号: 空\n");}
				 if(j == 2)printf("停车位: %d\n",*p);
			     if(j == 3)
				 {
					 if(*p == FALSE)
						 printf("到达: 否\n");
					 else
						 printf("到达: 是\n");
				 }
				 if(j == 5)
				 {
					 if(*p == FALSE)
						 printf("离开: 否\n");
					 else
						 printf("离开: 是\n");
				 }

			}
		}
    }
    return OK;
}