(C++对象数组)旅行团问题

题目:

//说明:
// OUC_DMR  2019/05/05
//题目说可以最多生成62个旅客
//本程序默认生成26个旅客,为什么不是62呢?
//太麻烦了我懒得改


#include<iostream>
#include<ctime>
#include<stdlib.h>

#define random(x) (rand()%x)

//const int  MAX_luggage = 3;
//const int MAX_howToTravel = 2;
//const int MAX_destination = 3;

using namespace std;

//乘客类
class Passenger
{
public:
	char name;
	int luggage;      //行李数量值0,1,2代表实际1,2,3
	int howToTravel;  //自由行或旅游社,0,1
	int destination;	//国内短途,国内长途,国际游,0,1,2
	int ticketPrice;	//个人的票价
	bool isApplied=false;  //是否报了旅行社(有可能团满而报不上)
	Passenger() {}
	Passenger(Passenger& a)
	{
		a.name = this->name;
		a.luggage = this->luggage;
		a.howToTravel = this->howToTravel;
		a.destination = this->destination;
		a.ticketPrice = this->ticketPrice;
	}
};
//旅行团类
class travelGroup
{
public:
	int numPassenger=0;   //团内人数
	int destination;      //国内短途,国内长途,国际游,0,1,2
	int groupPrice=0;		//团一共需付的票价
	Passenger people[6];	//顶多6个人
};
//旅行社类
class travelAgency
{
public:
	travelGroup groups[5];	//5个团
	travelAgency() {};

};
//随机生成旅客,这里限制只生成26位旅客 'A','B','C'...
void random_people(Passenger passengers[])
{
	char name = 'A';

	srand(static_cast <unsigned>(time(NULL)));  //以当前时间设置随机种子
	for (int i = 0; i < 26; i++)
	{
		cout << "我是乘客";
		passengers[i].name = name;
		cout << passengers[i].name;
		cout << ",选择";

		//随机了行李数,如何去,目的地
		int remainder1 = random(3);
		int remainder2 = random(2);
		int remainder3 = random(3);

		passengers[i].luggage = remainder1;
		passengers[i].howToTravel = remainder2;
		passengers[i].destination = remainder3;

		switch (passengers[i].howToTravel)
		{
		case 0:cout << "自由出行"; break;
		case 1:cout << "报名旅行社"; break;
		default:
			break;
		}
		cout << ",";
		switch (passengers[i].destination)
		{
		case 0:cout << "国内短途"; break;
		case 1:cout << "国内长途"; break;
		case 2:cout << "国际游"; break;
		default:
			break;
		}
		cout << ",携带";
		switch (passengers[i].luggage)
		{
		case 0:cout << "1件行李"; break;
		case 1:cout << "2件行李"; break;
		case 2:cout << "3件行李"; break;
		default:
			break;
		}
		cout << "行李编号是";
		for (int j = 0; j < passengers[i].luggage+1; j++)
		{
			cout << name << "0" << j + 1 << ",";
		}
		cout << "买票需付";
		switch (passengers[i].destination)
		{
		        case 0:passengers[i].ticketPrice = 10;
					cout << passengers[i].ticketPrice<<"元。"; break;
	        	case 1:passengers[i].ticketPrice = 100; 
					cout << passengers[i].ticketPrice << "元。"; break;
		        case 2:passengers[i].ticketPrice = 500; 
					cout << passengers[i].ticketPrice << "元。"; 
					if (passengers[i].luggage == 2)
					{

						cout  << "行李托运费100元";
					}
						break;
		        default:
			    break;

		}
		cout << endl;
		name++;

	}
	cout << endl;
}
//旅行社生成5个随机目的地的旅行团
//注意形参需要是引用,之后有注释提醒为什么用引用
void random_agency(travelAgency& agency,Passenger passengers[])  //引用,为什么passenger不用引用呢?他是数组
{																//传的是地址,可以直接修改
	srand(static_cast <unsigned>(time(NULL)));
	for (int i = 0; i < 5; i++)
	{
		int remainder3 = random(3);
		agency.groups[i].destination = remainder3;
	}			//随机生成5个旅行团
	for (int i = 0; i < 26; i++)		//遍历乘客,如果该乘客报团										
	{									//与旅行团目的地一样,则加进旅行社
		for (int j = 0; j < 5; j++)
		{
			
			if (passengers[i].howToTravel == 1) //我这里没写好,不用那么多if,用&&的
			{
				if (passengers[i].destination ==agency.groups[j].destination)
				{
					if (!passengers[i].isApplied)
					{
						if (agency.groups[j].numPassenger < 6)
						{
							agency.groups[j].people[agency.groups[j].numPassenger] = passengers[i];
							
							passengers[i].isApplied = true;		// !!!
							agency.groups[j].numPassenger++;    //!!!注意了,这里就是为什么要用引用的地方,你要去修改对象的属性了!
						}
					}
					
				}
			}
		}
	}
}
//旅行社报名
void travelApply(travelAgency& agency)     //也是用引用,原因与上同理
{
	cout << "旅行社开始报名" << endl;
	cout << "旅行社共计安排了5个旅行团,共计26人报名。" << endl;
	cout << "出行的目的地分别是:";
	for(int i=0;i<5;i++)
	{
		switch (agency.groups[i].destination)
		{
		case 0:cout << "国内短途"; break;
		case 1:cout << "国内长途"; break;
		case 2:cout << "国际游"; break;
		default:
			break;
		}
		cout << ",";
	}
	cout <<endl<< "每个旅行团的人数分别是:";
	for (int i = 0; i < 5; i++)
	{
		
			cout << agency.groups[i].numPassenger<<",";
			
	}
	cout << "每个旅行团需要支付的票价是:";
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < agency.groups[i].numPassenger; j++)
		{
			
			agency.groups[i].groupPrice+= agency.groups[i].people[j].ticketPrice;
		}
		cout << agency.groups[i].groupPrice << ",";
	}
	cout << endl;
	cout << endl;
}
//售票处售票
void ticketSale(travelAgency &agency, Passenger passengers[])     //引用
{
	int numPrice = 0;
	cout << "售票处开始售票" << endl;
	cout << "售票结束,营业额统计信息如下:" << endl;
	cout << "国内短途自由行:";
	for (int i = 0; i < 26; i++)
	{
		if (!passengers[i].isApplied && passengers[i].howToTravel==0
			&&passengers[i].destination==0)
		{
			numPrice += passengers[i].ticketPrice;
		}
	}
	cout << numPrice << "元,乘客姓名:";
	for (int i = 0; i < 26; i++)
	{
		if (!passengers[i].isApplied && passengers[i].howToTravel == 0
			&& passengers[i].destination == 0)
		{
			cout << passengers[i].name << ",";
		}
	}
	cout << endl; cout << endl; numPrice = 0;
	//"------------------------------------------------------------------------------"
	cout << "国内长途途自由行:";
	for (int i = 0; i < 26; i++)
	{
		if (!passengers[i].isApplied && passengers[i].howToTravel == 0
			&& passengers[i].destination == 1)
		{
			numPrice += passengers[i].ticketPrice;
		}
	}
	cout << numPrice << "元,乘客姓名:";
	for (int i = 0; i < 26; i++)
	{
		if (!passengers[i].isApplied && passengers[i].howToTravel == 0
			&& passengers[i].destination == 1)
		{
			cout << passengers[i].name << ",";
		}
	}
	cout << endl; cout << endl; numPrice = 0;
	//"------------------------------------------------------------------------------"
	cout << "国际游自由行:";
	for (int i = 0; i < 26; i++)
	{
		if (!passengers[i].isApplied && passengers[i].howToTravel == 0
			&& passengers[i].destination == 2)
		{
			numPrice += passengers[i].ticketPrice;
		}
	}
	cout << numPrice << "元,乘客姓名:";
	for (int i = 0; i < 26; i++)
	{
		if (!passengers[i].isApplied && passengers[i].howToTravel == 0
			&& passengers[i].destination == 2)
		{
			cout << passengers[i].name << ",";
		}
	}
	cout << endl; cout << endl; numPrice = 0;
	//"------------------------------------------------------------------------------"
	cout << "国内短途团购:";
	for (int i = 0; i < 5; i++)
	{
		if (agency.groups[i].destination == 0)
		{
			numPrice += agency.groups[i].groupPrice;
		}
	}
	cout << numPrice << "元,乘客姓名:";
	for (int i = 0; i < 5; i++)
	{
		if (agency.groups[i].destination == 0)
		{
			for (int j = 0; j < agency.groups[i].numPassenger; j++)
			{
				cout << agency.groups[i].people[j].name << ",";
			}
		}
	}
	cout << endl; cout << endl; numPrice = 0;
	//"------------------------------------------------------------------------------"
	cout << "国内长途团购:";
	for (int i = 0; i < 5; i++)
	{
		if (agency.groups[i].destination == 1)
		{
			numPrice += agency.groups[i].groupPrice;
		}
	}
	cout << numPrice << "元,乘客姓名:";
	for (int i = 0; i < 5; i++)
	{
		if (agency.groups[i].destination == 1)
		{
			for (int j = 0; j < agency.groups[i].numPassenger; j++)
			{
				cout << agency.groups[i].people[j].name << ",";
			}
		}
	}
	cout << endl; cout << endl; numPrice = 0;
	//"------------------------------------------------------------------------------"
	cout << "国际游团购:";
	for (int i = 0; i < 5; i++)
	{
		if (agency.groups[i].destination == 2)
		{
			numPrice += agency.groups[i].groupPrice;
		}
	}
	cout << numPrice << "元,乘客姓名:";
	for (int i = 0; i < 5; i++)
	{
		if (agency.groups[i].destination == 2)
		{
			for (int j = 0; j < agency.groups[i].numPassenger; j++)
			{
				cout << agency.groups[i].people[j].name << ",";
			}
		}
	}
	cout << endl; cout << endl; numPrice = 0;
}
int main()
{
	Passenger passengers[62];              //创建旅客
	random_people(passengers);				//随机初始化

	travelAgency agency;					//创建旅行社
	random_agency(agency,passengers);		//随机初始化,并把报团旅客假如旅行社
	travelApply(agency);					//旅行社报名

	ticketSale(agency, passengers);			//售票处售票
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值