栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

航班订票系统的设计与实现(c语言,数据结构)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

航班订票系统的设计与实现(c语言,数据结构)

该系统具备如下的功能:
(1)定义一个主菜单,方便用户实现下述操作。要求菜单简洁、易操作、界面美观。
(2)可以录入航班信息:要求数据存储在一个数据文件中,其数据构成以及具体的数据信息请结合实际情况进行自定义。
(3)修改航班信息:当航班信息改变时,可以修改航班信息。
(4)存盘和导入:所有航班信息可保存到磁盘文件,也可在需要的时候从磁盘文件导入到内存。
(5)可以查询某条航线的情况:例如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓。
(6)提供各种查询功能:例如按起飞(抵达)城市查询、按航空公司查询、按票价折扣查询等。
(7)可以订票。如果该航班已经无票,可以提供相关可选择航班。
(8)可以退票。退票后修改相关数据文件。
(9)客户资料包括:姓名、证件号、订票数量及航班情况,客户资料需以文件保存,并可实现文件导入文字。
(10)订单要有编号,订单需以文件保存,并可实现文件导入。

(11)提供客户资料查询功能,提供订单查询功能。

头文件:

typedef struct Day//日期结构体
{
	int month;
	int day;
}Day;
typedef struct plane//航班结构体
{
	int num;//航班号
	Day d;//航班日期
	char company[3];//航空公司
	char start_time[10];//起飞时间
	char end_time[10];//到达时间
	char start_place[10];//起飞地点
	char end_place[10];//目的地
	int price;//票价
	float discount;//折扣
	int count;//票的数量
	struct plane *next;
}plane;
typedef struct passenger//乘客信息
{
	int bh;
	char name[10];//乘客姓名
	int id;//乘客id
	int amount;//所订票的数量
	int num_d;//所定的航班号
	struct passenger *next;
}passenger;
plane *loadin();//头插法创建plane
void prn1(plane *a);//输出plane
void prn(plane *p);//显示航班信息
void save(plane *p);//保存航班信息到文件
void search_full(plane *a);//判断是否满仓

void search_plane(plane *a);//航班查询
plane  *search_num(plane *a);//航班号查找
void search_place(plane *a);//起飞地点,到达地点查找
void search_price(plane *a);//票价查找
void search_discount(plane *a);//折扣查找
void search_company(plane *a);//航空公司名查找
void search_time(plane *a);//起飞时间查找
void search_menu();

void order(plane *a);//订票
void tuipiao(plane *a);//退票

void change(plane *a);//修改代码
void changemenu();
void changenum(plane *a);//修改航班号
void changecompany(plane *a);//修改公司名字
void changeplace(plane *a);//修改起飞地点
void changetime(plane *a);//修改起飞时间

//乘客
//乘客代码
passenger *creat_passenger();//头插法建立乘客链表
void prn_passenger1(passenger *a);
void prn_passenger(passenger *p);
void search_passengermenu();
void search_passenger(passenger *a);//乘客查询
void search_name(passenger *a);//乘客姓名查询
void search_id(passenger *a);//乘客id查询

passenger *creat_order();//订单导入
void prn_order(passenger *p);//输出订单
void menu();//总菜单

代码主体:

