📄 hk.cpp
字号:
#include "iostream.h"
#include "iomanip.h"
#include "string.h"
#include "HK.h"
void CreateRoutes(int t,Sqlist &L) //建立航空客运订票系统
{
int n; //每条航线的航班数
int i;
cout<<"第"<<t<<"条航线的航班数"<<endl;
cin>>n;
cout<<"输入此航线的终点站名"<<endl;
cin>>L.Elem[t].EndName;
L.Elem[t].Len=n; //每条航线的航班数
for(i=1;i<=n;i++)
{
cout<<"输入此条航线的第"<<i<<"个航班号"<<endl;
cin>>L.Elem[t].FL[i].Key;
L.Elem[t].FL[i].keynum=strlen(L.Elem[t].FL[i].Key);//求航班号的长度
cout<<"输入此航班号的其他信息"<<endl;
cout<<"飞机号 飞行周日 乘员定额 余票量"<<endl;
cin>>L.Elem[t].FL[i].others.Model>>L.Elem[t].FL[i].others.Day
>>L.Elem[t].FL[i].others.MostCrew>>L.Elem[t].FL[i].others.LeftTickets;
L.Elem[t].FL[i].others.HBC=NULL; //一开始已订票的客户名单为空
L.Elem[t].FL[i].others.WBC=NULL; //一开始等候候补的客户名单为空
}
}
void Menu_select(Sqlist &L)
{
int n;
char c='y';
while(c=='y'||c=='Y')
{
cout<<"欢迎光临,输入你要选择的业务对应的号码"<<endl;
cin>>n;
switch(n)
{
case 1: FindRoutes(L); break; //查询航线
case 2: BookTickets(L); break; //办理订票业务
case 3: RetreatTickets(L); break; //办理退票业务
case 0: cout<<"退出系统!"<<endl; return;
default:cout<<"输入错误,重新输入!"<<endl;
}
cout<<"欢迎光临,需要服务吗?(Y/N)"<<endl;
cin>>c;
}
}
void Display(Sqlist &L,int t)
{
int i;
cout<<"可以到达你去的地方的这条航线的信息为"<<endl;
cout<<"航班号 飞机号 飞行日期"<<endl;
for(i=1;i<=L.Elem[t].Len;i++)
{
cout<<L.Elem[t].FL[i].Key<<setw(7)
<<L.Elem[t].FL[i].others.Model<<setw(7)
<<L.Elem[t].FL[i].others.Day<<endl;
} //输出了一条航线的所有航班的一些相关信息
}
void FindRoutes(Sqlist &L) //查询航线
{
cout<<"欢迎你查询"<<endl;
int i;
char Name[Max];
cout<<"输入你要到达的地方即终点站名"<<endl;
cin>>Name;
for(i=1;i<=L.lenght;i++)
{
if(strcmp(Name,L.Elem[i].EndName)==0)
{
Display(L,i);
break;
}
}
if(i>L.lenght)
cout<<"对不起,没有航线可以到达你去的地方"<<endl;
}
void BookTickets(Sqlist &L) //承办订票业务
{
cout<<"欢迎你来订票"<<endl;
Has_BookCustomers *ps;
Will_BookCustomers *p;
char CName[Max]; //客户名
char EName[Max]; //终点站名
char Key[Max]; //航班号
char Level;
int Num; //定票量
int i,j;
int flag1=0;
int flag2=0;
char c;
cout<<"尊敬的客户,请输入你的名字"<<endl;
cin>>CName;
cout<<"输入你的终点站"<<endl;
cin>>EName;
cout<<"输入航班号和定票量"<<endl;
cin>>Key;
cin>>Num;
cout<<"输入你要的舱位等级"<<endl;
cin>>Level;
for(i=1;i<=L.lenght;i++)
{
if(strcmp(EName,L.Elem[i].EndName)==0) //判断航线
{
flag1++;
for(j=1;j<=L.Elem[i].Len;j++)
{
if(strcmp(Key,L.Elem[i].FL[j].Key)==0) //判断航班号
{
flag2++;
if(L.Elem[i].FL[j].others.LeftTickets>=Num) //判断票够不够
{//进入已订票的客户名单
ps=new Has_BookCustomers;
strcpy(ps->Name,CName);
ps->NumOfTickets=Num;
ps->Level=Level;
if(L.Elem[i].FL[j].others.HBC==NULL)
L.Elem[i].FL[j].others.HBC=ps;
else
{
Has_BookCustomers *q;
for(q=L.Elem[i].FL[j].others.HBC;q->next;q=q->next); //空语句
q->next=ps;
}
L.Elem[i].FL[j].others.LeftTickets-=Num; //票量减少
ps->next=NULL;
NumOfStatue+=2*i+j;
cout<<"你好,你定票成功!你的座位号是:"<<endl;
cout<<NumOfStatue<<endl;
}
else
{
cout<<"对不起!现在没有你要的那么多票,你可以等待吗?(Y/N)"<<endl;
cin>>c;
if(c=='y'||c=='Y') //进入候补的客户名单
{
p=new Will_BookCustomers;
strcpy(p->Name,CName);
p->NumOfTickets=Num;
p->level=Level;
if(L.Elem[i].FL[j].others.WBC==NULL)
L.Elem[i].FL[j].others.WBC=p;
else
{
Will_BookCustomers *q;
for(q=L.Elem[i].FL[j].others.WBC;q->next;q=q->next);//空语句
q->next=p;
}
p->next=NULL;
cout<<"你已经进入候补,等有票我们将和你联系.谢谢!"<<endl;
}
}
}
}
if(flag2==0)
cout<<"对不起,此航线没有你输入的航班"<<endl;
break;
}
break;
}
if(flag1==0)
cout<<"对不起,没有到达你去的地方的航线"<<endl;
}
void ReBook(Sqlist &L,int i,int j)//退票后,检查等待买票的链表
{
Will_BookCustomers *r;
Will_BookCustomers *t;
while(L.Elem[i].FL[j].others.WBC!=NULL)
{
r=L.Elem[i].FL[j].others.WBC;
if(L.Elem[i].FL[j].others.LeftTickets>=r->NumOfTickets) //判断第一个候补的客户
{//将原来等待买票的客户(现在剩下的票符合要求)插入到已订票的链表后
Has_BookCustomers *H1=L.Elem[i].FL[j].others.HBC;
Has_BookCustomers *H2=new Has_BookCustomers;
strcpy(H2->Name,r->Name);
H2->Level=r->level;
H2->NumOfTickets=r->NumOfTickets;
L.Elem[i].FL[j].others.LeftTickets-=r->NumOfTickets;
if(L.Elem[i].FL[j].others.HBC==NULL)
L.Elem[i].FL[j].others.HBC=H2;
else
{
while(H1->next)
H1=H1->next;
H1->next=H2;
}
H2->next=NULL;
L.Elem[i].FL[j].others.WBC=r->next;
Will_BookCustomers *p=r;
Num+=2*i+j;
cout<<r->Name<<"你好,现在已帮你订好了票座位号是:"<<Num<<endl;
delete p;
}
else
{
if(L.Elem[i].FL[j].others.WBC->next==NULL)
break;
for(t=r->next;t;)
{
if(L.Elem[i].FL[j].others.LeftTickets>=t->NumOfTickets)
{//将原来等待买票的客户(现在剩下的票符合要求)插入到已订票的链表后
Has_BookCustomers *H1=L.Elem[i].FL[j].others.HBC;
Has_BookCustomers *H2=new Has_BookCustomers;
strcpy(H2->Name,t->Name);
H2->Level=t->level;
H2->NumOfTickets=t->NumOfTickets;
L.Elem[i].FL[j].others.LeftTickets-=t->NumOfTickets;
if(L.Elem[i].FL[j].others.HBC==NULL)
L.Elem[i].FL[j].others.HBC=H2;
else
{
while(H1->next)
H1=H1->next;
H1->next=H2;
}
H2->next=NULL;
Will_BookCustomers *k=t;
r->next=t->next;
Num+=2*i+j;
cout<<t->Name<<"你好,现在已帮你订好了票座位号是:"<<Num<<endl;
t=t->next;
delete k;
}
else
r=t;
}
}
}
}
void RetreatTickets(Sqlist &L)
{
cout<<"欢迎你来退票"<<endl;
char CName[Max];
char Key[Max];
char EName[Max]; //终点站名
int i,j;
int flag=0;
int flag1=0;
int flag2=0;
Has_BookCustomers *p;
Has_BookCustomers *q;
cout<<"尊敬的客户,请输入你的名字"<<endl;
cin>>CName;
cout<<"输入你已定的票的终点站"<<endl;
cin>>EName;
cout<<"输入已定的票的航班号"<<endl;
cin>>Key;
for(i=1;i<=L.lenght;i++)
{
if(strcmp(EName,L.Elem[i].EndName)==0) //判断航线
{
flag++;
for(j=1;j<=L.Elem[i].Len;j++)
{
if(strcmp(Key,L.Elem[i].FL[j].Key)==0) //判断航班号
{
flag1++;
if(L.Elem[i].FL[j].others.HBC!=NULL)
p=L.Elem[i].FL[j].others.HBC; //判断该航班的订票名单是否为空
else
{
cout<<"你没有订此条航线的这个航班的票"<<endl;
break;
}
if(strcmp(p->Name,CName)==0)
{//判断删除的是否为头指针
flag2++;
cout<<"你退票成功"<<endl;
L.Elem[i].FL[j].others.LeftTickets+=p->NumOfTickets;
L.Elem[i].FL[j].others.HBC=p->next;
delete p;
ReBook(L,i,j);
break;
}
else
{
for(q=p->next;q;q=q->next,p=q)
{
if(strcmp(q->Name,CName)==0)
{
flag2++;
cout<<"你退票成功"<<endl;
p->next=q->next;
L.Elem[i].FL[j].others.LeftTickets+=q->NumOfTickets;
delete q;
ReBook(L,i,j);
break;
}
}
}
if(flag2==0)
cout<<"对不起,此航线的此航班没有你的订票信息.请确认!"<<endl;
break;
}
if(flag1==0)
cout<<"此航线没有这个航班"<<endl;
break;
}
break;
}
}
if(flag==0)
cout<<"对不起,没有这条航线!请确认!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -