📄 planebookingsystem.cpp
字号:
#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 + -