#include <iostream>
#include <string>
using namespace std;

class Passenger
{
	private:
		string name;
		int age;
	public:
		Passenger (string n, int a)
		{
			name=n;
			age=a;
		}
		
		int getAge() const
		{
			return age;
		}
		
		virtual void printDetails()
		{
			cout<<"Name: "<<name<<"\tAge: "<<age;
		}
};

class Kids: public Passenger
{
	private:
		string parentName;
		
	public:
		Kids(string n, int a, string pn): Passenger (n,a)
		{
			parentName=pn;
		}
		
	void printDetails()
	{
		Passenger::printDetails();
		cout<<"\t\tParents Name: "<<parentName<<endl;
	}
};

class Adults: public Passenger
{
	private:
		string job;
		
	public:
		Adults (string j, int a, string pn): Passenger(j,a)
		{
			job=j;
		}
		
	void printDetails()
	{
		Passenger::printDetails();
		cout<<"\t\tJob Title: "<<job<<endl;
	}
};

class Time
{
	private:
		int hour;
		int minute;
	
	public:
		Time (int h, int m)
		{
			hour=h;
			minute=m;
		}
		
		int getHour() const
		{
			return hour;
		}
		
		int getMinute() const
		{
			return minute;
		}
};

class Flight
{
	private:
		string id;
		string destination;
		Time *depart,*arrival;
		Passenger *p[10];    
        int noPs,noAd,noKd;
        
    public:
    	Flight (string i, string des, Time *dep, Time *arr)
    	{
    		id=i;
    		destination=des;
    		depart=dep;
    		arrival=arr;
    		noPs=0;
    		noAd=0;
    		noKd=0;
		}
		
		void printInfo() const
		{
			cout<<"Flight Number: "<<id<<endl;
			cout<<"Destination:   "<<destination<<endl;
			cout<<"Departure:     "<<depart->getHour()<<":";
			if (depart->getMinute()<10)
				cout<<"0";
			
			cout<<depart->getMinute()<<endl;
			cout<<"Arrival:       "<<arrival->getHour()<<":";
			if(arrival->getMinute()<10)
				cout<<"0";
			
			cout<<arrival->getMinute()<<endl;
			cout<<endl;
			cout<<"Number of Passengers: "<<noPs<<endl;
			cout<<"Number of Adults:     "<<noAd<<endl;
			cout<<"Number of Kids:       "<<noKd<<endl;
			cout<<endl;
			cout<<"Passengers Details: "<<endl;
			
			for (int i=0; i<noPs; i++)
				p[i]->printDetails();	
		}
		
		void addPassenger (Passenger *ps)
		{
			p[noPs++]=ps;
			
			if (ps->getAge()>12)
				noAd++;
				
			else
				noKd++;
		}
};

int main()
{
	Time des(8,10), arr(9,0);
	Flight fl("NAS7921", "Johore Bahru", &des, &arr);
	Adults ad[]={Adults ("Ali", 34, "Lecturer"),
				 Adults ("Goh",25,"Student")};
	Kids kd1("Azmi",3, "Ali");
	Passenger *p;
	
	
	for (int i=0;i<2;i++)
	{
		p= &ad[i];
		fl.addPassenger(p);
 }
	
	p=&kd1;
	fl.addPassenger(p);
	
	fl.printInfo();

	
	return 0;

}