#include
#include
#include
#include"head.h"
void init(plane *a)
{
		a=(plane *)malloc(sizeof(plane));
	a->next=NULL;
}
//航班代码
plane *loadin()//头插法建立航班单链表
{
	plane *h,*a;
	FILE *fp;
	h=(plane *)malloc(sizeof(plane));
	h->next=NULL;
	if((fp=fopen("航班信息.txt","r"))==NULL)
	{
		printf("没有文件n");
		exit(0);
	}
	while(!feof(fp))
	{
	  a=(plane *)malloc(sizeof(plane));
	   fscanf(fp,"%d",&a->num);
      fscanf(fp,"%d",&a->d.month);
      fscanf(fp,"%d",&a->d.day);
	  fscanf(fp,"%s",&a->company);
      fscanf(fp,"%s",&a->start_time);
	  fscanf(fp,"%s",&a->end_time );
	  fscanf(fp,"%s",&a->start_place);
	  fscanf(fp,"%s",&a->end_place);
	  fscanf(fp,"%d",&a->price);
	  fscanf(fp,"%f",&a->discount );
	  fscanf(fp,"%d",&a->count);
	  a->next=h->next;
	  h->next=a;
	}
	fclose(fp);
	return h;
}
void prn1(plane *a)
{
	   printf("%d ",a->num);
       printf("%9d月",a->d.month);
       printf("%d日 ",a->d.day);
	   printf("%7s ",a->company);
       printf("%7s时 ",a->start_time);
	   printf("%9s时 ",a->end_time );
	   printf("%15s ",a->start_place);
	   printf("%10s ",a->end_place);
	   printf(" %6d ",a->price);
	   printf("%8.2f ",a->discount );
	   printf("%5dn",a->count);
}
void prn(plane *p)//显示航班信息
{
	plane *a;
	a=p->next->next;
	 printf("---------------------------------------航班信息----------------------------------------------n");
	   printf("航班号  航班日期  航空公司  起飞时间     到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		while(a!=NULL)
	{
	     prn1(a);
	     a=a->next;
	}
		printf("-----------------------------------------------------------------------------------------------n");
}
void save(plane *p)//保存航班信息到文件
{
	FILE *fp;
	plane *a;
	a=p->next->next;
	if((fp=fopen("存航班.txt","w"))==NULL)
	{
		printf("没有该文件n");
		exit(0);
	}
	 fprintf(fp,"航班号  航班日期  航空公司   起飞时间     到达时间     起飞地点           目的地        票价      折扣     剩余数量n");
	 while(a!=NULL)
	 {
	 fprintf(fp,"%d ",a->num);
     fprintf(fp,"%10d月",a->d.month);
     fprintf(fp,"%d日 ",a->d.day);
	 fprintf(fp,"%8s ",a->company);
     fprintf(fp,"%10s时 ",a->start_time);
	 fprintf(fp,"%13s时 ",a->end_time );
	 fprintf(fp,"%17s ",a->start_place);
	 fprintf(fp,"%17s ",a->end_place);
	 fprintf(fp," %9d ",a->price);
	 fprintf(fp,"%9.2f ",a->discount );
	 fprintf(fp,"%5dn",a->count);
	 a=a->next;
	 }
	 fclose(fp);
}
void search_full(plane *a)//判断是否满仓
{
	if(a->count==0)
		printf("航班已经满仓n");
	else printf("航班未满仓n");
}
plane  *search_num(plane *a)//航班号查找
{
	int num;
	plane *x=NULL;
	printf("请输入航班号:");
	scanf("%d",&num);
	plane *p;
	p=a->next;
	while(p&&p->num!=num)//p不为空且p->num不等于num
		p=p->next;
	if(p)
	{
		printf("查到的航班信息n");
		printf("航班号  航班日期  航空公司  起飞时间     到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		prn1(p);
		search_full(p);
		x=p;
	}
	else printf("没有该航班n");

		return x;
}
void search_place(plane *a)//起飞地点,到达地点查找
{
		char m[10],n[10];
	printf("请输入起飞地点:");
	scanf("%s",&m);
	printf("请输入到达地点:");
	scanf("%s",&n);
	plane *p;
	p=a->next;
	while(p&&strcmp(p->start_place,m)!=0||strcmp(p->end_place,n)!=0)
		p=p->next;
	if(p)
	{
		printf("查到的航班信息n");
		printf("航班号  航班日期  航空公司  起飞时间    到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		prn1(p);
		search_full(p);
	}
	else printf("没有该票价的航班n");
}
void search_price(plane *a)//票价查找
{
	int num;
	printf("请输入你要查找的票价:");
	scanf("%d",&num);
	plane *p;
	p=a->next;
	while(p&&p->price!=num)
		p=p->next;
	if(p)
	{
		printf("查到的航班信息n");
		printf("航班号  航班日期  航空公司  起飞时间     到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		prn1(p);
		search_full(p);
	}
	else printf("没有该票价的航班n");
}
void search_discount(plane *a)//折扣查找
{
		float num;
	printf("请输入你要查找的折扣:");
	scanf("%f",&num);
	plane *p;
	p=a->next;
	while(p&&p->discount!=num)
		p=p->next;
	if(p)
	{
		printf("查到的航班信息n");
		printf("航班号  航班日期  航空公司  起飞时间     到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		prn1(p);
		search_full(p);
	}
	else printf("没有该票价的航班n");
}
void search_company(plane *a)//航空公司名查找
{
		char num[3];
	printf("请输入你要查找的公司名:");
	scanf("%s",&num);
	plane *p;
	p=a->next;
	while(p&&strcmp(p->company,num)!=0)
		p=p->next;
	if(p)
	{
		printf("查到的航班信息n");
		printf("航班号  航班日期  航空公司  起飞时间     到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		prn1(p);
		search_full(p);
	}
	else printf("没有该票价的航班n");
}
void search_time(plane *a)//起飞时间查找
{
	
		char m[3],n[3];
	printf("请输入起飞时间:");
	scanf("%s",&m);
	printf("请输入到达时间:");
	scanf("%s",&n);
	plane *p;
	p=a->next;
	while(p&&strcmp(p->start_time,m)!=0||strcmp(p->end_time,n)!=0)
		p=p->next;
	if(p)
	{
		printf("查到的航班信息n");
		printf("航班号  航班日期  航空公司  起飞时间    到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
		prn1(p);
		search_full(p);
	}
	else printf("没有该票价的航班n");
}
void search_menu()
{
	printf("请选择你的查询方式:n");
	printf("---------1.通过航班号查询-------------------n");
	printf("---------2.通过起飞城市和目的地查询---------n");
	printf("---------3.通过票价查询---------------------n");
	printf("---------4.通过折扣查询---------------------n");
	printf("---------5.通过航空公司查询-----------------n");
	printf("---------6.通过起飞时间和到达时间查询---------n");
	printf("按0退出查询系统n");
	printf("你的选择:");
}
void search_plane(plane *a)//航班查询
{
	int m;
	search_menu();
	plane *p;
	scanf("%d",&m);
	while(m!=0)
	{
	switch(m)
	{
	case 1:p=search_num(a);break;
	case 2:search_place(a);break;
	case 3:search_price(a);break;
	case 4:search_discount(a);break;
	case 5:search_company(a);break;
	case 6:search_time(a);break;
	}
	search_menu();
	scanf("%d",&m);
	}
}
void order(plane *a)//订票
{
	int m,n;
	a=search_num(a);
	if(a->count!=0)
	{
		printf("可以订票n");
			printf("订票请输入1n");
			scanf("%d",&m);
			if(m==1)
			{
				printf("输入你要订票的张数:n");
				scanf("%d",&n);
				if(n<=a->count)
				a->count=a->count-n;
				else printf("没有那么多票n");
			}
	else printf("不可以订票n");
}
}
void tuipiao(plane *a)//退票
{
	int m,n;
	a=search_num(a);
	printf("退票请输入1n");
		scanf("%d",&m);
			if(m==1)
			{
				printf("输入你要退票的张数:n");
				scanf("%d",&n);
				a->count=a->count+n;
			}
}
void changemenu()
{
		printf("------输入你要修改的信息:-------------n");
		printf("------1.修改航班号--------------------n");
		printf("------2.修改航空公司名----------------n");
		printf("------3.修改起飞地点和目的地----------n");
		printf("------4.修改起飞时间和到达时间--------n");
		printf("输入0退出修改系统n");
		printf("你的选择:n");
}
void changenum(plane *a)
{
	printf("请输入你要修改的航班号:n");
	scanf("%d",&a->num);
	printf("修改后的航班信息n");
	printf("航班号  航班日期  航空公司  起飞时间    到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
	prn1(a);
}
void changecompany(plane *a)
{
	printf("请输入你要修改的公司名:n");
	scanf("%s",&a->company);
		printf("修改后的航班信息n");
	printf("航班号  航班日期  航空公司  起飞时间    到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
	prn1(a);
}
void changeplace(plane *a)
{
	printf("请输入你要修改的起飞地点:n");
	scanf("%s",&a->start_place);
	printf("请输入你要修改的目的地:n");
	scanf("%s",&a->end_place);
	printf("修改后的航班信息n");
	printf("航班号  航班日期  航空公司  起飞时间    到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
	prn1(a);
}
void changetime(plane *a)
{
	printf("请输入你要修改的起飞时间:n");
	scanf("%s",&a->start_time );
	printf("请输入你要修改的到达时间:n");
	scanf("%s",&a->end_time );
	printf("修改后的航班信息n");
	printf("航班号  航班日期  航空公司  起飞时间    到达时间     起飞地点    目的地     票价    折扣   剩余数量n");
	prn1(a);
}
void change(plane *a)//修改代码
{
		int m;
	a=search_num(a);
	changemenu();
	scanf("%d",&m);
	while(m!=0)
	{
		switch(m)
		{
		case 1:changenum(a);break;
		case 2:changecompany(a);break;
		case 3:changeplace(a);break;
		case 4:changetime(a);break;
		}
		changemenu();
	scanf("%d",&m);
	}	
}
//乘客
//乘客代码
passenger *creat_passenger()//头插法建立乘客链表
{
	passenger *h,*a;
	FILE *fp;
	h=(passenger *)malloc(sizeof(passenger));
	h->next=NULL;
	if((fp=fopen("乘客信息.txt","r"))==NULL)
	{
		printf("没有文件n");
		exit(0);
	}
	while(!feof(fp))
	{
	  a=(passenger *)malloc(sizeof(passenger));
	  fscanf(fp,"%s",&a->name);
      fscanf(fp,"%d",&a->id);
      fscanf(fp,"%d",&a->amount);
	  fscanf(fp,"%d",&a->num_d);
	  a->next=h->next;
	  h->next=a;
	}
	fclose(fp);
	return h;
}
void prn_passenger1(passenger *a)
{
	printf("%s ",a->name);
       printf("%6d",a->id);
       printf("%5d ",a->amount);
	   printf("%9d ",a->num_d);
}
void prn_passenger(passenger *p)
{
	passenger *a;
	a=p->next->next;
	 printf("---------------------乘客信息-----------------------n");
	   printf("姓名    ID     所定票数   所定航班号n");
		while(a!=NULL)
	{
	     prn_passenger1(a);
	     a=a->next;
		 printf("n");
	}
		printf("-------------------------------------------------n");
}
void search_passengermenu()
{
	printf("请选择你的查询方式:n");
	printf("---------1.通过姓名查询-------------------n");
	printf("---------2.通过ID查询---------n");
	printf("按0退出查询系统n");
	printf("你的选择:");
}
void search_name(passenger *a)//通过姓名查找乘客
{
		char num[5];
	printf("请输入你要查找的姓名:");
	scanf("%s",&num);
	passenger *p;
	p=a->next;
	while(p&&strcmp(p->name,num)!=0)
		p=p->next;
	if(p)
	{
		printf("查到的乘客信息n");
		printf("姓名    ID     所定票数   所定航班号n");
		prn_passenger1(p);
		   printf("n");
	}
	else printf("没有该乘客信息n");
}
void search_id(passenger *a)//通过id查找乘客
{
		int num;
	printf("请输入你要查找的ID:");
	scanf("%d",&num);
	passenger *p;
	p=a->next;
	while(p&&p->id!=num)
		p=p->next;
	if(p)
	{
		printf("查到的乘客信息n");
		printf("姓名    ID     所定票数   所定航班号n");
		prn_passenger1(p);
		printf("n");
	}
	else printf("没有该乘客信息n");
}
void search_passenger(passenger *a)
{
	int m;
	search_passengermenu();
	scanf("%d",&m);
	while(m!=0)
	{
		switch(m)
		{
		case 1:search_name(a);break;
		case 2:search_id(a);break;
		}
	search_passengermenu();
	scanf("%d",&m);
	}
}
//订单导入
passenger *creat_order()
{
	passenger *h,*a;
	FILE *fp;
	h=(passenger *)malloc(sizeof(passenger));
	h->next=NULL;
	if((fp=fopen("订单信息.txt","r"))==NULL)
	{
		printf("没有文件n");
		exit(0);
	}
	while(!feof(fp))
	{
	  a=(passenger *)malloc(sizeof(passenger));
	  fscanf(fp,"%d",&a->bh);
	  fscanf(fp,"%s",&a->name);
      fscanf(fp,"%d",&a->id);
      fscanf(fp,"%d",&a->amount);
	  fscanf(fp,"%d",&a->num_d);
	  a->next=h->next;
	  h->next=a;
	}
	fclose(fp);
	return h;
}
void prn_order(passenger *p)
{
		passenger *a;
	a=p->next->next;
		printf("---------------订单信息-------------n");
	printf("编号  姓名      ID     所定票数   所定航班号n");
	while(a!=NULL)
	{
	    printf("%d",a->bh );
		printf("%9s ",a->name);
       printf("%10d",a->id);
       printf("%6d ",a->amount);
	   printf("%10d n",a->num_d);
	   a=a->next;
	}
	printf("n");
}
void menu()
{
    printf("===================航班订票系统=========================n");
    printf("tt1.录入航班信息.n");
    printf("tt2.修改航班信息.n");
    printf("tt3.存储航班信息.n");
	printf("tt4.查询航线情况.n");
	printf("tt5.订票.n");
	printf("tt6.退票.n");
	printf("tt7.订单导入n");
	printf("tt8.客户资料.n");
	printf("tt9.客户资料查询.n");
    printf("====================================================n");
    printf("Your option:");
}
void main()
{
	plane *a;
	passenger *p,*q;
	int op;
	menu();
	scanf("%d",&op);
	while(op!=0)
	{
		switch(op)
		{
		case 1:a=loadin();prn(a);break;
		case 2:change(a);prn(a);break;
		case 3:save(a);break;
		case 4:search_plane(a);break;
		case 5:order(a);prn(a);break;
		case 6:tuipiao(a);prn(a);break;
		case 7:q=creat_order();prn_order(q);break;
		case 8:p=creat_passenger();prn_passenger(p);break;
		case 9:search_passenger(p);break;
		}
		menu();
	    scanf("%d",&op);
	}
}

 航班表文件如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925851.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号