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

📄 ticket.h

📁 数据结构课程设计用C++做的航空售票系统挺不错的~
💻 H
字号:
#include <iostream.h>
#include <string.h>

void FlightInsert(); 
void FlightDelete();
void FlightLookup();
void FlightRework();
void FlightBuyticket();
void FlightCancelticket();
void Flightclean();
void MainMenu();

typedef struct Customer   //已定票乘客信息
{
	char Name[10];   //姓名
	int Amount;   //定票数
	int Level;   //舱位等级
	int SeatNum;   //座位号
	char FlightNum[10];   //所定航班号
	struct Customer *next;
}Customer;

typedef struct Replace   //替补乘客信息
{
	char Name[10];    //姓名
	int Amount;   //定票数
	int Level;   //舱位等级
	char FlightNum[10];   //所定航班号
	struct Replace *next;  
}Replace;   

typedef struct Flight   //航线信息
{
	char Des[10];   //终点站名
	char FlightNum[10];   //航班号
	char PlaneNum[10];   //飞机号
	char Week;   //飞行周日
	int Ration;   //乘员定额
	int FreeTicket;   //剩余票数
	float Price[3];   //舱位等级的价格
	int ReplacePas;   //候补乘客数
	Replace *ReplName;   //该航班的候补乘客名单      
	Customer *CustName;   //该航班的已定票乘客名单
	struct Flight *next;   //指示下一航线结点
}Flight,*PFlight;

int Ration=0;   //乘客总数
Flight *head;   //建立航线头结点
Flight *rear;   //建立航线尾结点   
Customer *Cusrear;
Replace *Reprear;

void MainMenu()
{
	char i='0';
	while (i!='8')
	{
		cout<<"       ***********南昌航空公司客运定票系统V1.0***********"<<endl;
		cout<<"       *     1、增加航线               5、预订机票      *"<<endl;
		cout<<"       *     2、查询航线               6、退订机票      *"<<endl;
		cout<<"       *     3、修改航线               7、清空系统      *"<<endl;
        cout<<"       *     4、删除航线               8、退出系统      *"<<endl;
		cout<<"       **************************************************"<<endl;
		cin>>i;
		switch(i)
		{
		case '1':FlightInsert();break;
		case '2':FlightLookup();break;
        case '3':FlightRework();break;
		case '4':FlightDelete();break;
		case '5':FlightBuyticket();break;
		case '6':FlightCancelticket();break;
		case '7':Flightclean();break;
		case '8':;break;
		default:cout<<"error\n";break;
		}
	}
}

void FlightInsert()   //航班插入
{
    Flight *p;
    p=new Flight;
    cout<<"请输入终点站名:"<<endl;
    cin>>p->Des;
    cout<<"请输入航班号:"<<endl;
    cin>>p->FlightNum;
    cout<<"请输入飞机号:"<<endl;
    cin>>p->PlaneNum;
    cout<<"请输入飞行周日:"<<endl;
    cin>>p->Week;
    cout<<"请输入乘员定额:"<<endl;
    cin>>p->Ration;
    p->FreeTicket=p->Ration;
    cout<<"请输入舱位等级的价格:"<<endl;
    cout<<"头等舱价格"<<endl;
    cin>>p->Price[0];
    cout<<"普通舱价格"<<endl;
    cin>>p->Price[1];
    cout<<"经济舱价格"<<endl;
    cin>>p->Price[2];
    p->ReplName=new Replace;
    p->CustName=new Customer;
    p->CustName->next=NULL;
    p->ReplName->next=NULL;
    p->ReplacePas=0;
    rear->next=p;
    rear=p;
    rear->next=NULL;
}

void FlightDelete()   //删除航班
{
	Flight *p,*q;
	char FlightNum[10];
	p=head;
	int i=0;
	while (i!=1)
	{
		cout<<"请输入需要删除的航班号:"<<endl;
		cin>>FlightNum;
		while (p->next&&strcmp(p->next->FlightNum,FlightNum))
		{
			p=p->next;
		}     
		q=p->next;
		if (q!=NULL)
		{
			if(q->next==NULL)
			{    //当删除rear所指向的结点
				rear=p;
			}
            p->next=p->next->next;
			delete q;
		}
        else
		{
			cout<<"你所要删除的航班不存在"<<endl;
		}
		cout<<"1、退出2、继续"<<endl;
		cin>>i;
	}
}

