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

📄 park.c

📁 里面涉及了数据结构中的链表、队列和栈的一些知识和算法
💻 C
📖 第 1 页 / 共 2 页
字号:
/*港口轮船进出港收费管理系统*/
//包含头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//***************************************************************************************
#define OK 1
#define ERROR -1
#define MAX 2      //避风港和短暂靠港区的最大容船量
#define price 0.5  //每船每分钟收费五角钱(短暂靠港区收费标准)
#define PRICE 50.0  //每船每天收费五十块钱(避风港收费标准)
//***************************************************************************************
typedef struct time1
{
	int year;//年
	int month;//月
	int day;//日
}Time1;//时间结点包括年月和日(避风港)
//-----------------------------------------------------------
typedef struct time
{
	int hour;//小时
	int min;//分钟
}Time;//时间结点包括小时和分钟(短暂靠港区)
//-----------------------------------------------------------
typedef struct node1
{
	char num[10];//轮船船牌号
	Time1 reach1;//到达时间
	Time1 leave1;//离开时间
}CarNode1;//数组栈轮船信息结点(避风港)
//-----------------------------------------------------------
typedef struct node
{
	char num[10];//轮船船牌号
	Time reach;//到达时间
	Time leave;//离开时间
}CarNode;//数组线性表的轮船结点信息(短暂靠港区)
//-----------------------------------------------------------
typedef struct NODE1
{
	CarNode1 *stack1[MAX+1];
	int top;
}SeqStackCar1;//模拟避风港和让路区(栈)
//-----------------------------------------------------------
typedef struct NODE
{
	CarNode *stack[MAX+1];
}SeqStackCar;//模拟短暂靠港区(线性表)
//-----------------------------------------------------------
typedef struct CAR1
{
	CarNode1 *data;
	struct CAR1 *next;
}QueueNode1;//队列轮船信息结点(避风港)
//-----------------------------------------------------------
typedef struct CAR
{
	CarNode *data;
	struct CAR *next;
}QueueNode;//队列轮船信息结点(短暂靠港区)
//-----------------------------------------------------------
typedef struct Node
{
	QueueNode *head;
	QueueNode *rear;
}LinkQueueCar;//模拟短暂靠港区的等待区(队列)
//-----------------------------------------------------------
typedef struct Node1
{
	QueueNode1 *head1;
	QueueNode1 *rear1;
}LinkQueueCar1;//模拟避风港的等待区(队列)
//***************************************************************************************
//(1)函数声明(初始化函数)
void InitStack(SeqStackCar1 *);//初始化避风港(栈)函数
void InitTable(SeqStackCar *);//初始化短暂靠港区(线性表)函数
int InitQueue1(LinkQueueCar1 *);//初始化避风港的等待区函数
int InitQueue(LinkQueueCar *);//初始化短暂靠港区等待区函数
//(2)函数声明(功能函数)
int Arrival1(SeqStackCar1 *,LinkQueueCar1 *);//轮船到达避风港函数
int Arrival(SeqStackCar *,LinkQueueCar *);//轮船到达短暂靠港区函数
void Leave1(SeqStackCar1 *,SeqStackCar1 *,LinkQueueCar1 *);//轮船离开避风港函数
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);//轮船离开短暂靠港区函数
void List(SeqStackCar1,SeqStackCar,LinkQueueCar1,LinkQueueCar);//显示到港轮船信息函数
//***************************************************************************************
void main() //主函数
{
	SeqStackCar1 Enter1,Temp1;
	SeqStackCar Enter,Temp;
	LinkQueueCar1 Wait1;
	LinkQueueCar Wait;
	int ch;
	int flag1=1,flag2=1,tag1,tag2;
	InitStack(&Enter1);       //初始化避风港
	InitTable(&Enter);        //初始化短暂靠港区
	InitStack(&Temp1);        //初始化让路区
	InitQueue1(&Wait1);       //初始化避风港的等待区
	InitQueue(&Wait);         //初始化短暂靠港区的等待区
	while(1)//无条件循环
	{ 
		printf("***************************港口轮船进出港收费管理系统***************************\n");
		printf("                                        哈尔滨工业大学(威海)计算机科学与技术学院\n");
		printf("                                  Harbin Institute of Technology at Weihai (HIT)\n");
		printf("                                       School of Computer Science and Technology\n");
		printf("                                             040410224 李超     040410214 赵国谦\n");
		printf("\t\t\t\t系统菜单\n");
		printf("--------------------------------------------------------------------------------");
		printf(" 1. 轮船到达\t");
		printf(" 2. 轮船离开\t");
		printf(" 3. 列表显示\t");
		printf(" 4. 退出系统\n");
		printf("--------------------------------------------------------------------------------");
		while(1)//无条件循环
		{
			scanf("%d",&ch);
			if(ch>=1&&ch<=4)//输入正确退出循环
				break;          
			else
				printf("\n请选择:1|2|3|4.");//输入错误提示信息
		}
		switch(ch)
		{ 
		case 1://轮船到达 
			while(flag1)
			{
				printf("\n1、进入避风港\n");
				printf("2、进入短暂靠港区\n");
				printf("3、返回系统菜单\n");
				while(1)
				{ 
					scanf("%d",&tag1);
					if(tag1>=1&&tag1<=3) 
						break;
					else 
						printf("\n请选择1|2|3:");
				}
				switch(tag1)
				{
				case 1:
					Arrival1(&Enter1,&Wait1);//调用轮船到达避风港函数
					break; 
				case 2:
					Arrival(&Enter,&Wait);//调用轮船到达短暂靠港区函数
					break; 
				case 3:
					flag1=0;//返回系统菜单
					break;
				default: 
					break;
				}
			}
			flag1=1;
			break;                  
		case 2://轮船离开
			while(flag2)
			{
				printf("\n1、离开避风港\n");
				printf("2、离开短暂靠港区\n");
				printf("3、返回系统菜单\n");
				while(1)
				{ 
					scanf("%d",&tag2);
					if(tag2>=1&&tag2<=3) 
						break;
					else 
						printf("\n请选择1|2|3:");
				}
				switch(tag2)
				{
				case 1:
					Leave1(&Enter1,&Temp1,&Wait1);//调用轮船离开避风港函数
					break; 
				case 2:
					Leave(&Enter,&Temp,&Wait);//调用轮船离开短暂靠港区函数
					break; 
				case 3:
					flag2=0;//返回系统菜单
					break;
				default: 
					break;
				}
			}
			flag2=2;
			break;  
		case 3:
			List(Enter1,Enter,Wait1,Wait);//显示轮船信息函数
			break;
		case 4:
			exit(0);//退出系统
		default:
			break;
		} 
	}
}
//*****************************************************************************************
//一、初始化函数定义部分
//避风港、等待区和让路区初始化
void InitStack(SeqStackCar1 *S1) //初始化栈(避风港和让路区)函数
{ 
	int i;
	S1->top=0;
	for(i=0;i<=MAX;i++)
		S1->stack1[i]=NULL;
}
//-------------------------------------------------------------------
void InitTable(SeqStackCar *S) //初始化线性表(短暂靠港区)函数
{
	int n;
	for(n=0;n<=MAX;n++)
		S->stack[n]=NULL;
}
//-------------------------------------------------------------------
int InitQueue(LinkQueueCar *Q) //初始化队列(短暂靠港区的等待区)函数
{
	Q->head=(QueueNode *)malloc(sizeof(QueueNode));//头结点
	if(Q->head!=NULL)
	{
		Q->head->next=NULL;
		Q->rear=Q->head;
		return OK;
	}
	else
		return ERROR;
}
//-------------------------------------------------------------------
int InitQueue1(LinkQueueCar1 *Q1) //初始化队列(避风港的等待区)函数
{
	Q1->head1=(QueueNode1 *)malloc(sizeof(QueueNode1));//头结点
	if(Q1->head1!=NULL)
	{
		Q1->head1->next=NULL;
		Q1->rear1=Q1->head1;
		return OK;
	}
	else
		return ERROR;
}
//*****************************************************************************************
//二、功能函数定义部分
//(1)轮船到达模块
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) //轮船到达短暂靠港区函数
{ 
	CarNode *p;
	QueueNode *t, *q;
	int j=0,n=0,m=1;
	p=(CarNode *)malloc(sizeof(CarNode));
	flushall();//清除所有缓冲区 
	printf("\n请输入船牌号(例:鲁B1234):");
	gets(p->num);
	for(n=0;n<=MAX;n++)
	{
		if(Enter->stack[n]==NULL)
		{	
			printf("\n轮船在短暂靠港区的第%d号位置.",n+1);
			printf("\n请输入轮船到达的时间:/Hour:Minute/");
			scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
			Enter->stack[n]=p;
			n=MAX+1;
			return OK;
		}
	}
	if(n==MAX+1)//短暂靠港区已满,轮船进等待区
	{ 
		t=(QueueNode *)malloc(sizeof(QueueNode));
		t->data=p;
		t->next=NULL;
		W->rear->next=t;
		W->rear=t;
		q=W->head;
		while(q!=t)
		{
			q=q->next;
			j++;
		}
		printf("\n短暂靠港区已满,该船须在等待区的第%d号位置等待片刻!\n",j);	
	}
	return OK;
}
//-----------------------------------------------------------------------------------------
int Arrival1(SeqStackCar1 *Enter1,LinkQueueCar1 *W1) //轮船到达避风港函数
{ 
	CarNode1 *p;
	QueueNode1 *t, *q;
	int j=0;
	p=(CarNode1 *)malloc(sizeof(CarNode1));
	flushall();//清除所有缓冲区 
	printf("\n请输入船牌号(例:鲁A1234):");
	gets(p->num);
	if(Enter1->top<MAX) //避风港未满,轮船进避风港
	{
		Enter1->top++;
		printf("\n轮船在避风港第%d号位置.",Enter1->top);
		printf("\n请输入到达时间:/Year:Month:Day/");
		scanf("%d:%d:%d",&(p->reach1.year),&(p->reach1.month),&(p->reach1.day));
		Enter1->stack1[Enter1->top]=p;
		return OK;
	}
	else//避风港已满,轮船进等待区
	{ 
		t=(QueueNode1 *)malloc(sizeof(QueueNode1));

⌨️ 快捷键说明

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