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

📄 订票系统.cpp

📁 依照订票的实际流程
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define null 0

typedef struct node
{
	char start[20],termini[20],number[10];
	int price,maxtickets,startyear,startmonth,startday,starthour,startminute,arriveyear,arrivemonth,arriveday,arrivehour,arriveminute;
	float discount;
	struct node *next;
}flight;//定义航班结构体,包含起始地,航班编号,票价,起降时间,折扣

typedef struct node1
{
	char name[20],id[20],flightnum[20];
	int count,NO;
	struct node1 *next;
}passenger;//定义客户结构体,包含姓名,证件号码,以及预定的航班编号

flight *input()//录入航班信息的子函数
{
	flight *h,*p,*t;
	int choice;
	h=(flight*)malloc(sizeof(flight));
	h->next=null;
	t=h;
	do
	{
		p=(flight*)malloc(sizeof(flight));
		printf("请输入航班编号:");
		fflush(stdin);
		gets(p->number);
		printf("请输入该航班起飞时间:");
		fflush(stdin);
		printf(" 年  月  日  时  分\n");
 		scanf("%d %d %d %d %d",&p->startyear,&p->startmonth,&p->startday,&p->starthour,&p->startminute);
		printf("请输入该航班抵达时间:");
		fflush(stdin);
		printf(" 年  月  日  时  分\n");
		scanf("%d %d %d %d %d",&p->arriveyear,&p->arrivemonth,&p->arriveday,&p->arrivehour,&p->arriveminute);
		printf("请输入出发城市:");
		fflush(stdin);
		gets(p->start);
		printf("请输入抵达城市:");
		fflush(stdin);
		gets(p->termini);
		printf("请输入该航班原始票价:");
		fflush(stdin);
		scanf("%d",&p->price);
		printf("该票价的折扣为X折:\n");
		fflush(stdin);
		scanf("%f",&p->discount);
		printf("请输入票数:");
		fflush(stdin);
		scanf("%d",&p->maxtickets);
		p->next=null;
		t->next=p;
		t=p;
		printf("继续录入另一航班信息? 1.是 2.否");
		fflush(stdin);
		scanf("%d",&choice);
	}
	while(choice==1);
	return(h);
}

void inquire(flight *h)//查询航班信息的子函数
{
	int choice,c,flag=0;
    int k;
	float g,v; 
	flight *p;
	p=h->next;
	char temp[20],t[20];
	do
	{
	printf("请选择查询方式:\n1.按航班号 2.按起飞城市和按抵达城市\n");
	fflush(stdin);
	scanf("%d",&choice);
	switch(choice)
	{
	case 1:printf("请输入要查询的航班号:");
		fflush(stdin);
		gets(temp);
		while(p!=null)
		{
			if(strcmp(p->number,temp)==0)
				break;//若输入的航班编号与航班单链表中的航班编号匹配,则找到,退出循环
			p=p->next;
		}
		if(p==null)
			printf("未找到您想查询的航班!\n");
		else
		{
			printf("%s号航班信息如下:\n",p->number);
			printf("起飞时间为:%d年%d月%d日%d时%d分\n",p->startyear,p->startmonth,p->startday,p->starthour,p->startminute);
			printf("抵达时间为:%d年%d月%d日%d时%d分\n",p->arriveyear,p->arrivemonth,p->arriveday,p->arrivehour,p->arriveminute);
			printf("起飞城市为:%s\n",p->start);
			printf("抵达城市为:%s\n",p->termini);
		    k=p->price;
			g=p->discount;
			v=k*g*0.1;
			printf("原始票价为%d元,打%.1f折,折后价为%.1f元。\n",p->price,p->discount,v);
			printf("可出售票%d张\n",p->maxtickets);//输出找到的航班信息
		}break;
	case 2:printf("请输入起飞城市:");
		fflush(stdin);
		gets(temp);
		printf("请输入抵达城市:");
		fflush(stdin);
		gets(t);
		while(p!=null)
		{
			if((strcmp(p->start,temp)==0)&&(strcmp(p->termini,t)==0))//若输入的起始地与航班单链表中的航班信息匹配,则找到,退出循环
			{
			  printf("起飞城市为%s,抵达时间为%s的航班信息如下\n",p->start,p->termini);
			  printf("航班号为:%s\n",p->number);
			  printf("起飞时间为:%d年%d月%d日%d时%d分\n",p->startyear,p->startmonth,p->startday,p->starthour,p->startminute);
			  printf("抵达时间为:%d年%d月%d日%d时%d分\n",p->arriveyear,p->arrivemonth,p->arriveday,p->arrivehour,p->arriveminute);
			 
			  printf("原始票价为%d元,打%.1f折,折后价为%.1f\n",p->price,p->discount,v);
			  printf("可出售票%d张\n\n",p->maxtickets);
			  flag=1;//找到航班,变更标记值
			}
			p=p->next;
		}
		 
			if((p==null)&&(flag==0))//找到链表尾并且未找到想查找的航班
			printf("未找到您想查询的航班!\n");break;
	}
	printf("是否继续查询?1.是 2.否");
	fflush(stdin);
	scanf("%d",&c);
	if(c==1)
		p=h->next;
	printf("\n");
	}
	while(c==1);
}

passenger *book(flight *f)//订票的子函数
{
	passenger *h,*p,*t;
	int i=1,choice,choice1;
	int a;
    float b,c;
	flight *q,*g,*k;
	q=f->next;
	g=f->next;
	k=f->next;
	char temp[20];
	h=(passenger*)malloc(sizeof(passenger));
	h->next=null;
	t=h;
	do
	{
	printf("请输入您要预定的航班号:");
	fflush(stdin);
	gets(temp);
	while(q!=null)
	{
		if(strcmp(q->number,temp)==0)//判断是否有客户想预定的航班
			break;
		q=q->next;
	}
	if(q==null)
			printf("没有找到与此匹配的航班!\n");
	else if(q->maxtickets<=0)//判断改航班是否满仓
	{
		printf("很抱歉,该航班的票子已售完\n");
	}
		  
	else//订票
	{
		printf("%s号航班信息如下:\n",q->number);
		printf("起飞时间为:%d年%d月%d日%d时%d分\n",q->startyear,q->startmonth,q->startday,q->starthour,q->startminute);
		printf("抵达时间为:%d年%d月%d日%d时%d分\n",q->arriveyear,q->arrivemonth,q->arriveday,q->arrivehour,q->arriveminute);
		printf("起飞城市为:%s\n",q->start);
		printf("抵达城市为:%s\n",q->termini);
		a=q->price;
		b=q->discount;
		c=a*b*0.1;
	
		printf("票价为%d元,打%.1f折,折后价为%.1f\n",q->price,q->discount,c);
		printf("最多可预定%d张\n",q->maxtickets);
		p=(passenger*)malloc(sizeof(passenger));
		strcpy(p->flightnum,q->number);
		printf("您要预定几张机票?");
		fflush(stdin);
		scanf("%d",&p->count);
		printf("请输入您的姓名:");
		fflush(stdin);
		gets(p->name);
		printf("请输入您的证件号码:");
		fflush(stdin);
		gets(p->id);
		printf("操作成功!\n");
		p->NO=i;
		printf("您预定了%d张%s号航班的机票,订单编号为%d号\n",p->count,q->number,p->NO);
		q->maxtickets-=p->count;
		p->next=null;
		t->next=p;
		t=p;
	}
	printf("是否还需预定其它航班的机票? 1.是 2.否");
	fflush(stdin);
	scanf("%d",&choice);
	i++;
	}
	while(choice==1);
	return(h);
}

void returnticket(flight *f,passenger *p)//退票的子函数
{
	passenger *t;
	flight *q;
	char tempname[20],tempid[20];
	int tempcount,tempno,choice;
	do
	{
	t=p->next;
	q=f->next;
	printf("请输入您的订单编号:");
	fflush(stdin);
	scanf("%d",&tempno);
	printf("请输入您的姓名:");
	fflush(stdin);
	gets(tempname);
	printf("请输入您的证件号码:");
	fflush(stdin);
	gets(tempid);
	while(t!=null)
	{
		if((t->NO==tempno)&&(strcmp(t->name,tempname)==0)&&(strcmp(t->id,tempid)==0))//判断客户是否已订票
			break;
			t=t->next;
	}
	if(t==null)
		printf("您还未预定机票!\n");
	else
	{
	     while(f!=null)
	   {
		 if(strcmp(f->number,t->flightnum)==0)
			break;
		 f=f->next;
		}
	}
	printf("您预定了%d张%s号航班的机票。",t->count,t->flightnum);
	printf("请输入您要退订的机票数:");
	fflush(stdin);
	scanf("%d",&tempcount);
	t->count-=tempcount;
	f->maxtickets+=tempcount;
	printf("操作成功!\n您退订了%d张%s号航班的机票。\n",tempcount,t->flightnum);
	printf("是否继续退票? 1.是 2.否\n");
	scanf("%d",&choice);
	}
	while(choice==1);
}

void edit(flight *h)//修改航班信息的子函数
{
	char tnumber[20];
	int choice,choice1;
	flight *p;
	do
	{
	p=h->next;
	printf("请输入要修改的航班号:");
	fflush(stdin);
	gets(tnumber);
	while(p!=null)
	{
		if(strcmp(p->number,tnumber)==0)//判断是否有改航班
			break;
		p=p->next;
	}
	if(p==null)
		printf("无此航班!\n");
	else
	{
	printf("请选择要修改的航班信息:\n1.起飞时间 2.抵达时间 3.起飞城市 4.抵达城市 5.票价 6.折扣 7.票数\n");
	fflush(stdin);
	scanf("%d",&choice);
	switch(choice)
	{
	case 1:printf("请输入起飞时间:");
		fflush(stdin);
		scanf("%d %d %d %d %d",&p->startyear,&p->startmonth,&p->startday,&p->starthour,&p->startminute);
		printf("起飞时间修改为:%d年%d月%d日%d时%d分\n",p->startyear,p->startmonth,p->startday,p->starthour,p->startminute);break;
	case 2:printf("请输入到达时间:");
		fflush(stdin);
		scanf("%d %d %d %d %d",&p->arriveyear,&p->arrivemonth,&p->arriveday,&p->arrivehour,&p->arriveminute);
		printf("抵达时间修改为:%d年%d月%d日%d时%d分\n",p->arriveyear,p->arrivemonth,p->arriveday,p->arrivehour,p->arriveminute);break;
	case 3:printf("请输入起飞城市:");
		fflush(stdin);
		gets(p->start);
		printf("起飞城市修改为:%s\n",p->start);break;
	case 4:printf("请输入抵达城市:");
		fflush(stdin);
		gets(p->termini);
		printf("抵达城市修改为:%s\n",p->termini);break;
	case 5:printf("请输入航班票价:");
		fflush(stdin);
		scanf("%d",&p->price);
		printf("票价为%d元\n",p->price);break;
	case 6:printf("请输入票价折扣:");
		fflush(stdin);
		scanf("%f",&p->discount);
		printf("票价折扣修改为%.1f折\n",p->discount);break;
	case 7:printf("请输入票数:");
		fflush(stdin);
		scanf("%d",&p->maxtickets);
		printf("票数修改为%d",p->maxtickets);break;
	}
	}
	printf("继续修改航班信息? 1.是 2.否\n");
	scanf("%d",&choice1);
	}
	while(choice1==1);
}

void main()
{
    int choice0,choice1;
	flight *flightinfo;
	passenger *passinfo;
	printf(" 欢迎进入航空票务系统\n"); 
    
    do
		{
			printf("1.输入航班信息 2.查询航班信息 3.我要订票 4.我要退票 5.修改航班信息\n");
  			scanf("%d",&choice1);
			switch(choice1)
			{
			  case 1:flightinfo=input();break;
			  case 2:inquire(flightinfo);break;
			  case 3: passinfo=book(flightinfo);break;
			  case 4:returnticket(flightinfo,passinfo);break;
			  case 5:edit(flightinfo);break;
			}
			printf("是否还要继续进行操作? 1.是 2.否\n");
			scanf("%d",&choice0);
		}
		while(choice0==1);
}



⌨️ 快捷键说明

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