📄 park.c
字号:
/*港口轮船进出港收费管理系统*/
//包含头文件
#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 + -