void FlightLookup()   //查询航班
{
	Flight *p,*q;
	char FlightNum[10];
	p=head;
	int i=0;
	while (i!=1)
	{
		cout<<"请输入需要查询的航班号:"<<endl;
		cin>>FlightNum;
		while (p->next&&strcmp(p->next->FlightNum,FlightNum))
		{
			p=p->next;
		}
		q=p->next;
		if (q==NULL)
		{
			cout<<"对不起不存在此航班"<<endl;
		}
		else
		{
			cout<<"航班号:"<<q->FlightNum<<endl;
			cout<<"飞机号:"<<q->PlaneNum<<endl;
			cout<<"目的地:"<<q->Des<<endl;
			cout<<"飞行周日:"<<q->Week<<endl;
			cout<<"成员定额:"<<q->Ration<<endl;
			cout<<"剩余票数:"<<q->FreeTicket<<endl;
			cout<<"候补乘客数:"<<q->ReplacePas<<endl;
			cout<<"头等舱价格:"<<q->Price[0]<<endl;
			cout<<"普通舱价格:"<<q->Price[1]<<endl;
			cout<<"经济舱价格:"<<q->Price[2]<<endl;
		}
		cout<<"1、返回主菜单 2、继续"<<endl;
		cin>>i;
	}
}

void FlightRework()   //修改航线信息
{
	int Customer_Number ;
	Flight *p,*q;
	char FlightNum[10];
	char i='0';
	p=head;
	cout<<"请输入需要修改的航班号:"<<endl;
	cin>>FlightNum;
	while (p->next&&strcmp(p->next->FlightNum,FlightNum))
	{
		p=p->next;
	}
	q=p->next;
	if (q==NULL)
	{
		cout<<"对不起不存在此航班"<<endl;
	}
	else
	{
		while(i!='9')
		{
			cout<<"     *****请输入需要修改的数据*****"<<endl;
			cout<<"     *1、航班号      2、飞机号    *"<<endl;
            cout<<"     *3、目的地      4、飞行周日  *"<<endl;
			cout<<"     *5、成员定额    6、头等舱价格*"<<endl;
			cout<<"     *7、普通舱价格  8、经济舱价格*"<<endl;
            cout<<"     *          9、退出           *"<<endl;
			cout<<"     ******************************"<<endl;
			cin>>i;
			switch(i)
			{
			case '1':cout<<"请输入航班号:"<<endl;
				cin>>q->FlightNum;break;
			case '2':cout<<"请输入飞机号:"<<endl;
                   cin>>q->PlaneNum;break;
			case '3':cout<<"请输入目的地:"<<endl;
                cin>>q->Des;break;
			case '4':cout<<"请输入飞行周日:"<<endl;
                cin>>q->Week;break;
			case '5':cout<<"请输入乘员定额:"<<endl;
				Customer_Number=q->Ration-q->FreeTicket; 
				cin>>q->Ration;q->FreeTicket=q->Ration-Customer_Number;break;
			case '6':cout<<"请输入头等舱价格:"<<endl;
                cin>>q->Price[0];break;
			case '7':cout<<"请输入普通舱价格:"<<endl;
                cin>>q->Price[1];break;
			case '8':cout<<"请输入经济舱价格:"<<endl;
                 cin>>q->Price[2];break;
            case '9':
				break;
            default:cout<<"error\n";break;
			}
		}
	}
}

void FlightBuyticket() //订票
{
	int Ticket_Amount;
	void Buyticket(PFlight ,int );
	void Buyreplace(PFlight ,int ,int );
	Flight *p,*q;
	char Des[10];
	int i=2;
	while (i!=1)
	{
		cout<<"请输入目的地:"<<endl;
		cin>>Des;
        p=head;
		while (p->next&&strcmp(p->next->Des,Des))
		{
			p=p->next;
		}
		q=p->next;
		if (q==NULL)
		{
			cout<<"对不起不存在此航班"<<endl;
		}
		else
		{
			while(i!=1)
			{
				cout<<"输入需要够买的票数"<<endl;
				cin>>Ticket_Amount;
				while(Ticket_Amount==0)
				{
					cout<<"请输入一个非零数:"<<endl;
					cin>>Ticket_Amount;
				}
				if (Ticket_Amount<=q->FreeTicket)
				{
					Buyticket(q,Ticket_Amount);
				}
				else
				{
					int n;
					cout<<"剩余票数小于定票数,是否需要列入候补名单?(1、是 2、否)"<<endl;
					cin>>n;
					Buyreplace(q,Ticket_Amount,n);
				}
				cout<<"1、返回主菜单 2、继续"<<endl;
				cin>>i;
			}
		}
	}
}
    
void FlightCancelticket()   //退票
{
 
	void Buyticket(PFlight ,int );
	Flight *p,*q;
	Customer *h,*j;
	char FlightNum[6];
	char Customer_Name[10];
	int Replace1_Amount;   //候补第一个人的定票数
	int i;
	while (i!=1)
	{
		cout<<"请输入需要退定的航班号:"<<endl;
		cin>>FlightNum;
		p=head;
		while (p->next&&strcmp(p->next->FlightNum,FlightNum))
		{
			p=p->next;
		}
		q=p->next;
		if (q==NULL)
		{
			cout<<"对不起不存在此航班"<<endl;
		}
		else
		{
			while (i!=2)
			{
				cout<<"请输入姓名:"<<endl;
				cin>>Customer_Name;
				h=q->CustName;
				while (h->next&&strcmp(h->next->Name,Customer_Name))
				{
					h=h->next;
				}
				j=h->next;
				if(j==NULL)
				{
					cout<<"查无此人"<<endl;
				}
				else
				{
					if(j->next==NULL){    //当删除最后一个结点
						Cusrear=h;
					} 
					h->next=h->next->next;
					q->FreeTicket+=j->Amount;
					delete j; 
					cout<<"删除成功!"<<endl;
					if(q->ReplName->next!=NULL)
					{
						Replace1_Amount=q->ReplName->next->Amount;
						if (Replace1_Amount<=q->FreeTicket)
						{
							Replace *rep;
							rep=q->ReplName->next;
							Customer *Cus2;
							Cus2=new Customer;
							Cus2->SeatNum=q->Ration-q->FreeTicket+1;
							strcpy(Cus2->FlightNum, q->FlightNum );
							strcpy(Cus2->Name, rep->Name );
							Cus2->Amount=rep->Amount;
							Cus2->Level=rep->Level;
							cout<<"乘客"<<rep->Name<<"已经成功买票 "<<endl;
							cout<<"座位号为:";
							for(int i=1;i<=(rep->Amount);i++)
							{
								cout<<Cus2->SeatNum++<<" ";
							}
							cout<<endl;
							if (q->CustName->next==NULL)
							{
								Cusrear=q->CustName;
								Cusrear->next=Cus2;
								Cusrear=Cus2;
								Cusrear->next=NULL;
							}
							else
							{
								Cusrear->next=Cus2;
								Cusrear=Cus2;
								Cusrear->next=NULL;
							}
							q->FreeTicket-=rep->Amount;
							q->ReplName->next=q->ReplName->next->next;
							q->ReplacePas--;
							delete rep;
						}
					}
				}
				cout<<"2、退出姓名录入"<<endl;
				cin>>i;
			}
		}
		cout<<"1、返回主菜单"<<endl;
		cin>>i;
	}
}

void Flightclean()
{
	head->next=rear->next;
	cout<<"系统已经清空!"<<endl;
}

void Buyticket(PFlight q,int Ticket_Amount)   //买票
{
 
	int n=Ticket_Amount;
	Customer *Cus2;
	Cus2=new Customer;
	Cus2->SeatNum=q->Ration-q->FreeTicket+1;
	strcpy(Cus2->FlightNum, q->FlightNum );
	Cus2->Amount=Ticket_Amount;
	cout<<"请输入姓名:"<<endl;
	cin>>Cus2->Name;
	cout<<"请输入舱位等级:"<<endl;
	cin>>Cus2->Level;
	cout<<"你的座位号为"<<endl;
	for(int i=1;i<=Ticket_Amount;i++)
	{
		cout<<Cus2->SeatNum++<<" ";
	}
	cout<<endl;
	if (q->CustName->next==NULL)
	{
		Cusrear=q->CustName;
		Cusrear->next=Cus2;
		Cusrear=Cus2;
		Cusrear->next=NULL;
 
	}
	else{
		Cusrear->next=Cus2;
		Cusrear=Cus2;
		Cusrear->next=NULL;
	}
    q->FreeTicket-=Ticket_Amount;
}

void Buyreplace(PFlight q,int Ticket_Amount,int n)   //进入候补队列
{
	Replace *Rep2;
	Rep2=new Replace;
	if(n==1)
	{
		q->ReplacePas+=Ticket_Amount;
		strcpy(Rep2->FlightNum,q->FlightNum);
		Rep2->Amount=Ticket_Amount;
		cout<<"请输入姓名:"<<endl;
		cin>>Rep2->Name;
		cout<<"请输入舱位等级(1-3):"<<endl;
        cin>>Rep2->Level;
		if(q->ReplName->next==NULL)
		{
			Reprear=q->ReplName;
			Reprear->next=Rep2;
			Reprear=Rep2;
            Reprear->next=NULL;
		}
		else{
			Reprear->next=Rep2;
            Reprear=Rep2;
			Reprear->next=NULL;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -