航班查询系统

这是一个基于单向链表实现的航班管理系统,包括信息录入、显示、查询、删除和修改功能。系统首先初始化航班信息,然后按照起飞时间进行排序。用户可以选择不同操作,如按航班号、起点站、终点站、起飞时间和票价进行查询。此外,系统还支持航班信息的增删改操作。
摘要由CSDN通过智能技术生成

1、功能要求:
实现以下功能:
1)信息录入
2)信息显示(按照起飞时间先后顺序显示)
3)信息查询(可根据不同的关键字进行查询)
4)删除信息
5)修改信息

2、技术要求:
1)使用单向链表对录入的信息进行存储
2)对录入的信息进行排序(可按起飞时间进行排序)
3)Make管理项目

#include "../include/flight.h"
int main(void)
{	
	pnode_list head;//头指针
	Init_Flight(&head);//初始化头指针
	datatype data;//航班信息
	Init_Flight_Info(head);//初始化航班信息
	unsigned int x=0;//管理员操作标志位
	while(1){
		printf("-----------------------------------------------------------------\n");
		printf("请选择您要操作的选项:\n");
		printf("*****************************************************************\n");
		printf("*****************************************************************\n");
		printf("1、航班信息录入 2、航班信息显示 3、航班信息查询 \n4、删除航班信息 5、修改航班信息 6、退出\n");
		printf("*****************************************************************\n");
		printf("*****************************************************************\n");
		int m_reg = scanf("%d",&x);
		if(m_reg == 0){
			return 0;
		}
		switch(x){
			case 1://航班信息录入
				Input_Info(&data);
				Insert_Flight_Head(head,data);
				sort(head);
				//Display_Info(head);
				x=0;
				break;
			case 2://航班信息显示
				sort(head);
				Display_Info(head);
				x=0;
				break;
			case 3://航班信息查询
				Check_Info(head);				
				x=0;
				break;
			case 4://删除航班信息
				Del_Flight_Info(head);
				break;
			case 5://修改航班信息
				Updata_Flight_Info(head);
				break;
			case 6:
				Exit_Flight_System();//延时1s结束
				return 0;
				break;
			default :
				x=0;
				break;
		}
	}
	return 0;
}
#include "../include/flight.h"

