📄 manage_flight.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<iostream.h>
#include"DataStruct_Define.h"
#define MAXSIZE 10
void printftinf(struct flightinf *inf);/*输出航线信息*/
void printallfltinf();/*打印所有航班信息*/
void querymanage();//查询管理
void queryfltno();//按航班号查询
void queryfendname();//按终点站名查询
void queryday();//按周日查询
struct flightinf *addflight(char fendname[],char fltno[],char pno[],char day,int passengersum,int fchecknum);/*添加航线*/
void initflight(struct flightinf m[]);/*初始化航班*/
struct flightinf *find();/*查找航线*/
void printcustomerinf();/*打印客户信息*/
linklist *insertlink(linklist *L,int num,char name[],int sticketclass);/*登记订票信息*/
linkqueue add(linkqueue q,char name[],int num);/*添加客户信息到客户队列中*/
void book();/*客户订票*/
int findotherflight(char fltno[],char fendname[] );/*查找相同站点的其它航班信息*/
void backcheck();/*客户退票*/
/*****************************************************************************/
/*主函数*/
void main()
{
struct flightinf m[10];
initflight(m);
while(1)
{
char c=' ';
cout<<"\n****************************************************************************";
cout<<"\t\t\t\t航空客运订票系统\n\n";
cout<<"\n\t客票预定-1"<<"\t航线查询-2"<<"\t\t办理退票-3";
cout<<"\n\n\t所有航线信息-4"<<"\t所有已订票客户信息-5"<<"\t\t退出-6";
cout<<"\n****************************************************************************\n";
cout<<"请您输入:1,2,3,4,5 or 6中的任意一个数字字符";
cout<<"\n****************************************************************************\n";
cout<<"选择业务:";
cin>>c;
for(;!isdigit(c);)
{
cout<<"请选择正确的业务:";
cin>>c;
}
switch(c)
{
case '1':book();break;
case '2':querymanage();break;
case '3':backcheck();break;
case '4':printallfltinf();break;
case '5':printcustomerinf();break;
case '6':exit(0);break;
}
}
}
/*****************************************************************************/
/*****************************************************************************/
/*添加航线*/
struct flightinf *addflight(char fendname[],char fltno[],char pno[],char day,int passengersum,int fchecknum)
{
struct flightinf *inf;
inf=new flightinf;
strcpy(inf->fendname,fendname);
strcpy(inf->fltno,fltno);
strcpy(inf->pno,pno);
inf->day=day;
inf->passengersum=passengersum;
inf->fchecknum=fchecknum;
inf->order=NULL;
inf->wait.front=NULL;
inf->wait.rear=NULL;
return inf;
}
/*****************************************************************************/
/*****************************************************************************/
/*初始化航班*/
void initflight(struct flightinf m[])
{
start=m;
start=NULL;
m[0]=*addflight("西安","F100","P1",'1',30,30);
m[1]=*addflight("北京","F101","P2",'1',200,200);
m[2]=*addflight("西安","F102","P4",'2',400,400);
m[3]=*addflight("天津","F103","P5",'3',50,50);
m[4]=*addflight("西安","F104","P10",'5',20,20);
m[5]=*addflight("深圳","F105","P3",'4',350,350);
m[6]=*addflight("天津","F106","P6",'5',280,280);
m[7]=*addflight("珠海","F107","P7",'6',230,230);
m[8]=*addflight("南京","F108","P8",'3',150,150);
m[9]=*addflight("杭州","F109","P9",'7',350,350);
start=m;
}
/*****************************************************************************/
/*****************************************************************************/
//输出航线信息
void printfltinf(struct flightinf *inf)
{
char c;
c=inf->day;
cout<<inf->fendname;
cout<<" "<<inf->fltno;
cout<<" "<<inf->pno;
/****************************************************/
//输出周日“星期×”
switch (c)
{
case '1':cout<<" 星期一";break;
case '2':cout<<" 星期二";break;
case '3':cout<<" 星期三";break;
case '4':cout<<" 星期四";break;
case '5':cout<<" 星期五";break;
case '6':cout<<" 星期六";break;
case '7':cout<<" 星期日";break;
}
/****************************************************/
cout<<" "<<inf->passengersum;
cout<<" "<<inf->fchecknum<<endl;
}
/*****************************************************************************/
/*****************************************************************************/
/*打印所有航班信息*/
void printallfltinf()
{
int i=0,j=0;
struct flightinf *inf;
inf=start;
cout<<"\n****************************************************************************\n";
cout<<"\t\t\t\t所有航线信息\n";
cout<<"终点站名 航班号 飞机号 飞行周日 乘员定额 余票量\n";
while(i<MAXSIZE && inf->fltno!=NULL)
{
printfltinf(inf);
//cout<<endl;
inf++;
i++;
}
cout<<"\n****************************************************************************\n";
}
/*****************************************************************************/
/*****************************************************************************/
/*航线查询*/
void querymanage()//查询管理
{
char queryway;
int flag=1;
while(flag)
{
cout<<"\t\t\t"<<"请选择查询方式"<<endl;
cout<<"****************************************************************************\n";
cout<<"按航班号查询-1\t按终点站名查询-2\t按周日查询-3\t返回主菜单-4"<<endl;
cout<<"****************************************************************************\n";
cout<<"选择查询方式:";
cin>>queryway;
for(;!isdigit(queryway);)
{
cout<<"请重新输入:";
cin>>queryway;
}
switch(queryway)
{
case '1': queryfltno();break;
case '2': queryfendname();break;
case '3': queryday();break;
case '4': flag=0;break;
}
}
}
void queryfltno()//按航班号查询
{
struct flightinf *inf;
char fltno[50];
int i=0,flag=0;
inf=start;
cout<<"请输入航班号:";
cin>>fltno;
while(i<MAXSIZE)
{
if(!strcmp(fltno,inf->fltno))
{
flag=1;
cout<<"终点站名 航班号 飞机号 飞行周日 乘员定额 余票量\n";
printfltinf(inf);
}
inf++;
i++;
}
if(!flag)
cout<<"没有符合您要找的航线\n";
}
void queryfendname()//按终点站名查询
{
struct flightinf *inf;
char name[50];
int i=0,flag=0;
inf=start;
cout<<"请输入终点站名:";
cin>>name;
while(i<MAXSIZE)
{
if(!strcmp(name,inf->fendname))
{
flag=1;
cout<<"终点站名 航班号 飞机号 飞行周日 乘员定额 余票量\n";
printfltinf(inf);
}
inf++;
i++;
}
if(!flag)
cout<<"没有符合您要找的航线\n";
}
void queryday()//按周日查询
{
struct flightinf *inf;
char day;
int i=0,flag=0;
inf=start;
cout<<"请输入飞行周日:";
cin>>day;
while(i<MAXSIZE)
{
if(day==inf->day)
{
flag=1;
cout<<"终点站名 航班号 飞机号 飞行周日 乘员定额 余票量\n";
printfltinf(inf);
}
inf++;
i++;
}
if(!flag)
cout<<"没有符合您要找的航线\n";
}
/*****************************************************************************/
/*****************************************************************************/
/*查找航线*/
struct flightinf *find()
{ struct flightinf *inf;
char fltno[50];
int i=0;
inf=start;
cout<<"请输入航班号:";
cin>>fltno;
while(i<MAXSIZE && inf!=NULL)
{
if(!strcmp(fltno,inf->fltno))return inf;
inf++;
i++;
}
cout<<"没有找到您所要的航班号,请您两谅解!!!!";
return NULL;
}
/*****************************************************************************/
/*****************************************************************************/
/*打印客户信息*/
void printcustomerinf()
{ linklist *p;
struct flightinf *inf;
inf=find();
if(inf==NULL)
return;
p=inf->order;
if(p!=NULL)
{
cout<<"客户姓名\t订票量\t舱位等级"<<endl;
while(p)
{
cout<<"\t"<<p->name
<<"\t"<<p->bnum
<<"\t"<<p->sticketclass
<<endl;
p=p->next;
}
}
else
printf("该航线没有客户信息!!\n");
}
/*****************************************************************************/
/*****************************************************************************/
/*登记订票信息*/
linklist *insertlink(linklist *L,int num,char name[],int sticketclass)
{ linklist *p,*q;
p=L;
q=new linklist;
strcpy(q->name,name);
q->bnum=num;
q->sticketclass=sticketclass;
q->next=NULL;
if(L==NULL)
{L=q;q->next=NULL;}
else
{
L=q;
q->next=p;
}
return L;
}
/*****************************************************************************/
/*****************************************************************************/
/*添加客户信息到客户队列中*/
linkqueue add(linkqueue q,char name[],int num)
{ pwaitcheck temp;
temp=(pwaitcheck)malloc(sizeof(wnode));
strcpy(temp->name,name);
temp->wnum=num;
temp->next=NULL;
if(q.front==NULL)
q.front=temp;
else
q.rear->next=temp;
q.rear=temp;
return q;
}
/*****************************************************************************/
/*****************************************************************************/
/*客户订票*/
void book()
{
struct flightinf *inf;
int num,sclass,i;
char name[50],ch=' ';
inf=start;
if(!(inf=find())) return;
cout<<"请输入您的订票数量:";
cin>>num;
if(num<=inf->fchecknum)
{
cout<<"请输入客户姓名:";
cin>>name;
do
{
cout<<"请输入舱位等级(1,2,3):";
cin>>sclass;
}
while(sclass<1||sclass>3);
inf->order=insertlink(inf->order,num,name,sclass);
cout<<"客户名\t订票数\t舱位等级"<<endl;
cout<<name
<<"\t"<<num
<<"\t"<<sclass;
for(i=1;i<=num;i++)
cout<<endl<<"您的第"<<i
<<"张票的座位号是:"
<<inf->passengersum-inf->fchecknum+i;
inf->fchecknum=inf->fchecknum-num;
}
else
{
cout<<"\n您购买的票太多了,您需要排队等待 还是 查看到达同一站的其它航班?(p/q):";
cin>>ch;
if(ch=='p'||ch=='P')
{
cout<<"\n请输入您的姓名:";
cin>>name;
inf->wait=add(inf->wait,name,num);
cout<<"\n您现在需要等待,请稍候!!!!"<<endl;
}
else
{
if(findotherflight(inf->fltno ,inf->fendname))
cout<<"上面的航线可供您参考!!!";
}
}
}
/*****************************************************************************/
//////////////////////////////////////////////////////////////////////////////////
/*查找相同站点的其它航班号的航班信息*/
int findotherflight(char fltno[],char fendname[] )
{
struct flightinf *inf;
int i=0,flag=0;
inf=start;
cout<<"\n****************************************************************************\n";
cout<<"到达 "<<fendname<<"站 的其它航线为";
cout<<"\n---------------------------------------------------------\n";
cout<<"终点站名 航班号 飞机号 飞行周日 乘员定额 余票量\n";
while(i<MAXSIZE && inf!=NULL)
{
if(strcmp(fltno,inf->fltno) && !strcmp(fendname,inf->fendname))
{
printfltinf(inf);
flag++;
}
inf++;
i++;
}
cout<<"\n---------------------------------------------------------\n";
cout<<"共有 "<<flag<<" 条航线";
cout<<"\n****************************************************************************\n";
return flag;
}
/////////////////////////////////////////////////////////////////////////////////
/*****************************************************************************/
/*客户退票*/
void backcheck()
{
struct flightinf *inf;
wnode *t,*back,*f,*r;
int sticketclass;
linklist *p1,*p2,*head;
char cusname[50];
if(!(inf=find())) return;
head=inf->order;
p1=head;
cout<<"请输入客户名):";
cin>>cusname;
while(p1!=NULL)
{
if(!strcmp(cusname,p1->name)) break;
p2=p1;p1=p1->next;
}
if(p1==NULL)
{
cout<<"你还没有订票!!!"<<endl;
return;
}
else
{
if(p1==head) head=p1->next;
else p2->next=p1->next;
inf->fchecknum+=p1->bnum;
sticketclass=p1->sticketclass;
cout<<"恭喜您,成功退票了!!!!"<<endl;
free(p1);
}
inf->order=head;/*指向订票单链表的头指针*/
f=(inf->wait).front;/*f队列的头结点*/
r=(inf->wait).rear;/*r队列的尾结点*/
t=f;/*t为当前满点条件的排队候补名单域*/
while(t)
{
if(inf->fchecknum>=inf->wait.front->wnum)
{
int i;
inf->wait.front=t->next;
cout<<"祝贺您,订票成功!!!"<<endl;
for(i=1;i<=t->wnum;i++)/*输出座位号*/
cout<<endl<<"您的第"<<i
<<"张票的座位号是:"
<<inf->passengersum-inf->fchecknum+i;
inf->fchecknum=t->wnum;
inf->order=insertlink(inf->order,t->wnum,t->name,sticketclass);/*插入到订票客户名单链表中*/
free(t);
break;
}
back=t;t=t->next;
if(t!=NULL&&(inf->fchecknum)>=(t->wnum))
{ int i;
back->next=t->next;
cout<<"祝贺您,订票成功!!!"<<endl;
for(i=1;i<=t->wnum;i++)/*输出座位号*/
cout<<endl<<"您的第"<<i
<<"张票的座位号是:"
<<inf->passengersum-inf->fchecknum+i;
inf->fchecknum-=t->wnum;
inf->order=insertlink(inf->order,t->wnum,t->name,sticketclass);/*插入到订票客户名单链表中*/
free(t);break;
}
if(f==r) break;
}
}
/*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -