#include <iostream> // JACK LEE /990212-01-5315/ A19EC0057 / SECTION 07 / 26.11.2019
#include <iomanip> // MUHAMMAD SUHAIL / C0082352 / A19EC0269 / SECTION 07 / 26.11.2019
#include <fstream>
#include <cstring>
using namespace std ;
void getInput (string Name [20],	int num [20][3] );
void getLowest(int[20][3] , string[20]);
void getHighest(int value[20][3], string Name[20]);
void calAv (int value[20][3]);
void intoout (string Name [20],	int num [20][3]);
void findHL (int value[20][3], string Name[20]);

int main ()
{
	string Name [20];
	int num [20][3] ;
	getInput(Name,num);
	intoout(Name,num) ;
	calAv(num) ;
	findHL (num,Name) ;
}

void getInput (	string Name [20],	int num [20][3] )
{
	ifstream inp ;
	inp.open("input1.txt") ;
	if(!inp)
	{
		cout << "Error" << endl ;
		exit(0) ;
	}
	for (int i = 0 ; i < 20 ; i ++)
	{
		inp >> Name [i];
		cout << Name[i] << "\t";
		for (int j = 0 ; j < 3 ; j ++)
		{
			inp >> num[i][j] ;
			cout << num[i][j] << "\t"; 
		}
		cout << endl ;
	}
	
}

int calTotal ()
{
	int n = 0 ;
	n += 1 ;
	
	return n ;
}

void getLowest(int value[20][3], string Name[20])
{
	fstream out;
	out.open("output.txt",ios::app);
	int lowest1 = 9999999 ;
	int lowest2 = 9999999 ;	
	int lowest3 = 9999999 ;
	string nama1 , nama2, nama3 ;
	int j = 0 ;

	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] < lowest1)
		{
			lowest1 = value[i][j] ;
			nama1 = Name [i];
		}
	}
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] < lowest2)
		{
			lowest2 = value[i][j] ;
			nama2 = Name [i];
		}
	}	
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] < lowest3)
		{
			lowest3 = value[i][j] ;
			nama3 =Name [i];
		}
	}

	out << "THE LOWEST NUMBER OF STUDENTS' INTAKE    = " << lowest1 << "\t" << "(" << nama1 << ")" << endl ;
	out << "THE LOWEST NUMBER OF STUDENTS' ENROLMENT = " << lowest2 << "\t" << "(" << nama2 << ")" << endl ;
	out << "THE LOWEST NUMBER OF STUDENTS' ENROLMENT = " << lowest3 << "\t" << "(" << nama3 << ")" << endl ;
	out << endl ;
		
}

void getHighest(int value[20][3], string Name[20])
{
	fstream out;
	out.open("output.txt",ios::app);
	int highest1 = -9999999 ;
	int highest2 = -9999999 ;	
	int highest3 = -9999999 ;
	string nama1 , nama2, nama3 ;
	int j = 0 ;

	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] > highest1)
		{
			highest1 = value[i][j] ;
			nama1 = Name [i];
		}
	}
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] > highest2)
		{
			highest2 = value[i][j] ;
			nama2 = Name [i];
		}
	}	
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] > highest3)
		{
			highest3 = value[i][j] ;
			nama3 =Name [i];
		}
	}

	out << "THE HIGHEST NUMBER OF STUDENTS' INTAKE    = " << highest1 << "\t" << "(" << nama1 << ")" << endl ;
	out << "THE HIGHEST NUMBER OF STUDENTS' ENROLMENT = " << highest2 << "\t" << "(" << nama2 << ")" << endl ;
	out << "THE HIGHEST NUMBER OF STUDENTS' ENROLMENT = " << highest3 << "\t" << "(" << nama3 << ")" << endl ;
	out << endl ;
						
}

void intoout (string Name [20],	int num [20][3])
{
	ofstream out ;
	out.open("output.txt") ;
	
	out << "	" << "NUMBER OF STUDENTS' INTAKE, ENROLMENT AND OUTPUT " << endl ;
	out << "			" << "IN PUBLIC UNIVERSITIES (2015)" << endl ;
	out << endl ;
	out << "---------------------------------------------------------------" << endl ;
	out << setw(15) << " UNIVERSITY" << setw(14) << "INTAKE" << setw(13) << "ENROLMENT";
	out << setw(10) << "OUTPUT" << endl ;
	out << "---------------------------------------------------------------" << endl ;	
	for (int i = 0 ; i < 20 ; i ++)
	{
		out << "		" <<setw(10) << left <<  Name[i] ;
		for (int j = 0 ; j < 3 ; j ++)
		{
			
			out << setw(11) << right << num[i][j] ; 
		}
		out << endl ;
	}
}

void calAv (int value[20][3])
{
	fstream out;
	out.open("output.txt",ios::app);
	int j = 0 ;
	double total1, total2, total3 ;
	double AV1, AV2, AV3 ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		total1 += value[i][j] ;
	}
	AV1 = total1 /20 ;
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		total2 += value[i][j] ;
	}
	AV2 = total2 /20 ;	
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		total3 += value[i][j] ;
	}
	AV3 = total3 /20 ;
	
	cout << total1 << "\t" << AV1 ;
	
	out << "---------------------------------------------------------------" << endl ;
	out << "		" <<setw(10) << left << "TOTAL" ;
	out << setw(11) << right << total1 ; 		
	out << setw(11) << right << total2 ;
	out << setw(11) << right << total3 << endl ;
	out << "		" <<setw(10) << left << "AVERAGE" ;	
	out << fixed << setprecision(2) ;
	out << setw(11) << right << AV1 ;	
	out << setw(11) << right << AV2 ;
	out << setw(11) << right << AV3 << endl ;
	out << "--------------------------------------------------------------- " << endl ;
	out << endl ;
}

void findHL (int value[20][3], string Name[20])
{
	fstream out;
	out.open("output.txt",ios::app);
	int lowest1 = 9999999 ;
	int lowest2 = 9999999 ;	
	int lowest3 = 9999999 ;
	int j = 0 ;
	int range1, range2, range3;
	
	getLowest(value, Name);
	getHighest(value, Name);

	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] < lowest1)
		{
			lowest1 = value[i][j] ;
		}
	}
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] < lowest2)
		{
			lowest2 = value[i][j] ;
		}
	}	
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] < lowest3)
		{
			lowest3 = value[i][j] ;
		}
	}
		
	int highest1 = -9999999 ;
	int highest2 = -9999999 ;	
	int highest3 = -9999999 ;
	
	j = 0 ;

	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] > highest1)
		{
			highest1 = value[i][j] ;
		}
	}
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] > highest2)
		{
			highest2 = value[i][j] ;
		}
	}	
	j++ ;
	for (int i = 0 ; i < 20 ; i ++)
	{
		if (value[i][j] > highest3)
		{
			highest3 = value[i][j] ;
		}
	}						
	range1 = highest1 -lowest1 ;
	range2 = highest2 -lowest2 ;
	range3 = highest3 -lowest3 ;
	
	out << "THE RANGE OF NUMBER OF STUDENTS' INTAKE    = " << range1 << endl ;
	out << "THE RANGE OF NUMBER OF STUDENTS' ENROLMENT = " << range2 << endl ;	
	out << "THE RANGE OF NUMBER OF STUDENTS' OUTPUT    = " << range3 << endl ;		
	out << endl ;
	out << "---------------------------------------------------------------" ;
}








