📄 航空客运订票系统.cpp
字号:
#include <iostream.h>
#include <fstream.h>
#include "string.h"
#include "time.h"
class kehu //客户类
{
char kname[50]; //客户名
int kID; //客户ID
int pl; //客户订票量
public:
kehu(){next=NULL;}
kehu(char kn[],int ki,int p)
{ strcpy(kname,kn); kID=ki; pl=p;next=NULL; }
kehu Addkehu(char kn[],int ki,int p)
{ strcpy(kname,kn); kID=ki; pl=p;next=NULL; }
char * getkname() { return kname; }
int getkID() { return kID; }
int getpl() { return pl; }
class kehu *next;
void print();
~kehu(){}
};
void kehu::print()
{
cout<<"客户ID:"<<kID<<"\t客户名:"<<kname<<"订票数:"<<pl<<endl;
return;
}
class hangban
{
/*终点名,航班号、飞机号、飞行日期,
乘员定额、余票量、已订票客户数,等候替补的客户数,
已订票的客户名单链表的头指针(名单类包括姓名、订票量)
以及等候替补的客户名单链表的头指针。(名单类包括姓名、所需票量);*/
int hbID;
int fjID;
char zhongdian[50];
struct tm fxTime;
int Maxp;
int yup;
int yiding;
int houbu;
public:
class kehu *yd; //已订客户头指针
class kehu *dd; //候补客户头指针
class hangban *next;
hangban(){yd=NULL;dd=NULL;next=NULL;}
hangban(int i);
int gethbID(){return hbID;}
char* getzhongdian(){return zhongdian;}
int getyup(){return yup;}
int getyiding(){return yiding;}
int gethoubu(){return houbu;}
void setyup(int p){ yup=p;}
void setyiding(int y){ yiding=y;}
void sethoubu(int h){ houbu=h;}
void setzd(char zd[]){strcpy(zhongdian,zd);}
void print();
~hangban(){}
};
hangban::hangban(int i)
{
cout<<"请输入航班号:";
cin>>hbID;
cout<<"请输入飞机号:";
cin>>fjID;
cout<<"请输入航班的终点名:";
cin>>zhongdian;
cout<<"请输入起飞时间(年 月 日 星期 小时 分)";
cin>>fxTime.tm_year>>fxTime.tm_mon>>fxTime.tm_mday
>>fxTime.tm_wday>>fxTime.tm_hour>>fxTime.tm_min;
cout<<"请输入座位数:";
cin>>Maxp;
yup=Maxp;
yiding=0;
houbu=0;
yd=NULL;
dd=NULL;
next=NULL;
}
void hangban::print()
{
cout<<"航班号:"<<hbID<<"\t飞机号:"<<fjID<<"\t终点站:"<<zhongdian<<endl;
cout<<"起飞时间:"<<fxTime.tm_year<<"."<<fxTime.tm_mon<<"."<<fxTime.tm_mday<<" 星期"
<<fxTime.tm_wday<<" "<<fxTime.tm_hour<<":"<<fxTime.tm_min<<endl;
cout<<"座位数:"<<Maxp<<"\t余票量:"<<yup<<"\t已订票人数:"<<yiding<<"\t候补人数:"<<houbu<<endl;
return ;
}
class hangxian //航线类
{
char qidian[50]; //起点名
char zhongdian[50]; //终点名
public:
hangxian(){next=NULL;child=NULL;}
hangxian(int i);
hangxian(char *q,char *z)
{ strcpy(qidian,q); strcpy(zhongdian,z);
child=NULL;next=NULL; }
char* getq() { return qidian; }
char* getz() { return zhongdian; }
class hangxian *next;
class hangban *child;
void Addhx(char q[],char z[])
{ strcpy(qidian,q); strcpy(zhongdian,z);return; }
void print(){ cout<<"起点站:"<<qidian<<"\t终点站:"<<zhongdian<<endl;return;}
~hangxian(){}
};
hangxian::hangxian(int i)
{
cout<<"请输入此航线的起点站名:";
cin>>qidian;
cout<<"请输入此航线的终点站名:";
cin>>zhongdian;
child=NULL;
next=NULL;
}
hangxian *hangxian_head=NULL; //全局变量航线头指针
hangxian *Addhangxian() //新建一个航线类并插入链表
{
hangxian *newhangxian=new hangxian(1);
hangxian *hx;
if(hangxian_head==NULL)
{
hangxian_head=newhangxian;
cout<<"插入航线成功!"<<endl;
return hangxian_head;
}
for(hx=hangxian_head;hx!=NULL;hx=hx->next)
{
if(strcmp(hx->getz(),newhangxian->getz())==0)
{
cout<<"该航线已有!"<<endl;
return NULL;
}
}
newhangxian->next=hangxian_head;
hangxian_head=newhangxian;
cout<<"插入航线成功!"<<endl;
return newhangxian;
}
void Addhangban() //新建一个航班类并插入链表
{
hangxian *hx;
hangban *newhangban=new hangban(1);
for(hx=hangxian_head;hx!=NULL;hx=hx->next)
{
if(strcmp(hx->getz(),newhangban->getzhongdian())==0)
break;
}
if(hx==NULL)
{
cout<<"没有此终点的航线,请建立新的航线!"<<endl;
hx=Addhangxian();
}
if(hx->child==NULL)
{
hx->child=newhangban;
}
else
{
newhangban->next=hx->child;
hx->child=newhangban;
}
cout<<"插入航班成功!!!"<<endl;
return ;
}
hangban *Lookhangban(int hbID) //用航班ID查找航班
{
for(hangxian *hx=hangxian_head;hx!=NULL;hx=hx->next)
{
for(hangban *hb=hx->child;hb!=NULL;hb=hb->next)
{
if(hb->gethbID()==hbID)
{
hb->print();
return hb;
}
}
}
if(hx==NULL)
{
cout<<"没有此航班ID!"<<endl;
return NULL;
}
}
void Lookhangban(char name[]) //用航班名查找航班
{
hangban *hb;
hangxian *hx;
for(hx=hangxian_head;hx!=NULL;hx=hx->next)
{
if(strcmp(hx->getz(),name)==0)
{
for(hb=hx->child;hb!=NULL;hb=hb->next)
{
hb->print();
}
return ;
}
}
if(hx==NULL)
{
cout<<"没有此航班名!"<<endl;
return ;
}
}
hangxian *Lookhangxian(char name[]) //用航线名查找航线
{
for(hangxian *hx=hangxian_head;hx!=NULL;hx=hx->next)
{
if(strcmp(hx->getz(),name)==0)
return hx;
}
cout<<"没有此航线!"<<endl;
return NULL;
}
void Deletehangban() //删除航班
{
char name[50];
int hbid;
hangxian *hx;
hangban *hb,*hb2;
int choice;
cout<<"请输入要删除的航班终点名:";
cin>>name;
hx=Lookhangxian(name);
if(hx==NULL)
return;
Lookhangban(name);
cout<<"请输入要删除的航班号:";
cin>>hbid;
hb=Lookhangban(hbid);
if(hb!=NULL)
{
cout<<"你确定要删除吗?是的请按1:";
cin>>choice;
if(choice==1)
{
if(hb==hx->child)
{
hx->child=hb->next;
}
else
{
for(hb2=hx->child;hb2->next->gethbID()==hbid;hb2=hb2->next);
hb2->next=hb->next;
}
for(kehu *kh=hb->yd,*kh2=hb->yd;kh2!=NULL;kh=kh2)
{
kh2=kh->next;
delete(kh);
}
for(kehu *kh3=hb->dd,*kh4=hb->dd;kh4!=hb->dd;kh3=kh4)
{
kh4=kh3->next;
delete(kh3);
}
delete(hb);
cout<<"删除完成!"<<endl;
}
}
}
void Deletehangxian() //删除航线
{
int t;
char name[50];
hangban *hb,*hb2;
hangxian *hx,*hx2;
cout<<"请输入你想删除的航线终点名:";
cin>>name;
for(hx=hangxian_head;hx!=NULL;hx=hx->next)
{
if(strcmp(hx->getz(),name)==0)
{
hx->print();
}
break;
}
if(hx==NULL)
{
cout<<"没有你想删除的航线!"<<endl;
return;
}
cout<<"你确定要删除吗?是的请按1:";
cin>>t;
if(t==1)
{
if(hx==hangxian_head)
{
hangxian_head=hx->next;
}
else
{
for(hx2=hangxian_head;hx2!=NULL;hx2=hx2->next)
{
if(strcmp(hx2->next->getz(),name)==0)
break;
}
hx2->next=hx->next;
}
for(hb=hx->child,hb2=hx->child;hb2!=NULL;hb=hb2)
{
hb2=hb->next;
for(kehu *kh=hb->yd,*kh2=hb->yd;kh2!=hb->yd;kh=kh2)
{
kh2=kh->next;
delete kh ;
}
for(kehu *kh3=hb->dd,*kh4=hb->dd;kh4!=hb->dd;kh3=kh4)
{
kh4=kh3->next;
delete kh3;
}
delete hb ;
}
delete hx;
cout<<"删除航线成功!"<<endl;
}
}
void dingpiao() //订票
{
hangban* hb;
kehu *kh;
char name[50];
int hbh,num,choice;
cout<<"请输入你想订航线终点:";
cin>>name;
Lookhangban(name);
cout<<"请输入你想订的航班号(不订票请输入别的号):";
cin>>hbh;
hb=Lookhangban(hbh);
if(hb==NULL)
{
cout<<"没有此航班!";
return;
}
else
{
cout<<"请输入你想要的票数:";
cin>>num;
if(num<=hb->getyup())
{
hb->setyup(hb->getyup()-num);
hb->setyiding(hb->getyiding()+1);
cout<<"请输入你的姓名:";
cin>>name;
cout<<"请输入你的证件号:";
cin>>hbh;
kehu *newkehu=new kehu(name,hbh,num);
if(hb->yd==NULL)
{
hb->yd=newkehu;
}
else
{
newkehu->next=hb->yd->next;
hb->yd->next=newkehu;
}
cout<<"订票成功!"<<endl;
}
else
{
cout<<"余票不足!候补请按1:";
cin>>choice;
if(choice==1)
{
hb->sethoubu(hb->gethoubu()+1);
cout<<"请输入你的姓名:";
cin>>name;
cout<<"请输入你的证件号:";
cin>>hbh;
kehu *newkehu=new kehu(name,hbh,num);
if(hb->dd==NULL)
{
hb->dd=newkehu;
}
else
{
for(kh=hb->dd;kh->next!=NULL;kh=kh->next);
kh->next=newkehu;
}
cout<<"候补成功!"<<endl;
}
}
}
}
void tuipiao() //退票
{
int hbh,zjh;
hangban* hb;
kehu* kh,*kh2;
cout<<"请输入你退票的航班号:";
cin>>hbh;
hb=Lookhangban(hbh);
cout<<"请输入你的证件号:";
cin>>zjh;
if(hb->yd->getkID()==zjh)
kh=hb->yd;
else
{
for(kh2=hb->yd,kh=kh2->next;kh!=NULL;kh2=kh2->next,kh=kh->next)
{
if(kh->getkID()==zjh)
break;
}
}
if(kh==NULL)
cout<<"没有此人!"<<endl;
else
{
hb->setyup(hb->getyup()+kh->getpl());
hb->setyiding(hb->getyiding()-1);
if(kh==hb->yd)
{
hb->yd=kh->next;
}
else
{
kh2->next=kh->next;
}
delete kh;
cout<<"退票成功!"<<endl;
if(hb->dd->getpl()<=hb->getyup())
kh=hb->dd;
else
for(kh2=hb->dd,kh=kh2->next;kh!=NULL;kh=kh->next,kh2=kh2->next)
{
if(kh->getpl()<=hb->getyup())
break;
}
if(kh==NULL)
return;
hb->setyup(hb->getyup()-kh->getpl());
hb->setyiding(hb->getyiding()+1);
hb->sethoubu(hb->gethoubu()-1);
if(kh=hb->dd)
{
hb->dd=kh->next;
}
else
kh2->next=kh->next;
kh->next=hb->yd;
hb->yd=kh;
cout<<"候补客户订票成功!"<<endl;
}
}
void chazhao() //查找
{
int select=1,id;
char name[50];
do
{
cout<<" 查找航班(按0退出)"<<endl;
cout<<"1.按航班终点名查找 2.按航班号查找"<<endl;
cin>>select;
switch(select)
{
case 1:
{
cout<<"请输入你想找的航班终点名:";
cin>>name;
Lookhangban(name);
}
break;
case 2:
{
cout<<"请输入你想找的航班号:";
cin>>id;
Lookhangban(id);
}
break;
case 0:
return ;
default:
cout<<"你的输入不对,请重新输入!"<<endl;
break;
}
}while(select!=0);
}
void xuigai()
{
int select=1,id;
char name[50];
char name2[50];
hangxian *hx;
hangban *hb;
do
{
cout<<" 修改(按0退出)"<<endl;
cout<<"1.修改航线 2.修改航班"<<endl;
cin>>select;
switch(select)
{
case 1:
{
cout<<"请输入你想修改航线的终点名:";
cin>>name;
hx=Lookhangxian(name);
if(hx!=NULL)
{
cout<<"请输入航线的起点名:";
cin>>name;
cout<<"请输入航线的终点名:";
cin>>name2;
hx->Addhx(name,name2);
for(hb=hx->child;hb!=NULL;hb=hb->next)
{
hb->setzd(name2);
}
cout<<"修改成功"<<endl;
}
}
break;
case 2:
{
cout<<"请输入你想改的航班终点名:";
cin>>name;
Lookhangban(name);
cout<<"请输入你想找的航班号:";
cin>>id;
hb=Lookhangban(id);
if(hb!=NULL)
{
cout<<"请输入余票量:";
cin>>id;
hb->setyup(id);
cout<<"请输入已订人数:";
cin>>id;
hb->setyiding(id);
cout<<"请输入候补人数:";
cin>>id;
hb->sethoubu(id);
cout<<"修改成功"<<endl;
}
}
break;
case 0:
return ;
default:
cout<<"你的输入不对,请重新输入!"<<endl;
break;
}
}while(select!=0);
}
void main() //主函数
{
int select=1;
do
{
cout<<"\n★★★★★★★★ 航 空 订 票 系 统 ★★★★★★★★\n";
cout<<"\n☆☆☆☆ 1.订票 2.退票 ☆☆☆☆\n";
cout<<"\n☆☆☆☆ 3.添加航线 4.删除航线 ☆☆☆☆\n";
cout<<"\n☆☆☆☆ 5.添加航班 6.删除航班 ☆☆☆☆\n";
cout<<"\n☆☆☆☆ 7.查找航班 8.修改 ☆☆☆☆\n";
cout<<"\n☆☆☆☆ 0.退出 \n";
cout<<"\n★★★★★★★★ ★★★★★★★★\n";
cout<<"\n请做选择(0-7):";
cin>>select;
switch(select)
{
case 1:
dingpiao();
break;
case 2:
tuipiao();
break;
case 3:
{
Addhangxian();
hangxian_head->print();
}
break;
case 4:
Deletehangxian();
break;
case 5:
Addhangban();break;
case 6:
Deletehangban();
break;
case 7:
chazhao();
break;
case 8:
xuigai();
break;
case 0:
return;
default:
cout<<"你的输入不对,请重新输入!"<<endl;
break;
}
}
while(select!=0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -