⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 航空客运订票系统.cpp

📁 一个用类来编写的航空订票系统 1.订票 2.退票 3.添加航线 4.删除航线 5.添加航班 6.删除航班 7.查找航班 8.修改 0.退出
💻 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 + -