⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 订票系统.cpp

📁 航空订票系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<malloc.h>
#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>

typedef struct airticket  //建立航班数组结构
{	
    int air_num;//航班号
	char day[50];//起飞日期
    char time[50];//起飞时间
    int count;//每航班的机票总数
	char start[50];//起飞地点
	char ends[50];//抵达地点
	int left;//机票余量
	struct airticket *next;//指针
}airticket;
typedef struct customer
{
	int air_num;//航班号
	char IDcard[25];//客户身份证号
	int ticket_num;//每个客户所订的机票数
	char name[8];    //客户姓名
	struct customer *next;//指针
}customer;

airticket * head=NULL;
customer *head1=NULL;
int menu();//输出函数

int menu()
{
	int code;
	printf("\n*****************菜单**********************\n");
	printf("\n1.  订票\n");
	printf("\n2.  退票\n");
	printf("\n3.  删除航班信息\n");
	printf("\n4.  新增航班信息\n");
	printf("\n5.  查询航线信息\n");
	printf("\n6.  修改航线信息\n");
	printf("\n7.  浏览所有航班信息\n");
	printf("\n8.  浏览所有客户信息\n");
	printf("\n0.  退出\n");
	printf("\n请选择你要执行的操作:\n");
	scanf("%d",&code);
	return code;
}

customer *Create_cus(customer *head1)//建立客户链表
{
	head1=(customer *)malloc(sizeof(customer));
	head1->next=NULL;
	return head1;
}
customer *Insert_cus(customer *head1)//插入客户数据
{
	customer *p;
	p=(customer *)malloc(sizeof(customer));
	printf("\n请输入您的姓名:\n");
	scanf("%s",p->name);
	printf("\n请输入您的身份证:\n");
	scanf("%s",p->IDcard);
	p->next=head1->next;
	head1->next=p;
	return head1;
}

airticket * Create(airticket *head)//建立航班链表信息
{
	airticket *L;
	airticket * p;
	int n,i;
	L=(airticket *)malloc(sizeof(airticket));
	L->next=NULL;
	printf("**********   航空订票系统演示   **********\n");
	printf("\n内存没有数据,请先创建航班信息!\n");
	printf("\n请输入您要创建的航班信息个数:\n");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		
		p=(airticket *)malloc(sizeof(airticket));
		printf("\n请输入第%d个信息,共%d个信息\n",i+1,n);
		printf("\n航班号:\n");
		scanf("%d",&p->air_num);
		printf("\n日期:\n");
		scanf("%s",p->day);
		printf("\n时间: \n");
		scanf("%s",p->time);
		printf("\n总票数: \n");
		scanf("%d",&p->count); 
		p->left=p->count;
		printf("\n起点:\n");
		scanf("%s",p->start);
		printf("\n终点:\n");
		scanf("%s",p->ends);
		p->next=L->next;
		L->next=p;
	}
	printf("\n航班信息建立完毕!\n\n");
    head=L;
    return head;
	
}

airticket * Del_airticket(airticket *head)//删除航班信息
{
	int air_num;
	int m;
	airticket *p;
	customer *q;
	customer *a;
	airticket *b;
	a=head1;
	b=head;
	q=head1->next;
	p=head->next;
	printf("\n请输入您要删除的航班的航班号:\n");
	scanf("%d",&air_num);
	while(p!=NULL)
	{
		if(p->air_num==air_num)
		{
			printf("\n您要删除的航班为:\n");
			printf("\n*********************************************************************\n");
			printf("航班号  起飞日期   起飞时间  起飞地点   抵达地点   总票数   余票数\n");
			printf("\n%-6d  %-10s %-9s %-10s %-10s %-8d %-6d\n",p->air_num,p->day,p->time,p->start,p->ends,p->count,p->left);
			while(q!=NULL)
			{
				if(q->air_num==p->air_num)
				{
					printf("\n您要删除的航班已有客户订票,是否连同客户信息一起删除?\n");
					printf("\n是请按任意键,否请按0.\n");
					scanf("%d",&m);
					if(m!=0)
					{
						a->next=q->next;
						b->next=p->next;
					}
					b->next=p->next;
				}
				if(q->air_num!=p->air_num&&q->next==NULL)
					b->next=p->next;
				q=q->next;a=a->next;
			}
			printf("\n删除成功!\n");
			return head;break;
		}
		if(p->air_num!=air_num&&p->next==NULL)
			printf("\n没有您要的信息!\n");
		p=p->next;b=b->next;
	}
	return head;
}
airticket *Add_airticket(airticket *head)//插入新航班信息
{
	airticket *q;
	q=(airticket *)malloc(sizeof(airticket));
	printf("\n请输入新航班号:\n");
	scanf("%d",&q->air_num);
	printf("\n请输入新航班起飞日期:\n");
	scanf("%s",q->day);
	printf("\n请输入新航班起飞时间:\n");
	scanf("%s",q->time);
	printf("\n请输入新航班起飞地点:\n");
	scanf("%s",q->start);
	printf("\n请输入新航班抵达地点:\n");
	scanf("%s",q->ends);
	printf("\n请输入新航班的总票数:\n");
	scanf("%d",&q->count);
	q->left=q->count;
	q->next=head->next;
	head->next=q;
	printf("\n添加新航班信息成功!\n");
	return head;
}

