航班订票系统

题目:
2.航班订票系统
*问题描述:通过此系统可以实现如下功能:
(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);
(2)查询:可以查询某个航线的情况(如输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
(4)退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号;
(5)修改航班信息:当航班信息改变可以修改航班数据文件。
*要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<iostream>
#define MAXSIZE 100

int airnum=0;
int airc=0;
struct air  //航班信息
{
	char air_num[50];//航班号
	char begin_name[50];//起飞地点
	char end_name[50];//降落地点
	int fare;//票价
	char time[100]; //飞行时间
	int y_p;//订购票数
	char discount[50];//折扣
	int sit;//座位数 
	int standby_ticket;//余票
	struct air *next1; //指针
};

typedef struct customer //客户信息
{
	char name [20]; // 姓名
	char num[20];  // 证件号
    char  airno[20];//航班号
	char begin_time[20]; //起飞时间
	int book_t;//订票数
	struct customer *next2;
};

int menu_select() //主菜单页面
{
    printf("\n\t机票管理订购系统\n");
	printf("----------------------\n");
	printf("\t1 录入航班信息\n");
	printf("\t2 查询航班信息\n");
	printf("\t3 订票\n");
    printf("\t4 录入客户信息\n");
	printf("\t5 修改航班信息\n");
	printf("\t6 航班信息\n");
    printf("\t7 客户信息\n");
	printf("\t8 退出系统\n");
	printf("----------------------\n");
	
	int c=0;
	while (  (c<1)  ||  (c>8)  )
	{
		printf("请选择1-8:");
		scanf("%d",&c);
	}
	return c;
}

struct air *creat_air(struct air *h) //录入航班信息  尾插法
{
	struct air *q=h;
	while(q->next1 != NULL)		// 循环将 q 指向 链尾 
		q = q->next1; 
	
	int b=1;
	while(b==1) 
	{
		struct air *p=(struct air*)malloc(sizeof(struct air)); //申请空间,//循环创建结点
        if(p==NULL)
		{
			printf("申请内存失败!");
			exit(0);
		}
	    system("cls"); //清屏
		printf("\t输入以下信息\t:\n");
		
		printf("航班号\n");
		scanf("%s",&p->air_num);
		
		printf("起飞地点\n");
		scanf("%s",&p->begin_name);
		
		printf("降落地点\n");
		scanf("%s",&p->end_name);
		
		printf("票价\n");
		scanf("%d",&p->fare);
		
	    printf("飞行时间\n");
		scanf("%s",&p->time);
		
		printf("余票\n");
		scanf("%d",&p->standby_ticket);
		
		printf("折扣\n");
		scanf("%s",&p->discount);
		
	    printf("座位数\n");
		scanf("%d",&p->sit);
	
		p->next1=NULL;
		q->next1=p;  //让P这数据 插入链尾
		q=p;
		
		airnum = airnum + 1;
		printf("\t已输入%d个航班\n",airnum);
		printf("\t**************************\n");
		printf("\t是否要输入下一条航线记录\n\t==>\t1.继续录入\n\t==>\t2.退出操作\n");
		printf("\t**************************\n");
		printf("请选择:");
		scanf("%d",&b);
		getchar();
	}
	return (h); //返回头指针
}


void find(struct air *pl) //查询航班信息
{   
	int flag=0;
	char end_name1[50]; //目的地
    char num[50]; //航班号
	int select;
	printf("\t\t查找航班信息\n");
	printf("\t**************************\n");
	printf("\t==>1.通过目的地查询\t==\n");
	printf("\t==>2.通过航班号查询\t==\n");
	printf("\t**************************\n");
	printf("\t请选择:");
	scanf("%d",&select);
	system("cls"); //清屏
	
	if(select==1) //目的地查询
	{
		printf("请输入目的地:");
		scanf("%s",&end_name1);
		for(int i=0;i<airnum;i++)
		{
			pl=pl->next1;
			if(strcmp(end_name1,pl->end_name) == 0) //两个字符串相等
	        {
				flag=1;
		        printf("航班号\t起点站\t终点站\t飞行时间\t票价\t折扣\t余票\t座位数\t");
				printf("\n");
				printf("%-6s\t",pl->air_num);
		        printf("%-6s\t",pl->begin_name);
				printf("%-6s\t",pl->end_name);
				printf("%-8s\t",pl->time);
				printf("%-6d\t",pl->fare);
				printf("%-6s\t",pl->discount);
				printf("%-6d\t",pl->standby_ticket);
				printf("%-6d\t",pl->sit);
				printf("\n");
			}
		}	
	}
	
	
	if(select==2) //航班号查询
	{
		 printf("请输入航班号:");
		 scanf("%s",&num);
	    for(int j=0;j<airnum;j++)
		{
			pl=pl->next1;
			if( strcmp(num,pl->air_num)==0 ) //两个字符串相等
	        {
				flag=1;
		        printf("航班号\t起点站\t终点站\t飞行时间\t票价\t折扣\t余票\t座位数\t");
				printf("\n");
				printf("%-6s\t",pl->air_num);
		        printf("%-6s\t",pl->begin_name);
				printf("%-6s\t",pl->end_name);
				printf("%-8s\t",pl->time);
				printf("%-6d\t",pl->fare);
				printf("%-6s\t",pl->discount);
				printf("%-6d\t",pl->standby_ticket);
				printf("%-6d\t",pl->sit);
				printf("\n");
			}
		}
	}
	if(flag==0)
		printf("无航班\n");	
}


void book_air(struct air *p) //订票
{   
	struct air *p2;
	int flag1=0;
    int  t;
    char ename[50]; // 目的地,订购航班号,订票数量
    char a[50];  //证件号 
	printf("请输入您的信息\n");
	printf("\n");
	
    printf("请输入您需要订购机票的目的地\n");
	scanf("%s",&ename);
	p2=p->next1;
    while(p2 != NULL)
	{
		
	    if(strcmp(ename,p2->end_name) == 0) 
		{  
	     	printf("您要订购机票的信息如下:\n");
	     	printf("航班号\t起点站\t终点站\t飞行时间\t票价\t折扣\t余票\t座位数\t");
	    	printf("\n");
		    printf("%-6s\t",p2->air_num);
            printf("%-6s\t",p2->begin_name);
		    printf("%-6s\t",p2->end_name);
	     	printf("%-8s\t",p2->time);
	     	printf("%-6d\t",p2->fare);
	     	printf("%-6s\t",p2->discount);
	    	printf("%-6d\t",p2->standby_ticket);
	    	printf("%-6d\t",p2->sit);
	    	printf("\n");
         	flag1=1;
		}	  
	       
	    if(flag1==1)
	   {
	    	printf("请输入您的证件号:");
		    scanf("%s",&a);
			printf("请输入订票数量");
			scanf("%d",&t);
			          
		    if(t <= p2->standby_ticket)
            {
           		printf("订票成功!!!!\n");
           		p2->standby_ticket=p2->standby_ticket-t; //运算余票数量
				break;
		    }
		    else
		    {
		  		printf("票不足!\n");
				break;
		  	} 
    	}
		
		p2=p2->next1;
	}
	if(flag1==0)
		printf("无航班信息!\n");			
}

struct customer *creat_c(struct customer * h1) //录入客户信息  尾插法
{   
	struct customer *q1=h1;
	while(q1->next2 != NULL)		// 循环将 q 指向 链尾 
		q1 = q1->next2; 
			
	int b=1;
	while(b==1) 
	{
		struct customer *p1=(struct customer*)malloc(sizeof(struct customer)); //申请空间,//循环创建结点
        if(p1==NULL)
		{
			printf("申请内存失败");
			exit(0);
		}
		
	    system("cls"); //清屏
		printf("\t输入以下信息\t:\n");
		printf("航班号\n");
		scanf("%s",&p1->airno);
		
		printf("起飞时间\n");
		scanf("%s",&p1->begin_time);
		
		printf("姓名\n");
		scanf("%s",&p1->name);
		
		printf("证件号\n");
		scanf("%s",&p1->num);
		
		printf("票价\n");
		scanf("%d",&p1->book_t);
	    
		p1->next2=NULL;
		q1->next2=p1;  //让P这数据 插入链尾
		q1=p1;
		printf("\t已输入%d个顾客\n\n",++airc);
		printf("\t**************************\n");
		printf("\t是否要输入下一条记录\n\t==>\t1.继续录入\n\t==>\t2.退出操作\n");
		printf("\t**************************\n");
		printf("请选择:");
		scanf("%d",&b);
		getchar();
	}
	return(h1); //返回头指针
}



void change(struct air *pl) //修改信息
{
	int b,flag=0;
	char airnum1[50];
	system("cls"); //清屏
	printf("请输入您要修改信息的航班号\n");
	getchar();
	scanf("%s",&airnum1);
	
	pl=pl->next1;
	while(pl != NULL)
	{  	
		if(strcmp(airnum1,pl->air_num)==0)//如果相等
	    {   
			flag=1;
			printf("请输入修改的航班信息\n\n");
			printf("航班号:");
			scanf("%s",&pl->air_num);
			printf("起点站:");
			scanf("%s",&pl->begin_name);
			printf("终点站:");
			scanf("%s",&pl->end_name);
			printf("飞行时间:");
			scanf("%s",&pl->time);
			printf("余票:");
			scanf("%d",&pl->standby_ticket);
			printf("座位数:");
		    scanf("%d",&pl->sit);
			printf("票价:");
			scanf("%d",&pl->fare);
			getchar();
			printf("修改成功!\n");
			break;
		}
		pl=pl->next1;		
	}
	
	if(flag==0)
		printf("查找不到航班号!\n");

}


void printf(struct air *pl)// 航班信息
{
    struct air *t;
	t=pl->next1;
	printf("航班号\t起点站\t终点站\t飞行时间\t票价\t折扣\t余票\t座位数\t");
	printf("\n");
    while(t!=0)
	{
		printf("%-6s\t",t->air_num);
        printf("%-6s\t",t->begin_name);
		printf("%-6s\t",t->end_name);
		printf("%-8s\t",t->time);
		printf("%-6d\t",t->fare);
		printf("%-6s\t",t->discount);
		printf("%-6d\t",t->standby_ticket);
		printf("%-6d\t",t->sit);
		printf("\n");
		t=t->next1;
		
	}	
}


void printf_c(struct customer *c)//客户信息显示
{
	struct customer *a;
	a = c->next2;
	printf("姓名\t证件号\t航班号\t登机时间\t票价");
	while(a!=NULL)
	{   
	    printf("\n");
		printf("%3s\t",a->name);
		printf("%3s\t",a->num);
		printf("%3s\t",a->airno);
		printf("%5s\t",a->begin_time);
		printf("%9d",a->book_t);
		a=a->next2;
	}
	printf("\n");
}



int main()
{  
	struct air *pl;
	pl=(struct air *)malloc(sizeof(struct air)); //申请空间
	if(pl==NULL)
	{
		printf("内存分配失败!");
		exit(0);
	}
	pl->next1=NULL;	//初始化
	
	struct customer *pl1;
	pl1=(struct customer *)malloc(sizeof(struct customer)); //申请空间
	if(pl1==NULL)
	{
		printf("内存分配失败!");
		exit(0);
	}
	pl1->next2 =NULL;	//初始化
		
	while(1)
	{
		switch(menu_select())
		{
			case 1:pl=creat_air(pl);continue; //录入航班信息
			case 2:find(pl); continue;//查找航班信息
			
			case 3:book_air(pl);continue; //订购航班
			
			case 4:pl1=creat_c(pl1);continue;	//录入客户信息 
			case 5:change(pl); continue;//修改航班信息
			case 6:printf(pl); continue;//显示航班信息
			case 7:printf_c(pl1);continue;//客户信息
		    case 8:printf("\n\t感谢使用\n");exit(0);//退出系统
		}
	}
	return 0;
}
目 录 摘 要 1 前 言 2 基本算法的实现 3 采用类C语言定义相关的数据类型 3 各模块的伪码算法 4 函数的调用关系图 6 调试分析 7 测试结果 8 源程序(带注释) 11 总 结 22 参考文献 23 致 谢 24 附件Ⅰ 部分源程序代码 25 摘 要 该设计要求对飞机航班信息进行排序和查找。可按航班的班号、起点站、到达站、起飞时间以及到达时间等信息时行查询。对于本设计,主要是通过线性表的逻辑结构、存储结构,线性表及队列上基本运算实现的。可以让我们学会如何把学到的知识用于解决实际问题。 关键词: 航班信息;客户信息;链式存储结构; 前 言 飞机在现今的社会中已是越来越重要了,人们在旅游、工作、学习等生活中对飞机几乎是不可缺少了。而由乘坐飞机所引起的问题也深入到了计算机领域,飞机订票系统就是解决这种问题的一种途径。如人们常常在订票前要对问很多信息(飞机的起落时间,机票的价格,乘坐的人数以及是否有票等等)。这个系统主要是由线性表的链式存储结构以及队列的存储结构来存储航班信息与客户信息的。它的主要功能:1、是录入航班信息,其调用函数为—insert_airline;2、查询航线(航班号,飞机号,日期,航班容量,余票数),其调用函数为:search_air;3、订票(根据客户提供的情况,办理订票手续),其调用函数为:book_air;4、承办退票业务(根据客户提供的情况,办理退票手续),其调用函数为:del_cus;5、删除已有航班信息 ,其调用函数为:del_airline . 设计这样的一个系统可以很快的查出人们所需要的信息,能省去很多的步骤,而且还非常的准确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AKA小徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值