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

📄 park.c

📁 里面涉及了数据结构中的链表、队列和栈的一些知识和算法
💻 C
📖 第 1 页 / 共 2 页
字号:
		t->data=p;
		t->next=NULL;
		W1->rear1->next=t;
		W1->rear1=t;
		q=W1->head1;
		while(q!=t)
		{
			q=q->next;
			j++;
		}
		printf("\n避风港已满,该船须在等待区的第%d号位置等待片刻!\n",j);
		return OK;
	}
}
//-----------------------------------------------------------------------------------------
//(2)轮船离开模块
//轮船离开短暂靠港区函数
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{ 
	int i,room,j,n;
	int A1,A2,B1,B2;
	char carno[10];
	CarNode *p,*t;
	QueueNode *q;
	//判断短暂靠港区内是否有轮船
	for(n=0;n<=MAX;n++)
	{
		if(Enter->stack[n]!=NULL)
		{
			n=MAX+1;
			while(1) //输入离开轮船的信息
			{
				flushall();//清除所有缓冲区 
				printf("\n请输入准备离开的轮船船牌号:");
				gets(carno);
				room=0;
				for(i=0;i<=MAX;i++)
				{
					j=stricmp(carno,Enter->stack[i]->num);  //查找准备离开的轮船号
					if(j==0) 
					{
						room=i;
						break;
					}
				}
				if(room>=0&&room<=MAX)
					break;
				printf("\n短暂靠港区里没有此船牌号的轮船,请重新输入!");
			}
			p=Enter->stack[room];
			Enter->stack[room]=NULL;
			printf("\n请输入离开的时间:/Hour:Minute/");
			scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
			printf("\n离开轮船的船牌号为:");
			puts(p->num);
			printf("\n此船的到达时间为: %d:%d",p->reach.hour,p->reach.min);
			printf("离开时间为: %d:%d",p->leave.hour,p->leave.min);
			A1=p->reach.hour;
			A2=p->reach.min;
			B1=p->leave.hour;
			B2=p->leave.min;
			printf("\n此船应交费用为: %2.1f元",((B1-A1)*60+(B2-A2))*price);
			free(p);
			//判断等待区上是否有轮船及短暂靠港区是否已满
			if(W->head!=W->rear) //等待区的轮船进入短暂靠港区
			{ 
				q=W->head->next;
				t=q->data;
				for(n=0;n<=MAX;n++)
				{
					if(Enter->stack[n]!=NULL)
					{
						printf("\n等待区的%s号轮船进入避风港第%d号位置.\n",t->num,n+1);	
						t->reach.hour=B1;
						t->reach.min=B2;
						W->head->next=q->next;
						if(q==W->rear) 
							W->rear=W->head;
						Enter->stack[n]=t;
						free(q);
						n=MAX+1;
					}	
				}
				if(n==MAX+1)
					printf("短暂靠港区已满!\n");
			}
			if(W->head==W->rear)
				printf("\n等待区里没有轮船.\n");
		}	
	}
	if(n==MAX+1)
		printf("\n短暂靠港区里没有船.\n"); //短暂靠港区没有轮船;	
}
//-----------------------------------------------------------------------------------------
//轮船离开避风港函数
void Leave1(SeqStackCar1 *Enter1,SeqStackCar1 *Temp1,LinkQueueCar1 *W1)
{ 	
	int i,room,j;
	int A1,A2,A3,B1,B2,B3;
	char carno[10];
	CarNode1 *p,*t;
	QueueNode1 *q;
	//判断短暂靠港区内是否有轮船
	if(Enter1->top>0) //有轮船
	{ 
		while(1) //输入离开轮船的信息
		{
			flushall();//清除所有缓冲区 
			printf("\n请输入轮船船牌号:");
			gets(carno);
			room=0;
			for(i=1;i<=Enter1->top;i++)
			{
				j=stricmp(carno,Enter1->stack1[i]->num);  //查找准备离开的轮船号
				if(j==0) 
				{
					room=i;
					break;
				}
			}
			if(room>=1&&room<=Enter1->top)
				break;
			printf("\n没有此船牌号的轮船,请重新输入!");
		}
		while(Enter1->top>room) //轮船离开
		{
			Temp1->top++;
			Temp1->stack1[Temp1->top]=Enter1->stack1[Enter1->top];//让后面的轮船进入让路区
			Enter1->stack1[Enter1->top]=NULL;
			Enter1->top--;
		} 
		p=Enter1->stack1[Enter1->top];
		Enter1->stack1[Enter1->top]=NULL;
		Enter1->top--;
		while(Temp1->top>=1)//再把让路区的轮船放到避风港
		{
			Enter1->top++;
			Enter1->stack1[Enter1->top]=Temp1->stack1[Temp1->top];
			Temp1->stack1[Temp1->top]=NULL;
			Temp1->top--;
		}
		printf("\n请输入离开的时间/Year:Month:Day/:");
		scanf("%d:%d:%d",&(p->leave1.year),&(p->leave1.month),&(p->leave1.day));
		printf("\n离开轮船的船牌号为:");
		puts(p->num);
		printf("\n其到达时间为: %d:%d:%d",p->reach1.year,p->reach1.month,p->reach1.day);
		printf("离开时间为: %d:%d:%d",p->leave1.year,p->leave1.month,p->leave1.day);
		A1=p->reach1.year;
		A2=p->reach1.month;
		A3=p->reach1.day;
		B1=p->leave1.year;
		B2=p->leave1.month;
		B3=p->leave1.day;
		printf("\n应交费用为: %2.1f元",((B1-A1)*365+(B2-A2)*30+(B3-A3))*PRICE);
		free(p);
		//判断等待区上是否有轮船及避风港是否已满
		if(W1->head1!=W1->rear1&&Enter1->top<MAX) //等待区的轮船进入避风港
		{ 
			q=W1->head1->next;
			t=q->data;
			Enter1->top++;
			printf("\n等待区的%s号轮船进入避风港第%d号位置.\n",t->num,Enter1->top);
			t->reach1.year=B1;
			t->reach1.month=B2;
			t->reach1.day=B3;
			W1->head1->next=q->next;
			if(q==W1->rear1) //等待区为空
				W1->rear1=W1->head1;
			Enter1->stack1[Enter1->top]=t;
			free(q);
		}
		else 
			printf("\n避风港的等待区里没有船.\n");
	}
	else 
		printf("\n避风港里没有船.\n"); //没有轮船
}
//-----------------------------------------------------------------------------------------
//(3)列表显示轮船信息模块
//列表显示短暂靠港区轮船的信息
void List01(SeqStackCar *S) 
{
	int n,i;
	for(n=0;n<=MAX;n++)
	{
		if(S->stack[n]!=NULL)
			n=MAX+1;
	}
	if(n==MAX+2)
	{
			printf("\n短暂靠港区里的轮船信息:");
			printf("\n位置\t|\t到达时间\t|\t船牌号\n");
			for(i=0;i<=MAX;i++)
			{
				if(S->stack[i]!=NULL)
				{
					printf("%d号\t|\t",i+1);
					printf("%d点%d分 \t|\t ",S->stack[i]->reach.hour,S->stack[i]->reach.min);
					puts(S->stack[i]->num);
				}
			}
			
	}	
	if(n==MAX+1)
		printf("\n现在短暂靠港区里没有船\n");
}
//-----------------------------------------------------------------------------------------
//列表显示短暂靠港区的等待区里轮船信息
void List02(LinkQueueCar *W) 
{
	QueueNode *p;
	p=W->head->next;
	if(W->head!=W->rear) //判断等待区里是否有船
	{
		printf("\n等待区里轮船的号码为:\n");
		while(p!=NULL)
		{
			puts(p->data->num);
			p=p->next;
		}
	}
	else 
		printf("\n现在短暂靠港区的等待区里没有船.\n");
}
//-----------------------------------------------------------------------------------------
//列表显示避风港里轮船信息
void List11(SeqStackCar1 *S1) 
{
	int i;
	if(S1->top>0) //判断避风港里是否有船
	{
		printf("\n避风港:");
		printf("\n位置\t|\t到达时间\t|\t船牌号\n");
		for(i=1;i<=S1->top;i++)
		{
			printf("%d号\t|\t",i);
			printf("%d年%d月%d日 \t|\t ",S1->stack1[i]->reach1.year,S1->stack1[i]->reach1.month,S1->stack1[i]->reach1.day);
			puts(S1->stack1[i]->num);
		}
	}
	else 
		printf("\n现在避风港里没有船\n");
}
//-----------------------------------------------------------------------------------------
//列表显示避风港的等待区里轮船信息
void List22(LinkQueueCar1 *W1) 
{
	QueueNode1 *p;
	p=W1->head1->next;
	if(W1->head1!=W1->rear1) //判断等待区里是否有船
	{
		printf("\n等待区里轮船的号码为:\n");
		while(p!=NULL)
		{
			puts(p->data->num);
			p=p->next;
		}
	}
	else 
		printf("\n现在避风港的等待区里没有船.\n");
}
//-----------------------------------------------------------------------------------------
//显示轮船信息函数
void List(SeqStackCar1 S1,SeqStackCar S,LinkQueueCar1 W1,LinkQueueCar W)
{
	int flag,tag;
	flag=1;
	while(flag)
	{
		printf("\n请选择地点:");
		printf("\n1.避风港\n2.避风港的等待区\n3.短暂靠港区\n4.短暂靠港区的等待区\n5.返回系统菜单\n");
		while(1)
		{ 
			scanf("%d",&tag);
			if(tag>=1&&tag<=5) 
				break;
			else 
				printf("\n请选择1|2|3|4|5:");
		}
		switch(tag)
		{
		case 1:
			List11(&S1);
			break; //列表显示避风港信息
		case 2:
			List22(&W1);
			break; //列表显示等待区信息
		case 3:
			List01(&S);
			break;
		case 4:
			List02(&W);
			break;
		case 5:
			flag=0;//返回系统菜单
			break;
		default: 
			break;
		}
	}
}

⌨️ 快捷键说明

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