飞机订票系统(文档)

1.功能介绍

1.显示各航班信息(1,显示航班信息。2,显示客户信息)
2.查询各航班信息 (1,航班号查询。2,出发城市查询。3,终点城市查询。)
3.订 票 (如果没有相关航班,则提供其他选项)
4.退 票
5.修改各航班信息 (1,增加航班。2,删除航班。3,修改航班信息)

2.代码

//使用链表完成系统,航班信息一个链表,乘客信息一个链表// 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char tep[500];char title[500];
//乘客信息结构体// 
struct passenger
{
	char airnum[8];//航班号
	char name[20];//客户姓名 
	char DID[6];//身份证号 
	int  amount;//订票数量
	struct passenger *next;//指向下一个结点// 
};
//航班信息结构体// 
struct airplane
{
	char air[8];//航班号
	char start[6];//出发地
	char end[6];//目的地
	char sche[6];//飞行日
	char time1[8];//出发时间
	char time2[8];//到达时间
	char mode[5];//机型
	int  price;//票价
	int  full;//乘客定额
	int  remain;//余票
	struct airplane *front;//指向下一个结点//
};
//读取航班信息//
struct airplane *readair(struct airplane *a)
{
	struct airplane *r=NULL;
	FILE *fp;//定义文件指针
	a=(struct airplane *)malloc(sizeof(struct airplane));
	a->front=NULL;
	if ((fp = fopen("航班信息.txt", "r")) == NULL)
		printf("航班文件不存在 \n");
	else
	{   
		fgets(tep, 500, fp);//读取第一行说明:航班号  起点  终点 略..;
		while (!feof(fp))//如果文件没有读取结束,继续读取// 
		{
			r=(struct airplane *)malloc(sizeof(struct airplane));
			//读取正确的信息;
			fscanf(fp,"%s%s%s%s%s%s%s%d%d%d",&r->air,&r->start,&r->end,&r->sche,&r->time1,&r->time2,&r->mode,&r->price,&r->full,&r->remain);
			r->front=a->front;
			a->front=r;
		}
	}
	fclose(fp);
	return a;	
}
//读取乘客信息// 
struct passenger *readpassenger(struct passenger *p)
{
	struct passenger *r=NULL;
	FILE *fp;//定义文件指针
	p=(struct passenger *)malloc(sizeof(struct passenger));
	p->next=NULL;
	if ((fp = fopen("乘客信息.txt", "r")) == NULL)  //以只读的方式打开
		printf("乘客信息.txt文件不存在 \n");
	else
	{
		fgets(title, 500, fp);
		while (!feof(fp))  //C提供了一个测试文件状态的函数feof(pf),当文件未结束时feof函数的值为0,否则为非0值。使用函数feof来判断文件是否结束既可用于文本文件,还可用于二进制文件
		{
			r=(struct passenger *)malloc(sizeof(struct passenger));
			fscanf(fp,"%s%s%s%d",&r->airnum,&r->name,&r->DID,&r->amount);
			r->next=p->next;
			p->next=r;
		}
	}
	fclose(fp);
	return p;
}
//显示所有航班信息//
void showair(struct airplane *a)
{
	struct airplane *r=NULL;
	int t=0;
	r=a->front;
	printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
	while(r!=NULL)
	{
		printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\t%d\t%d\t\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
		r=r->front;
		t=1;
	}
	if(t==0)
		printf("没有航班!\n");
	printf("\n");
}
//显示所有客户信息//
int showpassenger(struct passenger *p) 
{
	struct passenger *r=NULL;
	int s,t;
	int q=0;
	printf("显示内容涉及隐私\n");
	while(1)
	{
		printf("请输入密码:");
		scanf("%d",&t);
		if(t==123)
		{
			printf("密码正确\n");
			break;
		}
		else
		{
			printf("密码错误\n");
			printf("请选择1.放弃,返回;2.重新输入密码;\n");
			printf("请输入选项(点击任意键,继续输入密码):");
			scanf("%d",&s);
			switch(s)
			{
				case 1:
					return 0;
				default:
					break;
			}
		}
	}
	r=p->next;
	printf("航班号\t客户姓名\t身份证号\t订票数量\n");
	while(r!=NULL)
	{
		printf("%s\t%s\t\t%s\t\t%d\r\n",r->airnum,r->name,r->DID,r->amount);
		r=r->next;
		q=1;
	}
	if(q==0)
		printf("没有客户!\n");
	printf("\n");
	return 0;	
}
int show(struct airplane *a,struct passenger *p)
{
	int i;
	while(1)
	{
		printf("\n\n");
		printf("*        显示各航班信息       *\n");
		printf("*     1.显示所有航班信息      *\n");
		printf("*     2.显示所有客户信息      *\n");
		printf("*     3.返回主菜单            *\n");
		printf("*请输入选项:");
		scanf("%d",&i);
		switch(i)
		{
			case 1:
				showair(a);
				break;
			case 2:
				showpassenger(p);
				break;
			case 3:
				return 0;
			default :
				printf("输入选项非法,请重新输入!\n");
				break;
		}
	}
}
//按航班号查询//
int findair(struct airplane *a)
{
	int i,t;
	struct airplane *r=NULL;
	char s[8];
	char c;
	while(1)
	{
		r=a->front;
		printf("请输入已知航班号:");
		gets(s);
		t=0;
		while(r!=NULL)
		{
			if(strcmp(r->air,s)==0)
			{
				t=1;
				printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
				printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\t%d\t%d\t\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
				break;
			}
			else
				r=r->front;
		}
		if(t==0)
			printf("没有查询到此航班的信息!\n");
		printf("请选择  1.继续查询;2.退出;\n");
		printf("请输入选项(点击任意键,继续查询):");
		scanf("%d",&i);
		c=getchar();
		switch(i)
		{
			case 2:
				return 0;
			default :
				break;
		}
	}
	
}
//按出发城市查询//
int findstart(struct airplane *a)
{
	int i,t;
	struct airplane *r=NULL;
	char s[6];
	char c;
	while(1)
	{	
		r=a->front;
		printf("请输入出发城市:");
		gets(s);
		t=0;
		while(r!=NULL)
		{
			if(strcmp(r->start,s)==0)
			{
				if(t==0)
				{
					printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
					t=1;
				}	
				printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
				r=r->front;
			}
			else
				r=r->front;
		}
		if(t==0)
			printf("没有查询到此航班的信息!\n");
		printf("请选择  1.继续查询;2.退出;\n");
		printf("请输入选项(点击任意键,继续查询):");
		scanf("%d",&i);
		c=getchar();
		switch(i)
		{
			case 2:
				return 0;
			default :
				break;
		}
	}
}
//按终点城市查询// 
int findend(struct airplane *a)
{
	int i,t;
	struct airplane *r=NULL;
	char s[6];
	char c;
	while(1)
	{
		r=a->front;
		printf("请输入终点城市:");
		gets(s);
		t=0;
		while(r!=NULL)
		{
			if(strcmp(r->end,s)==0)
			{
				if(t==0)
				{
					printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
					t=1;
				}	
				printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
				r=r->front;
			}
			else
				r=r->front;
		}
		if(t==0)
			printf("没有查询到此航班的信息!\n");
		printf("请选择  1.继续查询;2.退出;\n");
		printf("请输入选项(点击任意键,继续查询):");
		scanf("%d",&i);
		c=getchar();
		switch(i)
		{
			case 2:
				return 0;
			default :
				break;
		}
	}
}
int find(struct airplane *a)
{
	int i;
	char c;
	while(1)
	{
		printf("*    请选择查询方式:   *\n");
		printf("   1.已知航班号查询;   \n");
		printf("   2.已知出发地查询;   \n");
		printf("   3.已知目的地查询;   \n");
		printf("   4.返回主菜单         \n");
		printf("请输入选项:");
		scanf("%d",&i);
		c=getchar();
		switch(i)
		{
			case 1:
				findair(a);
				break;
			case 2:
				findstart(a);
				break;
			case 3:
				findend(a);
				break;
			case 4:
				return 0;
			default:
				printf("输入选项不存在,请重新输入!\n");
				break;
		} 
	}	
}
//保存修改的航班信息到文本//
void saveairplane(struct airplane *a)
{
	struct airplane *r=NULL;
	FILE *fp;//定义文件指针
	r=a->front;
	fp=fopen("航班信息1.txt","w+");
	fputs(tep,fp);
	while(r!=NULL)
	{
		fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
		r=r->front;
	}
	fclose(fp);
}
//保存修改的乘客信息到文本// 
void savepassenger(struct passenger *p)
{
	struct passenger *r=NULL;
	FILE *fp;
	r=p->next;
	fp=fopen("乘客信息1.txt","w+");
	fputs(title,fp);
	while(r!=NULL)
	{
		fprintf(fp,"\n%s\t%s\t%s\t%d",r->airnum,r->name,r->DID,r->amount);
		r=r->next;
	}
	fclose(fp);
}
//订票//
struct passenger *reserve(struct airplane *a,struct passenger *p)
{
	int i,t,k,flag=1;
	char c;
	struct passenger *q=NULL;
	struct airplane *r=NULL,*f=NULL;
	while(1)
	{
		r=a->front;
		f=a->front;
		if(flag)
			q=(struct passenger *)malloc(sizeof(struct passenger));	
		printf("请输入航班号:");
		gets(q->airnum);
		t=0;
		while(r!=NULL)
		{
			if(strcmp(r->air,q->airnum)==0)
			{
				t=1;
				printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
				printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\t%d\t%d\t\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
				if(r->remain<=0)
				{
					printf("此航班没有余票\n");
					t=0;
					break;
				}
				printf("请输入订票数量:");
				scanf("%d",&q->amount);
				c=getchar();
				while(q->amount>r->remain)
				{
					printf("余票不足!请重新订票!\n");
					printf("请输入订票数量:");
					scanf("%d",&q->amount);
					c=getchar();
				}
				r->remain=r->remain-q->amount;
				saveairplane(a);
				printf("请输入姓名:");
				gets(q->name);
				printf("请输入身份证号:");
				gets(q->DID);
				q->next=p->next;
				p->next=q;
				printf("订票成功!\n");
				flag=1;
				savepassenger(p);
				break;
			}
			else
				r=r->front;
		}
		if(t==0)
		{
			k=0;
			flag=0;
			printf("没有查询到有用的信息!\n");
			printf("为你提供其他航班:\n");
			printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
			while(f!=NULL)
			{
				if(f->remain>0)
				{	
					printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\t%d\t%d\t\t%d\r\n",f->air,f->start,f->end,f->sche,f->time1,f->time2,f->mode,f->price,f->full,f->remain);
					k=1;
				}
				f=f->front;
			}
			if(k==0)
				printf("对不起,没有可用航班!\n");
		}
		printf("请选择  1.继续订票;2.退出;\n");
		printf("请输入选项(点击任意键,继续查询):");
		scanf("%d",&i);	
		c=getchar();
		switch(i)
		{
			case 2:
				return p;
			default :
				break;
		}
	}
	
}
//退票// 
struct passenger *recede(struct passenger *p,struct airplane *a)
{
	int t=1,k;
	struct airplane *w=NULL;
	struct passenger *r=NULL,*q=NULL;
	char s[20];
	q=p;
	r=q->next;
	w=a->front;
	printf("请输入姓名:");
	gets(s);
	while(r!=NULL)
	{
		if(strcmp(r->name,s)==0)
		{
			printf("请核实信息!\n");
			printf("航班号\t客户姓名\t身份证号\t订票数量\n");
			printf("%s\t%s\t%s\t%d\r\n",r->airnum,r->name,r->DID,r->amount);
			printf("1.确定退票;2.退出\n");
			printf("请输入选项(按任意键退出):");
			scanf("%d",&k);
			switch(k)
			{
				case 1:
					while(w!=NULL)
					{
						if(strcmp(r->airnum,w->air)==0)
						{
							w->remain=w->remain+r->amount;
							break;
						}
						w=w->front;
					}
					q->next=r->next;
					free(r);
					printf("退票成功!\n");
					savepassenger(p);
					saveairplane(a);
					break;
				default :
					return p;
			}
			t=0;
			break;
		}
		q=q->next;
		r=q->next;
	}
	if(t)
		printf("您没有订票!\n"); 
	return p;
}
//增加航班//
struct airplane *add(struct airplane *a)
{
	char c;int i;
	struct airplane *r=NULL;
	while(1)
	{
		r=(struct airplane *)malloc(sizeof(struct airplane));
		printf("请输入航班号:");
		gets(r->air);
		printf("起点:");
		gets(r->start);
		printf("终点:");
		gets(r->end);
		printf("飞行日:");
		gets(r->sche);
		printf("起飞时间:");
		gets(r->time1);
		printf("到达时间:");
		gets(r->time2);
		printf("机型:");
		gets(r->mode);
		printf("价格:");
		scanf("%d",&r->price);
		printf("乘员定额:");
		scanf("%d",&r->full);
		printf("余票量:");
		scanf("%d",&r->remain);
		r->front=a->front;
		a->front=r;
		saveairplane(a);
		printf("航班添加完成!\n");
		printf("请选择:1.继续增加航班。2.退出!\n");
		printf("请输入选项(点击任意键继续增加航班):");
		scanf("%d",&i);
		c=getchar();
		switch(i)
		{
			case 2:
				return a;
			default :
				break;
		}
	}
	
}
//删除航班//
struct airplane *Remove(struct airplane *a)
{
	int t=1,k;
	struct airplane *r=NULL,*q=NULL;
	char s[8];
	char c;
	while(1)
	{
		printf("为你显示所有航班信息:\n");
		showair(a);
		q=a;
		r=q->front;
		printf("请输入航班号:");
		gets(s);
		while(r!=NULL)
		{
			if(strcmp(r->air,s)==0)
			{
				printf("请核实信息!\n");
				printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
				printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\t%d\t%d\t\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
				printf("1.确定删除航班;2.退出\n");
				printf("请输入选项(按任意键退出):");
				scanf("%d",&k);
				c=getchar();
				switch(k)
				{
					case 1:
						q->front=r->front;
						free(r);
						printf("航班删除成功!\n");
						saveairplane(a);
						return a;
					default :
						return a;
				}
			}
			q=q->front;
			r=q->front;
		}
		if(t)
			printf("航班号输入错误!");
	}
}	
//修改航班信息// 
struct airplane *recompose(struct airplane *a)
{
	int t=1,k;
	char c;
	struct airplane *r=NULL,*q=NULL,*m=NULL;
	char s[8];
	while(1)
	{
		printf("为你显示所有航班信息:\n");
		showair(a);
		q=a;
		r=q->front;
		printf("请输入航班号:");
		gets(s);
		while(r!=NULL)
		{
			if(strcmp(r->air,s)==0)
			{
				printf("航班号\t起点\t终点\t飞行日\t起飞时间\t到达时间\t机型\t价格\t乘员定额\t余票量\n");
				printf("%s\t%s\t%s\t%s\t%s\t\t%s\t\t%s\t%d\t%d\t\t%d\r\n",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
				m=(struct airplane *)malloc(sizeof(struct airplane));
				printf("请输入新信息:\n");
				printf("航班号:");
				gets(m->air);
				printf("起点:");
				gets(m->start);
				printf("终点:");
				gets(m->end);
				printf("飞行日:");
				gets(m->sche);
				printf("起飞时间:");
				gets(m->time1);
				printf("到达时间:");
				gets(m->time2);
				printf("机型:");
				gets(m->mode);
				printf("价格:");
				scanf("%d",&m->price);
				printf("乘员定额:");
				scanf("%d",&m->full);
				printf("余票量:");
				scanf("%d",&m->remain);
				printf("1.确定修改信息;2.退出\n");
				printf("请输入选项(按任意键退出):");
				scanf("%d",&k);
				c=getchar();
				switch(k)
				{
					case 1:
						m->front=r->front;
						q->front=m;
						free(r);
						printf("信息修改成功!\n");
						saveairplane(a);
						return a;
					default :
						return a;
				}
			}
			q=q->front;
			r=q->front;
		}
		if(t)
			printf("航班号输入错误!");
	}
}
struct airplane *adjust(struct airplane *a)
{
	struct airplane *r=NULL;
	int s,t;char c;
	int q=0;
	printf("修改航班信息需要权限\n");
	while(1)
	{
		printf("请输入密码:");
		scanf("%d",&t);
		if(t==123)
		{
			printf("密码正确\n");
			break;
		}
		else
		{
			printf("密码错误\n");
			printf("请选择1.放弃,返回;2.重新输入密码;\n");
			printf("请输入选项(点击任意键,继续输入密码):");
			scanf("%d",&s);
			switch(s)
			{
				case 1:
					return a;
				default:
					break;
			}
		}
	}
	while(1)
	{
		printf("*    航班信息修改目录    *\n");
		printf("*    1.增加航班          *\n");
		printf("*    2.删除航班          *\n");
		printf("*    3.修改航班信息      *\n");
		printf("*    4.返回主菜单        *\n");
		printf("请输入选项:");
		scanf("%d",&s);
		c=getchar();
		switch(s)
		{
			case 1:
				a=add(a);
				break;
			case 2:
				a=Remove(a);
				break;
			case 3:
				a=recompose(a);
				break;
			case 4:
				return a;
			default :
				printf("输入错误选项请重新输入!\n");
				break;
		}
	}	
		
}
int main()
{
	int e;
	char c;
	struct airplane *a=NULL;
	struct passenger *p=NULL;
	a=readair(a);//读取航班信息// 
	p=readpassenger(p);//读取乘客信息//
	while (1)
	{  
		printf("*     欢迎进入航班订票系统\n");
		printf("*****************************\n");
		printf("*       航空订票客运系统    *\n");
		printf("*      1.显示各航班信息     *\n");//1,显示航班信息。2,显示客户信息// 
		printf("*      2.查询各航班信息     *\n");//1,航班号查询。2,出发城市查询。3,终点城市查询。// 
		printf("*      3.订          票     *\n");//如果没有相关航班,则提供其他选项// 
		printf("*      4.退          票     *\n");
		printf("*      5.修改各航班信息     *\n");//1,增加航班。2,删除航班。3,修改航班信息// 
		printf("*      6.退  出  系  统     *\n");
		printf("*****************************\n");
		printf("请输入你的选择:");
		scanf("%d",&e);
		c=getchar();
		switch(e)
		{
			case 1:
				show(a,p);
				break;
			case 2:
				find(a);
				break;
			case 3:
				p=reserve(a,p);
				break;
			case 4:
				p=recede(p,a);
				break;
			case 5:
				a=adjust(a);
				break;
			case 6:
				return 0;
			default:
				printf("输入的选项错误,请重新输入!\n");
				break;
			}
				
		}	
}

3.辅助文档


4.运行界面

posted @ 2021-05-12 10:18  咸豆腐脑棒  阅读(307)  评论(0编辑  收藏  举报