//航班管理员可以——添加航班——查询航班信息——修改航班信息——查询乘客信息(管理员登陆口令:123456)
//乘客可以——查询航班信息——订票——退票
//(航班链表为单向顺序链表,乘客链表为双向非循环顺序链表)
#include<iostream>
#include<string>
using namespace std;
//航班结构
struct Flight
{
int flightCode;//航班号
string originStation ;//起点站
string terminalStation;//终点站
int day;//日期
int leaveTime;//离站时间
int arriveTime;//到站时间
int LeftTicket;
int TotalTicket;
struct Passenger;//乘客表
Passenger *first;
Flight *next;
Flight *head;
};
//乘客结构
struct Passenger
{
string name;
int ID;//身份证号码
char Letter;//姓氏字母
int ticketnum;
Passenger *first;
Passenger *next,*prior;
};
//建立航班链表,每次开通新航班时,新航班都会插入链表前面
void CreateFlight(Flight *&head)
{
int yn=1;
Flight *s,*p,*q;
cout<<"请输入航班信息:"<<endl;
cout<<"\n航班号**起点站**终点站**日期**离站时间**到站时间**总票**余票"<<endl;
s=new Flight;
cin>>s->flightCode;
cin>>s->originStation;
cin>>s->terminalStation;
cin>>s->day;
cin>>s->leaveTime;
cin>>s->arriveTime;
cin>>s->LeftTicket;
cin>>s->TotalTicket;
while(yn)
{
if(head==NULL) {head=s;head->next=NULL;}//如果链表为空,即建立头结点
else
{
if(head->flightCode > s->flightCode)//插入的航班号比头结点的小,即插在表头
{
s->next=head;
head=s;
yn=0;
}
else
{
p=head;
q=head->next;
int i=1;
while(i)
{
if(q==NULL) {p->next=s;q=s;q->next=NULL; i=0;}
else
{
if(p->flightCode < s->flightCode && s->flightCode < q->flightCode)
{
s->next=q;
p->next=s;
i=0;
}
else
{
p=p->next;
q=q->next;
i=1;
}
}
}
}
}
cout<<"\n继续添加航班 请输入1;添加完毕请输入0!"<<endl;
cin>>yn;
if(yn==1) {cout<<"\n航班号**起点站**终点站**日期**离站时间**到站时间**总票**余票"<<endl;}
else {return;}
s=new Flight;
cin>>s->flightCode;
cin>>s->originStation;
cin>>s->terminalStation;
cin>>s->day;
cin>>s->leaveTime;
cin>>s->arriveTime;
cin>>s->LeftTicket;
cin>>s->TotalTicket;
}
s=NULL;
delete s;
return;
}
//遍历航班链表,查询航班信息
void showFlight(Flight *head)
{
Flight *p;
if(!head) {cout<<"对不起,航班表为空!!!"<<endl; return;}
else
{
cout<<"**********航班的计划表如下**********\n\n";
cout<<"\n航班号**起点站--终点站**日期**离站时间**到站时间**总票**余票"<<endl;
p=head;
while(p)
{
cout<<p->flightCode<<" "<<p->originStation<<"--"<<p->terminalStation<<" "<<p->day<<" "
<<p->leaveTime<<" "<<p->arriveTime<<" "<<p->LeftTicket<<" "<<p->TotalTicket<<endl;
p=p->next;
}
return;
}
}
//修改航班信息
void reviseFlight(Flight *&head,int key)
{
Flight *s;
if(head==NULL)
{cout<<"航班链表为空!"<<endl; return;}
for(Flight *&p=head;p->next;p=p->next)
{
if(p->flightCode==key)
{
cout<<"请输入修改后的航班信息:"<<endl;
s=new Flight;
cin>>s->flightCode;
cin>>s->originStation;
cin>>s->terminalStation;
cin>>s->day;
cin>>s->leaveTime;
cin>>s->arriveTime;
cin>>s->LeftTicket;
cin>>s->TotalTicket;
p->flightCode=s->flightCode;
p->originStation=s->originStation;
p->terminalStation=s->terminalStation;
p->day=s->day;
p->leaveTime=s->leaveTime;
p->arriveTime=s->arriveTime;
p->LeftTicket=s->LeftTicket;
p->TotalTicket=s->TotalTicket;
return;
}
cout<<"对不起,不存在你要修改的航班!"<<endl;
return;
}
}
//查找需要的航班
Flight* findFlight(Flight *head,int key)
{
if(head==NULL)
{cout<<"航班链表为空!"<<endl; return NULL;}
else
{
for(Flight *p=head;p;p=p->next)
{
if(p->flightCode==key)
{
cout<<"这是你所查找的航班:"<<endl;
cout<<"航班号**班次**起点站--终点站**日期**离站时间**到站时间**总票**余票"<<endl;
cout<<p->flightCode<<" "<<p->originStation<<"--"<<p->terminalStation<<" "<<p->day<<" "
<<p->leaveTime<<" "<<p->arriveTime<<" "<<p->LeftTicket<<" "<<p->TotalTicket<<endl;
return p;
}
}
cout<<"对不起,不存在次航班!"<<endl;
return NULL;
}
}
//遍历航班的乘客链表
void showPassenger(Flight *&head,Passenger *first)
{
Flight *p;
Passenger *s;
int key;
cout<<"请输入乘客所在航班的航班号:"<<endl;
cin>>key;
p=findFlight(head, key);
if(p==NULL)
{
cout<<"对不起,次航班不存在!"<<endl; return;
}
else
{
if(!first) {cout<<"对不起,乘客表为空!!!"<<endl; return;}
else
{
cout<<"**********"<<p->flightCode<<"航班的乘客表如下**********\n";
cout<<"姓名**身份证号码**姓氏头字母**所定票数"<<endl;
s=first;
while(s)
{
cout<<s->name<<" "<<s->ID<<" "<<s->Letter<<" "<<s->ticketnum<<endl;
s=s->next;
}
return;
}
}
}
//航班管理员登陆函数
void Fcontrollerland(Flight *&head,Passenger *first)
{
int q,l=1,i,h;
system("cls");
system("color 2e");
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<"现在进行身份确认,请输入口令:";
cin>>i;
while(l)
{
if(i==123456)
{
system("cls");
system("color 3e");
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<"|******* 0,返回上一级菜单.******|"<<endl;
cout<<" "<<"|******* 1,查询航班的信息.******|"<<endl;
cout<<" "<<"|******* 2,添加新航班. ******|"<<endl;
cout<<" "<<"|******* 3,修改航班的信息.******|"<<endl;
cout<<" "<<"|******* 4,查询乘客信息.******|"<<endl;
cout<<"请选择执行的操作:";
cin>>q;
if(q>=0&&q<5)
{
switch(q)
{
case 0:
l=0;
break;
case 1:showFlight(head);
system("pause");
break;
case 2:CreateFlight(head);
system("pause");
break;
case 3:
{
int key;
cout<<"请输入你所要修改的航班号:"<<endl;
cin>>key;
reviseFlight(head, key);
system("pause");
break;
}
case 4:showPassenger(head,first);
system("pause");
break;
}
}
else
{
system("cls");
system("color 4e");
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<"操作无效!"<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
system("pause");
}
}
else
{
system("cls");
system("color 2e");
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<" 身份确认失败"<<endl;
cout<<" "<<" 是否重新确认!"<<endl;
cout<<" "<<"重新确认请按1,放弃请按0"<<endl;
cout<<" ";
cin>>h;
if(h==0) l=0;
if(h==1)
{
system("cls");
system("color 2e");
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout