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

📄 1.cpp

📁 航空订票系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if(ch!='#')
		{
			lines[i].replacehead->front=new replaceman;
			lines[i].replacehead->rear=lines[i].replacehead->front;
			replacep=lines[i].replacehead->front;
		}
		else
			lines[i].replacehead->front=lines[i].replacehead->rear=NULL;
		while(ch!='#')
		{
			f>>replacep->name>>replacep->bill[1]>>replacep->bill[2]>>replacep->bill[3];
			replacep->next=NULL;
			f.get(ch);
			if(ch!='#')
			{
				replacep=new replaceman;
				replacep->next=NULL;
				lines[i].replacehead->rear->next=replacep;
				lines[i].replacehead->rear=replacep;
			}
		}
        f.close();
		i++; 
	}
}
void returnbill(vector<airline> &lines)
{
	string flightn;
	string name;
	cout<<"请输入航班号:";
	cin>>flightn;             //航班号
	cout<<"请输入姓名:";
	cin>>name;                 //姓名
	int i=0;
	int degreen[3]={1,6,11};    //几等舱位的第一个座位座号
	orderman *orderp;
	orderman *befororderp;
	Orderbill *billp;
	Orderbill *destroybill;
	replaceman *replacep;
	replaceman *beforreplace;
	char ch;
	int n,j,k,m;
	int flag1=0,flag2=0;         //标记是否找到航班号和客户姓名
	while(i<lines.size())                  
	{
		if(lines[i].flightnumber==flightn)      //退票    
		{
			orderp=lines[i].orderhead;
			if(orderp==NULL)
			   cout<<"此航班中无你订的票.\n";
			else  
			{
				while(orderp!=NULL)
				{   
					if(orderp->name==name)
					{
						cout<<"你所订票的座号为:";
						billp=orderp->billhead;
						j=0;
						do
						{
							cout<<billp->number<<"  ";
							billp=billp->next;
							j++;
						}while(billp!=NULL);
						cout<<endl<<"是否要全部都退(Y/N):";
						cin.get(ch);
						ch=readchar();
						if(ch=='y'||ch=='Y')
						{
							billp=orderp->billhead;
							while(billp!=NULL)
							{
								destroybill=billp;
								lines[i].seat[destroybill->number]=0;
								billp=billp->next;
								if(destroybill->number<=5)
								{
									lines[i].ordernumber[1]--;
									lines[i].remainnumber[1]++;
								}
								else if(destroybill->number>5&&destroybill->number<=10)
								{
									lines[i].ordernumber[2]--;
									lines[i].remainnumber[2]++;
								}
								else
								{
									lines[i].ordernumber[3]--;
									lines[i].remainnumber[3]++;
								}
								delete destroybill;
							}
							if(orderp==lines[i].orderhead)
							{
								lines[i].orderhead=orderp->next;
								delete orderp;
								orderp=lines[i].orderhead;
							}
							else
							{   
								befororderp->next=orderp->next;
								delete orderp;
								orderp=befororderp;
							}
						}//if(ch=='y'||ch=='Y')结束
						else
						{
							cout<<"请输入要退的票数:";
							n=judgeint();
							while(n<0||n>j)
							{
								cout<<"输入有误请重新输入:";
								n=judgeint();
							}
							billp=orderp->billhead;
							for(j=0;j<n;j++)
							{
								destroybill=billp;
								lines[i].seat[destroybill->number]=0;
								billp=billp->next;
								if(destroybill->number<=5)
								{
									lines[i].ordernumber[1]--;
									lines[i].remainnumber[1]++;
								}
								else if(destroybill->number>5&&destroybill->number<=10)
								{
									lines[i].ordernumber[2]--;
									lines[i].remainnumber[2]++;
								}
								else
								{
									lines[i].ordernumber[3]--;
									lines[i].remainnumber[3]++;
								}
								delete destroybill;
							}
							orderp->billhead=billp;
						}//else结束
						flag1=1;
						orderp=orderp->next;
					}//if(orderp->name==name)结束
					else
					{
					befororderp=orderp;
					orderp=orderp->next;
					}
				}//while(orderp!=NULL)结束
				if(flag1==0)
					cout<<"此航班中无你订的票.\n";
				else                                     //处理候补
				{  
					replacep=lines[i].replacehead->front;
					if(lines[i].replacehead->front!=NULL)
					{
					     while(replacep!=NULL)
						 {   
							 if(replacep->bill[1]<=lines[i].remainnumber[1]&&replacep->bill[2]<=lines[i].remainnumber[2]
								 &&replacep->bill[3]<=lines[i].remainnumber[3])
							 {  
								 befororderp=lines[i].orderhead;
								 while(befororderp->next!=NULL)
									 befororderp=befororderp->next;
								 orderp=new orderman;
								 orderp->name=replacep->name;
								 orderp->next=NULL;
								 orderp->billhead=new Orderbill;
								 billp=orderp->billhead;
								 m=0;
								 for(k=1;k<4;k++)
								 {
									for(n=degreen[k-1],j=0;j<replacep->bill[k];n++)
									 {
										 if(lines[i].seat[n]==0)
										 {
											 lines[i].seat[n]=1;
											 if(m==0)
											 {
												billp->seatdegree=k;
												billp->number=n;
												billp->next=NULL;
												lines[i].ordernumber[k]++;
												lines[i].remainnumber[k]--;
											 }
											 else
											 {
												 destroybill=new Orderbill;
												 destroybill->seatdegree=k;
												 destroybill->number=n;
												 destroybill->next=NULL;
												 billp->next=destroybill;
												 billp=destroybill;
												 lines[i].ordernumber[k]++;
												 lines[i].remainnumber[k]--;
											 }
											 j++;
											 m++;
										 }
									 }
								 }//for(int k=1;k<4;k++)结束
								 befororderp->next=orderp;
								 if(replacep==lines[i].replacehead->front)
								 {
									 if(replacep==lines[i].replacehead->rear)
										lines[i].replacehead->rear=lines[i].replacehead->front=replacep->next;
									 else
										 lines[i].replacehead->front=replacep->next;
								 }
								 else if(replacep==lines[i].replacehead->rear)
									 lines[i].replacehead->rear=beforreplace;
								 else
									 beforreplace->next=replacep;
								 
							     beforreplace=replacep;
								 replacep=replacep->next;
								 delete replacep;
							 }//if结束
						     else
							 {
								 beforreplace=replacep;
								 replacep=replacep->next;
							 }
						 }//while(replacep!=NULL)结束
					}
				}//else结束
			}//else结束
			flag2=1;
		}//if(lines[i].flightnumber==flightn)结束
		i++;
	}//while(i<lines.size())
	if(flag2==0)
		cout<<"无此航班.\n";
}
void witerfile(vector<airline> lines)        //写入文件
{
	ofstream f;
	orderman *orderp;
	Orderbill *billp;
	replaceman *replacep;
	int i,j,n;
	string file[]={"011.txt","012.txt","021.txt","022.txt","031.txt","032.txt","041.txt","042.txt","051.txt","052.txt"};  //储存已订票及等候替补客户信息的文件的文件名数组
	f.open("airline.txt");               //写入航线信息的文件
	if(f.fail())
	{
		cout<<"写入文件失败\n";
		exit(1);
	}
	for(i=0;i<lines.size();i++)
	{
		f<<lines[i].end<<" "<<lines[i].flightnumber<<" "<<lines[i].aircraftnumber<<" "<<lines[i].week<<" ";
		f<<lines[i].ordernumber[1]<<' '<<lines[i].ordernumber[2]<<' '<<lines[i].ordernumber[3]<<' ';
		f<<lines[i].remainnumber[1]<<' '<<lines[i].remainnumber[2]<<' '<<lines[i].remainnumber[3]<<' ';
		for(j=0;j<19;j++)
			f<<lines[i].seat[j]<<' ';
		if(i==lines.size()-1)
			f<<lines[i].seat[j]<<'#';
		else
			f<<lines[i].seat[j]<<endl;
	}
	f.close();
	i=0;n=0;
	for(n=0;n<2*lines.size();n++)
	{
		f.open(file[n].c_str());          //写入已订票客户的信息
		if(f.fail())
		{
			cout<<"写入文件失败\n";
			exit(1);
		}  
		orderp=lines[i].orderhead;
		if(orderp==NULL)
			f<<'#';
		while(orderp!=NULL)
		{   // cout<<orderp->name<<endl;
			f<<orderp->name<<' ';                 //已订票客户的名字
			billp=orderp->billhead;      //此客户票的头指针
			while(billp!=NULL)
			{
				f<<billp->seatdegree<<' '<<billp->number;
				if(billp->next==NULL)
					if(orderp->next!=NULL)
					    f<<'$'<<endl;
					else
						f<<'$';
				else
					f<<' ';
				billp=billp->next;
			}                        
			if(orderp->next==NULL)
				f<<'#';
			orderp=orderp->next;
		}
		f.close();
		n++;
		f.open(file[n].c_str());               //写入等候替补客户的信息
		if(f.fail())
		{
			cout<<"写入文件失败\n";
			exit(1);
		}
		replacep=lines[i].replacehead->front;
		if(replacep==NULL)
			f<<'#';
		while(replacep!=NULL)
		{   
			f<<replacep->name<<' '<<replacep->bill[1]<<' '<<replacep->bill[2]<<' '<<replacep->bill[3];
			if(replacep->next==NULL)
                 f<<'#';
			else
				f<<endl;
			replacep=replacep->next;
		}
        f.close();
		i++;
	}
}
void menu()
{
	cout<<"	┌───────────────────────────┐\n";
	cout<<"	│            *****请输入要操作的序号****               │\n";
	cout<<"	├───────────────────────────┤\n";
	cout<<"	│               1.**********查询航线                   │\n";
	cout<<"	├───────────────────────────┤\n";
	cout<<"	│               2.**********承办订票业务               │\n";
	cout<<"	├───────────────────────────┤\n";
	cout<<"	│               3.**********承办退票业务               │\n";
	cout<<"	├───────────────────────────┤\n";
	cout<<"	│               0.**********退出系统                   │\n";
	cout<<"	└───────────────────────────┘\n";
}
void main()
{
	int n;
	char ch;
	vector<airline> lines;       //航线信息向量
	readfile(lines);
	do{
		do{
			system("cls");
			system("color 1e");
			menu();
			n=judgeint();
			if(n<0||n>3)
				cout<<"输入有误,请重新输入.";
		}while(n<0||n>3);
		switch(n)
		{
		case 1:
				searchairline(lines,lines.size());
				break;
		case 2:
				orderbill(lines);
				break;
		case 3:
				returnbill(lines);
				break;
		case 0:
			cout<<"谢谢使用......\n";
			witerfile(lines);
			exit(0);
		}
		cin.get(ch);
		cout<<endl<<"请按任意键回到主菜单....\n";
		cin.get(ch);
	}while(1);
}

⌨️ 快捷键说明

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