?? 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 + -