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

📄 planebookingsystem.cpp

📁 飞机订票系统 功能描述: 1、录入:可以录入航班情况(数据可以存储在一个数据文件中
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//*************************数据结构定义**********
typedef struct{
	int		Number;//编号
	char	Up[25];//起飞时间
	char	Down[25];//降落时间
	char	FromCity[50];//起飞城市
	char	ToCity[50];//抵达城市
	float	Price;//航班票价
	float	Rate;//票价折扣
	int		MaxPerson;//可容乘客数
	int		Person;//已有乘客数
}FlyData;//航班信息
typedef FlyData *PFlyData;

typedef struct{
	int		Number;//编号
	int		FlyNumber;//航班编号
	char	Name[50];//客户姓名
	char	Passport[20];//证件号
	int		CheckCount;//订票数量
}CheckData;//机票信息
typedef CheckData *PCheckData;

typedef struct Flytag{
	FlyData fd;
	Flytag* next;
}Fly;//航班信息结点
typedef Fly* PFly;
typedef Fly* FlyList;//航班信息表头结点

typedef struct Checktag{
	CheckData cd;
	Checktag* next;
}Check;//机票信息表
typedef Check* PCheck;
typedef Check* CheckList;//机票信息表头结点
FlyList createFlyList(){
	FlyList pflist=(FlyList)malloc(sizeof(Fly));
	if(pflist)
	{
		pflist->next=NULL;
		return pflist;
	}
	printf("Out of space!\n");
	return NULL;
}
CheckList createCheckList(){
	CheckList pclist=(CheckList)malloc(sizeof(Check));
	if(pclist)
	{
		pclist->next=NULL;
		return pclist;
	}
	printf("Out of space!\n");
	return NULL;
}
int insertFly(FlyList fl,PFlyData pfd){
	if(fl==NULL)return 0;
	PFly q=fl;
	PFly p=(PFly)malloc(sizeof(Fly));
	if(NULL==p)
		return 0;
	while(NULL!=q->next)
		q=q->next;
	p->next=NULL;
	q->next=p;
	p->fd=*pfd;
	return 1;
}
int insertCheck(CheckList cl,PCheckData pcd){
	if(cl==NULL)return 0;
	PCheck q=cl;
	PCheck p=(PCheck)malloc(sizeof(Check));
	if(NULL==p)
		return 0;
	while(NULL!=q->next)
		q=q->next;
	p->next=NULL;
	q->next=p;
	p->cd=*pcd;
	return 1;
}
int deleteFly(FlyList fl,PFly p)
{
	PFly q=fl;
	while(NULL!=q->next)
	{
		if(q->next==p)
			break;
		q=q->next;
	}
	if(q->next==NULL)
		return 0;
	q->next=p->next;
	free(p);
	return 1;
}
int deleteCheck(CheckList cl,PCheck p)
{
	PCheck q=cl;
	while(NULL!=q->next)
	{
		if(q->next==p)
			break;
		q=q->next;
	}
	if(q->next==NULL)
		return 0;
	q->next=p->next;
	free(p);
	return 1;
}
//**************************函数定义*******************
//返回指定编号的机票指针
PCheck returnCheck(CheckList cl,int number);
//打印定票信息
void printCheck(PCheckData cd);
//列出所有定票信息
void listCheck(CheckList cl);
//订票
int bookCheck(FlyList fl,CheckList cl);
//退票
int refundCheck(FlyList fl,CheckList cl);
//返回指定编号的航班指针
PFly returnFly(FlyList fl,int number);
//返回指定编号的航班指针
PFly returnFly(FlyList fl,int number);
//打印航班信息
void printFly(PFlyData fd);
//列出航班信息
void listFly(FlyList fl);
//录入航班情况
int addFly(FlyList fl);
//修改航班信息
int changeFly(FlyList fl);
//查询指定编号的航班情况
int findFly(FlyList fl);
//查询指定起飞地点的航班情况
int findFromCity(FlyList fl);
//查询指定抵达地点的航班情况
int findToCity(FlyList fl);
//保存数据
int saveData(FlyList fl,CheckList cl);
//读取数据
int readData(FlyList fl,CheckList cl);
//*****************************************************
//返回指定编号的机票指针
PCheck returnCheck(CheckList cl,int number)
{
	if(cl->next==NULL)return NULL;
	PCheck q=cl;
	while(NULL!=q->next)
	{
		if(q->next->cd.Number==number)
			return q->next;
		q=q->next;
	}
	return NULL;
}
//打印定票信息
void printCheck(PCheckData cd)
{
	printf("-----------机票编号:%d---------------\n",cd->Number);
	printf("    航班:%d\n",cd->FlyNumber);
	printf("  客户姓名:%s\n",cd->Name);
	printf("  证件号码:%s\n",cd->Passport);
	printf("  定座数量:%d\n",cd->CheckCount);
}
//列出所有定票信息
void listCheck(CheckList cl)
{
	PCheck c=cl;
	printf("************列出所有定票信息:*************\n");
	while(c->next!=NULL)
	{
		printCheck(&c->next->cd);
		c=c->next;
	}
	printf("*******************************************\n");
}
//订票
int bookCheck(FlyList fl,CheckList cl)
{
	CheckData cd;
	PFly pfly;
	printf("----------------订票------------------\n");
	printf("请输入要订的航班编号:");
	scanf("%d",&cd.FlyNumber);
	if((pfly=returnFly(fl,cd.FlyNumber))==NULL)
	{
		printf("没有编号为%d的航班\n",cd.FlyNumber);
		return 0;
	}
	if(pfly->fd.Person>=pfly->fd.MaxPerson)
	{
		printf("编号为%d的航班已经满人了\n",cd.FlyNumber);
		//...提供其它选择
		return 0;
	}
	else
	{
		printf("%d航班还剩%d个座位,票价%.2f,折扣%.2f,实价%.2f\n",
			pfly->fd.Number,pfly->fd.MaxPerson-pfly->fd.Person,pfly->fd.Price,pfly->fd.Rate,pfly->fd.Price*pfly->fd.Rate);
	}
	printf("请输入要订票数量:");
	scanf("%d",&cd.CheckCount);
	if(pfly->fd.MaxPerson-pfly->fd.Person<cd.CheckCount)
	{
		printf("没有那么多空位了\n");
		return 0;
	}
	printf("请输入客户姓名:");
	scanf("%s",cd.Name);
	cd.Name[49]='\0';
	printf("请输入客户证件号码:");
	scanf("%s",cd.Passport);
	cd.Passport[19]='\0';

	cd.Number=pfly->fd.Number*1000+pfly->fd.Person;
	pfly->fd.Person+=cd.CheckCount;
	if(0==insertCheck(cl,&cd))return 0;
	printf("订票成功,机票编号为:%d\n",cd.Number);
	printf("你花费了%.2f元订了%d航班%d张的票。\n",pfly->fd.Price*pfly->fd.Rate*cd.CheckCount,cd.FlyNumber,cd.CheckCount);
	return 1;
}
//退票
int refundCheck(FlyList fl,CheckList cl)

{
	PCheck p;
	int number;
	printf("----------------退票------------------\n");
	printf("请输入机票编号:");
	scanf("%d",&number);
	if((p=returnCheck(cl,number))==NULL)
	{
		printf("不存在该编号的机票\n");
		return 0;
	}
	printCheck(&p->cd);
	char cmd='\n';
	printf("确定退票请输入y,否定请输入n:");
	while(cmd=='\n')
		scanf("%c",&cmd);
	if(cmd=='y'||cmd=='Y')
	{
		PFly q=returnFly(fl,p->cd.FlyNumber);
		if(q==NULL)return 0;
		q->fd.Person-=p->cd.CheckCount;
		deleteCheck(cl,p);
		printf("退票成功\n");
		return 1;
	}
	return 0;
}
//打印航班信息
void printFly(PFlyData fd)

{
	printf("--------航班编号:%d------------------\n",fd->Number);
	printf("  航班起飞时间:%s\n",fd->Up);
	printf("  航班降落时间:%s\n",fd->Down);
	printf("  航班起飞城市:%s\n",fd->FromCity);
	printf("  航班抵达城市:%s\n",fd->ToCity);
	printf("    航班票价:%.2f\n",fd->Price);
	printf("  航班票价折扣:%0.2f\n",fd->Rate);
	printf("航班可容乘客数量:%d\n",fd->MaxPerson);
	printf("航班已有乘客数量:%d\n",fd->Person);
}
//列出航班信息
void listFly(FlyList fl)

{
	PFly q=fl;
	printf("************列出所有航班信息:*************\n");
	while(q->next!=NULL)
	{
		printFly(&q->next->fd);
		q=q->next;
	}
	printf("*******************************************\n");
}
//返回指定编号的航班指针
PFly returnFly(FlyList fl,int number)

{
	if(fl->next==NULL)return NULL;
	PFly q=fl;
	while(NULL!=q->next)
	{
		if(q->next->fd.Number==number)
			return q->next;
		q=q->next;
	}
	return NULL;
}
//录入航班情况
int addFly(FlyList fl)

{
	FlyData fd;
	//要添加判断代码
	printf("航班信息包括:\n1.航班编号\n2.起飞时间\n3.降落时间\n4.起飞城市\n5.抵达城市\n6.标价折扣\n7.可容乘客数量\n8.已有乘客数量\n\n");
	printf("1.请输入航班编号(例如:123):");
	scanf("%d",&fd.Number);
	if(returnFly(fl,fd.Number)!=NULL)
	{
		printf("编号为%d的航班已经存在\n",fd.Number);
		return 0;
	}
	printf("2.请输入航班起飞时间(例如:2008年08月12日12时30分):");
	scanf("%s",fd.Up);
	fd.Up[24]='\0';
	printf("3.请输入航班降落时间(例如:2008年08月12日14时30分):");
	scanf("%s",fd.Down);
	fd.Down[24]='\0';
	printf("4.请输入航班起飞城市(例如:广州):");
	scanf("%s",fd.FromCity);
	fd.FromCity[49]='\0';
	printf("5.请输入航班抵达城市(例如:北京):");
	scanf("%s",fd.ToCity);
	fd.ToCity[49]='\0';
	printf("6.请输入航班票价(例如:1000.99):");
	scanf("%f",&fd.Price);
	if(fd.Price<0)
	{
		printf("票价应该是大于0的数\n");
		return 0;
	}
	printf("7.请输入航班票价折扣(例如:0.8):");
	scanf("%f",&fd.Rate);

⌨️ 快捷键说明

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