/*
头指针初始化
*/
void Init_Flight(pnode_list *P_Flight)
{
	*P_Flight = (pnode_list)malloc(sizeof(node_list));
	if(*P_Flight==NULL){
		printf("*P_Flight malloc error %s\n",__FUNCTION__);
		return;
	}
	(*P_Flight)->next = *P_Flight;
}
/*
创建新节点
*/
pnode_list Creat_Node(datatype d)
{
	pnode_list P_Link = (pnode_list)malloc(sizeof(node_list));
	if(P_Link==NULL){
		printf("Creat_Node malloc error %s\n",__FUNCTION__);
		return;
	}
	P_Link->info = d;
	P_Link->next = P_Link;
	return P_Link;
}
/*
头插法,添加在一个元素前面
*/
void Insert_Flight_Head(pnode_list head,datatype data)
{
	if(head == NULL){
		return ;
	}
	pnode_list node = Creat_Node(data);
	if(node == NULL){
		printf("Creat_Node malloc error %s\n",__FUNCTION__);
	}
	node->next = head->next;
	head->next = node;
}
/*
	链表插入排序
*/
void sort(pnode_list head)
{
	pnode_list p = head->next;
	pnode_list q = head;
	head->next = head;
	
	pnode_list node;
	pnode_list pp;
	while(p!=q){
		node = p;
		p = p->next;
		
		pp = head;
		while(pp->next!=head){
			if(pp->next->info.stime > node->info.stime){
				break;
			}
			pp = pp->next;
		}		
		//将节点插入到pp的后面
		node->next = pp->next;
		pp->next = node;
	}
}
/*
遍历
*/
void Display_Info(pnode_list head)
{
	if(head == NULL){
		return ;
	}
	pnode_list p = head->next;
	printf("*****************************************************************************\n");
	printf("航班号       起点站       终点站       班期      机型 起飞时间 到达时间  票价\n");
	printf("*****************************************************************************\n");
	while(p!=head){
		printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->info.number,p->info.staddress,p->info.arraddress,p->info.DATE,p->info.TYPE,p->info.stime,p->info.atime,p->info.value);
		printf("-----------------------------------------------------------------------------\n");
		p = p->next;
	}
	printf("\n");
}
/*
航班信息录入
*/
void Input_Info(datatype *data)
{
//	printf("请输入航班信息:\n航班号/起点站/终点站/班期/机型/起飞时间/到达时间/票价\n");	
//	scanf("%s%s%s%s%s%d%d%d",data->number,data->staddress,data->arraddress,data->DATE,data->TYPE,&(data->stime),&(data->atime),&(data->value));
	printf("请输入航班号:");
	scanf("%s",data->number);
	printf("请输入起点站:");
	scanf("%s",data->staddress);
	printf("请输入终点站:");
	scanf("%s",data->arraddress);
	printf("请输入班期:");
	scanf("%s",data->DATE);
	printf("请输入机型:");
	scanf("%s",data->TYPE);
	printf("请输入起飞时间:");
	scanf("%d",&(data->stime));
	printf("请输入到达时间:");
	scanf("%d",&(data->atime));
	printf("请输入票价:");
	scanf("%d",&(data->value));
}
/*
初始化航班当天信息
*/
void Init_Flight_Info(pnode_list head)
{
	datatype data[10];
	//初始化当天信息
	strcpy(data[0].number,"F1008");
	strcpy(data[1].number,"F1208");
	strcpy(data[2].number,"F3048");
	strcpy(data[3].number,"AS052");
	strcpy(data[4].number,"F1041");
	strcpy(data[5].number,"F1059");
	strcpy(data[6].number,"L1908");
	strcpy(data[7].number,"MH501");
	strcpy(data[8].number,"F8591");
	strcpy(data[9].number,"LL2008");
	
	strcpy(data[0].staddress,"Shenzhen");
	strcpy(data[1].staddress,"xiamen");
	strcpy(data[2].staddress,"fuzhou");
	strcpy(data[3].staddress,"Shenzhen");
	strcpy(data[4].staddress,"shanghai");
	strcpy(data[5].staddress,"zhejiang");
	strcpy(data[6].staddress,"beijing");
	strcpy(data[7].staddress,"Shenzhen");
	strcpy(data[8].staddress,"quanzhou");
	strcpy(data[9].staddress,"hangzhou");	

	
	strcpy(data[0].arraddress,"fuzhou");
	strcpy(data[1].arraddress,"shenzhen");
	strcpy(data[2].arraddress,"shenzhen");
	strcpy(data[3].arraddress,"xiamen");
	strcpy(data[4].arraddress,"shenzhen");
	strcpy(data[5].arraddress,"shenzhen");
	strcpy(data[6].arraddress,"shenzhen");
	strcpy(data[7].arraddress,"quanzhou");
	strcpy(data[8].arraddress,"shenzhen");
	strcpy(data[9].arraddress,"shenzhen");
	
	strcpy(data[0].DATE,"001");
	strcpy(data[1].DATE,"005");
	strcpy(data[2].DATE,"012");
	strcpy(data[3].DATE,"036");
	strcpy(data[4].DATE,"009");
	strcpy(data[5].DATE,"007");
	strcpy(data[6].DATE,"105");
	strcpy(data[7].DATE,"528");
	strcpy(data[8].DATE,"520");
	strcpy(data[9].DATE,"999");	
	
	strcpy(data[0].TYPE,"S001");
	strcpy(data[1].TYPE,"S011");
	strcpy(data[2].TYPE,"S101");
	strcpy(data[3].TYPE,"S301");
	strcpy(data[4].TYPE,"S991");
	strcpy(data[5].TYPE,"S666");
	strcpy(data[6].TYPE,"S598");
	strcpy(data[7].TYPE,"S521");
	strcpy(data[8].TYPE,"S052");
	strcpy(data[9].TYPE,"S520");	
	data[0].stime = 9;
	data[1].stime = 8;
	data[2].stime = 15;
	data[3].stime = 19;
	data[4].stime = 14;
	data[5].stime = 10;
	data[6].stime = 12;
	data[7].stime = 17;
	data[8].stime = 5;
	data[9].stime = 16;
	
	data[0].atime = 13;
	data[1].atime = 11;
	data[2].atime = 19;
	data[3].atime = 22;
	data[4].atime = 22;
	data[5].atime = 16;
	data[6].atime = 22;
	data[7].atime = 20;
	data[8].atime = 8;
	data[9].atime = 23;
	
	data[0].value = 360;
	data[1].value = 270;
	data[2].value = 360;
	data[3].value = 270;
	data[4].value = 720;
	data[5].value = 540;
	data[6].value = 900;
	data[7].value = 450;
	data[8].value = 270;
	data[9].value = 630;
	int i;
	for(i=0;i<10;i++){
		Insert_Flight_Head(head,data[i]);//头插
	}	
	sort(head);//排序	
}
/*
航班信息查询
*/
void Check_Info(pnode_list head)
{
	unsigned int x=0;
	unsigned int C_Flag = 0;//是否有航班标志位
	pnode_list p = head;
	char c_number[18]={};    //航班号 
	char c_staddress[18]={};   //起点站
	char c_arraddress[18]={};//终点站
	int c_stime=0;
	int c_value=0;
	printf("*****************************************************************\n");
	printf("请选择查询方式:\n1、航班号 2、起点站 3、终点站 4、起飞时间 5、票价\n");
	printf("*****************************************************************\n");
	int c_reg = scanf("%d",&x);
	if(c_reg == 0){
		return;
	}
	switch(x){
		case 1://查询航班号
			printf("*****************************************************************\n");
			printf("请输入要查询的航班号:");
			scanf("%s",c_number);
			if(head==NULL){
				printf("今天已经没有航班了\n");
				return;
			}
			while(p->next != head){
				if(strcmp(p->next->info.number,c_number)==0){//如果航班信息相同就打印出航班信息
					printf("*****************************************************************************\n");
					printf("航班号       起点站       终点站       班期      机型 起飞时间 到达时间  票价\n");
					printf("*****************************************************************************\n");
					printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
					printf("-----------------------------------------------------------------------------\n");
					C_Flag++;
				}
				p = p->next;
			}
			if(C_Flag==0){
				printf("今天该航班没有起飞\n");
			}			
			C_Flag = 0;
			return ;
			break;
		case 2://查询起点站
			printf("*****************************************************************\n");
			printf("请输入要查询的起点站:");
			scanf("%s",c_staddress);
			if(head==NULL){
				printf("今天已经没航班了\n");
				return;
			}
			while(p->next != head){
				if(strcmp(p->next->info.staddress,c_staddress)==0){//如果航班信息相同就打印出航班信息
					printf("*****************************************************************************\n");
					printf("航班号       起点站       终点站       班期      机型 起飞时间 到达时间  票价\n");
					printf("*****************************************************************************\n");
					printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
					printf("-----------------------------------------------------------------------------\n");
					C_Flag++;
				}
				p = p->next;
			}
			if(C_Flag==0){
				printf("今天没有从%s起飞的飞机\n",c_staddress);
			}			
			C_Flag = 0;
			return ;
			break;
		case 3://查询终点站
			printf("*****************************************************************\n");
			printf("请输入要查询的终点站:");
			scanf("%s",c_arraddress);
			if(head==NULL){
				printf("今天已经没航班了\n");
				return;
			}
			while(p->next != head){
				if(strcmp(p->next->info.arraddress,c_arraddress)==0){//如果航班信息相同就打印出航班信息
					printf("*****************************************************************************\n");
					printf("航班号       起点站       终点站       班期      机型 起飞时间 到达时间  票价\n");
					printf("*****************************************************************************\n");
					printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
					printf("-----------------------------------------------------------------------------\n");
					C_Flag++;
				}
				p = p->next;
			}
			if(C_Flag==0){
				printf("今天没有到%s的航班\n",c_arraddress);
			}			
			C_Flag = 0;
			return ;		
			break;
		case 4://查询出发时间
			printf("*****************************************************************\n");
			printf("请输入要查询的起飞时间:");
			scanf("%d",&c_stime);
			if(head==NULL){
				printf("今天已经没航班了\n");
				return;
			}
			while(p->next != head){
				if(p->next->info.stime == c_stime){//如果航班信息相同就打印出航班信息
					printf("*****************************************************************************\n");
					printf("航班号       起点站       终点站       班期      机型 起飞时间 到达时间  票价\n");
					printf("*****************************************************************************\n");
					printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
					printf("-----------------------------------------------------------------------------\n");
					C_Flag++;
				}
				p = p->next;
			}
			if(C_Flag==0){
				printf("今天没有%d点起飞的航班\n",c_stime);
			}			
			C_Flag = 0;
			return ;
			break;
		case 5:
			printf("*****************************************************************\n");
			printf("请输入要查询的票价:");
			scanf("%d",&c_value);
			if(head==NULL){
				printf("今天已经没航班了\n");
				return;
			}
			while(p->next != head){
				if(p->next->info.value == c_value){//如果航班信息相同就打印出航班信息
					printf("*****************************************************************************\n");
					printf("航班号       起点站       终点站       班期      机型 起飞时间 到达时间  票价\n");
					printf("*****************************************************************************\n");
					printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
					printf("-----------------------------------------------------------------------------\n");
					C_Flag++;
				}
				p = p->next;
			}
			if(C_Flag==0){
				printf("今天没有%d价格的航班\n",c_value);
			}			
			C_Flag = 0;
			return ;
			break;
		break;
		default:
		break;		
	}
}
/*
删除航班信息
*/
void Del_Flight_Info(pnode_list head)
{
	unsigned int C_Flag = 0;
	char c_number[18]={};    //删除的航班号
	if(head==NULL){
		printf("今天已经没有航班了\n");
		return;
	}
	printf("*****************************************************************\n");
	printf("请输入要删除的航班号:");
	scanf("%s",c_number);
	pnode_list p = head;
	pnode_list old_node;
	while(p->next!=head){
		if(strcmp(p->next->info.number,c_number)==0){
			C_Flag++;
			old_node=p->next;
			p->next = p->next->next;
			old_node->next = NULL;
			free(old_node);
			continue;
		}
		p = p->next;
	}	
	if(C_Flag==0){
		printf("您输入有误,没有该航班,请重试!\n");
	}else{
		C_Flag = 0;
	}
	return;
}
/*
修改航班信息
*/
void Updata_Flight_Info(pnode_list head)
{
	unsigned int C_Flag = 0;
	char c_number[18]={};    //修改的航班号
	if(head==NULL){
		return;
	}
	printf("*****************************************************************\n");
	printf("请输入要修改的航班号:");
	scanf("%s",c_number);
	pnode_list p = head;
	pnode_list old_node;
	while(p->next!=head){
		if(strcmp(p->next->info.number,c_number)==0){
			C_Flag++;
			old_node=p->next;
			datatype New_data;
			printf("请输入新的航班号:");
			scanf("%s",New_data.number);
			printf("请输入新的起点站:");
			scanf("%s",New_data.staddress);
			printf("请输入新的终点站:");
			scanf("%s",New_data.arraddress);
			printf("请输入新的班期:");
			scanf("%s",New_data.DATE);
			printf("请输入新的机型:");
			scanf("%s",New_data.TYPE);
			printf("请输入新的起飞时间:");
			scanf("%d",&(New_data.stime));
			printf("请输入新的到达时间:");
			scanf("%d",&(New_data.atime));
			printf("请输入新的票价:");
			scanf("%d",&(New_data.value));			
			pnode_list New_node=Creat_Node(New_data);
			if(New_node == NULL){
				return;
			}
			New_node->next=p->next->next;
			p->next = New_node;
			old_node->next = NULL;
			free(old_node);
		}
		p = p->next;
	}
	if(C_Flag==0){
		printf("您输入有误,没有该航班,请重试!");
	}else{
		C_Flag = 0;
	}
	return;
}
/*
退出航班系统
*/
void Exit_Flight_System()
{
	printf("Flight System Shutdown Now......\n");
	printf("-----------------------------------------------------------------------------\n");
	printf("-----------------------------------------------------------------------------\n");
	printf("-----------------------------------------------------------------------------\n");
	sleep(1);
	return;
}

```c
//flight.h
#ifndef __FLIGHT_H__
#define __FLIGHT_H__ 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef  struct flight       //航班信息数据结构
{   
    char number[18];    //航班号    
    char staddress[18];   //起点站    
    char arraddress[18];   //终点站    
    char DATE[12];       //班期    
    char TYPE[8];       //机型    
    int stime;          //起飞时间    
    int atime;          //到达时间    
    int value;           //票价     
}datatype;

typedef  struct Node   //链表结点
{            
 datatype info;       
 struct Node *next;   
}node_list,*pnode_list; 


extern void Init_Flight(pnode_list *P_Flight);
extern pnode_list Creat_Node(datatype d);
extern void Insert_Flight_Head(pnode_list head,datatype data);
extern void Display_Info(pnode_list head);
extern void Input_Info(datatype *data);
extern void sort(pnode_list head);
extern void Init_Flight_Info(pnode_list head);
extern void Check_Info(pnode_list head);
extern void Exit_Flight_System();
extern void Del_Flight_Info(pnode_list head);
extern void Updata_Flight_Info(pnode_list head);
#endif
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值