void dingpiao(airticket *head)//订票
{	
	airticket *a;
	customer *b;
	char start[50];
    char ends[50];
	int air_num;
	int ticket_num;
	int n=1;
	b=(customer *)malloc(sizeof(customer));
	a=head->next;
	printf("\n请您选择要乘坐的航线!\n");
	printf("\n输入您要的起点站:\n");
	scanf("%s",start);
	printf("\n请输入您要的终点站:\n");
	scanf("%s",ends);
	while(a!=NULL)
	{
		if((strcmp(a->start,start)!=0||strcmp(a->ends,ends)!=0)&&a->next==NULL)
		{
			printf("\n没有您要的航班!\n");
			return;
		}
		if(strcmp(a->start,start)==0&&strcmp(a->ends,ends)==0)
		{
			printf(
				"\n请输入您要订票的航班号:\n");
			scanf("%d",&air_num);
			if(a->air_num!=air_num&&a->next==NULL)
			{
				printf("\n没有您要的航班!\n");
				return;
			}
			if(a->air_num==air_num)
			{
				if(a->left==0)
				{
					printf("\n您要的航班座位已满!\n");
					return;
				}
				head1=Insert_cus(head1);//调用插入客户信息函数
				b=head1->next;
				printf("\n请输入您要订的票数:\n");
				scanf("%d",&ticket_num);
				for(;n!=0;)
				{
					if(ticket_num>a->left)
					{
						printf("\n您输入的票数超过了该航班现有的余票数,请您重新输入!!!\n");
						printf("\n请输入您要订的票数:\n");
						scanf("%d",&ticket_num);
						if(ticket_num<=a->left)
							n=0;
					}
					else
						n=0;
					
				}
				b->ticket_num=ticket_num;
				b->air_num=a->air_num;	
				a->left=a->left-b->ticket_num;
				printf("\n您已成功订票!\n"); 
				return;
			}
		}
		a=a->next;
	}
}
void show(airticket *head)//显示所有航班信息
{
	airticket *tail;
	tail=head->next;
	if(!tail)
	{
		printf("\n没有航班信息!\n");
		return;
	}
	printf("\n以下为所有航班信息!\n\n");
	printf("*********************************************************************\n");
	printf("航班号  起飞日期     起飞时间  起飞地点  抵达地点  总机票数  余机票数\n");
	while(tail!=NULL)
	{
		printf("\n%-7d %-12s %-9s %-9s %-9s %-9d %-8d\n",tail->air_num,tail->day,tail->time,tail->start,tail->ends,tail->count,tail->left); 
		tail=tail->next;
	}
}
void show_cus(customer *head1)//显示所有客户信息
{
	customer *tail;
	tail=head1->next;
	if(!tail)
	{
		printf("\n没有客户信息!\n");
		return;
	}
	printf("\n以下为所有客户信息!\n\n");
	printf("*********************************************************************\n");
	printf("客户姓名  身份证号           航班号  所订票数\n");
	while(tail!=NULL)
	{
		printf("\n%-9s %-19s %-7d %-8d\n",tail->name,tail->IDcard,tail->air_num,tail->ticket_num);	
		tail=tail->next;
	}
}


void tuipiao(airticket *head)//退票
{
	customer *tail; 
	airticket *p;
	customer *q;
	int air_num;
	int x;
	int n=1;
	char name[8];
	char IDcard[25];
	tail=head1->next;
	p=head->next;
	q=head1;
	if(tail==NULL)
	{
		printf("\n数据为空!\n");return;
	}
	if(p==NULL)
		{
			printf("\n数据为空!\n");return;
		}
	printf("\n请输入想退机票的航班号:\n");
	scanf("%d",&air_num);
	while(tail!=NULL)
	{	
		if(tail->air_num!=air_num&&tail->next==NULL)
		{
			printf("\n没有找到您要退票的航班!\n");
			return;
		}
		if(tail->air_num==air_num)
		{
			n=1;
			printf("\n请输入您的姓名:\n");
			scanf("%s",name);
			printf("请输入您的身份证号:\n");
			scanf("%s",IDcard);
			while(n!=0)
			{
				if((strcmp(tail->name,name)!=0||strcmp(tail->IDcard,IDcard)!=0)&&tail->next==NULL)
					printf("\n没有您的资料,您不能执行退票操作!\n");
				if(strcmp(tail->name,name)==0&&strcmp(tail->IDcard,IDcard)==0)
				{
					printf("\n您信息为:\n");
					printf("\n********************************************************************\n");
					printf("姓名  身份证号            乘坐航班号  已订票数\n");
					printf("\n%-6s %-19s %-11d %-5d\n",tail->name,tail->IDcard,tail->air_num,tail->ticket_num);
					printf("\n请输入您要退的机票数:\n");
					scanf("%d",&x);
					if(x>tail->ticket_num)
					{
						printf("\n您输入的退票数超过了您已订的票数,请您重新输入:\n");
						scanf("%d",&x);
					}
					while(p!=NULL)
					{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -