//Mirza Sabrina Binti Mohd Salmi & Nurul Alis Alia Binti Mohamad Zamri Section 2
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstring>
#include<iomanip>
using namespace std;


int range(int highest,int lowest)
{
	return highest-lowest;
}

float avg(int total)
{
	return static_cast<float>(total)/20.0;
}

int getHighest(char uni[][7],int num[20], char highUni[7])
{
	int i;
	strcpy(highUni,uni[0]);
	int highest=num[0];
	for(i=0;i<20;i++)
	{
		if(num[i]>highest)
		{
			highest=num[i];
			strcpy(highUni,uni[i]);
		}
	}
	return highest;
}

int getLowest(char uni[][7], int num[20],char lowUni[7])
{
	int lowest=num[0],i;
	strcpy(lowUni,uni[0]);
	for(i=0;i<20;i++)
	{
		if(num[i]<lowest)
		{
			lowest=num[i];
			strcpy(lowUni,uni[i]);
		}
	}
	return lowest;
}

int calTotal(int num[20])
{
	int total=0,i;
	for(i=0;i<20;i++)
	{
		total+=num[i];
	}
	return total;
}

void getInput(char uni[][7],int intake[20],int enroll[20],int output[20])
{
	ifstream inp;
	int i;
	inp.open("input1.txt");
	if(!inp)
	{
		cout<<"Error!";
		exit(0);
	}
	for(i=0;i<20;i++)
	{
		inp>>uni[i]>>intake[i]>>enroll[i]>>output[i];	
	}
}

int main()
{
	char uni[20][7],lowUni[7],lowUni1[7],lowUni2[7],highUni[7],highUni1[7],highUni2[7];
	int intake[20],enroll[20],output[20],i;
	ifstream inp;
	ofstream out("output.txt");
	
	getInput(uni,intake,enroll,output);
	
	out<<setw(55)<<"NUMBER OF STUDENTS' INTAKE, ENROLMENT AND OUTPUT"<<endl
		<<setw(45)<<"IN PUBLIC UNIVERSITIES (2015)"
		<<"\n---------------------------------------------------------------\n"
		<<setw(11)<<"UNIVERSITY"<<setw(16)<<"INTAKE"<<setw(19)<<"ENROLMENT"<<setw(16)<<"OUTPUT"<<endl
		<<"---------------------------------------------------------------"<<endl;
	
	for(i=0;i<20;i++)
	{
		out<<"\t"<<left<<setw(7)<<uni[i]<<right<<setw(16)<<intake[i]<<setw(17)<<enroll[i]<<setw(18)<<output[i]<<endl;
	}
	int totIntake=calTotal(intake);
	int totEnroll=calTotal(enroll);
	int totOutput=calTotal(output);
	int lowIntake=getLowest(uni,intake,lowUni);
	int lowEnroll=getLowest(uni,enroll,lowUni1);
	int lowOutput=getLowest(uni,output,lowUni2);
	int highIntake=getHighest(uni,intake,highUni);
	int highEnroll=getHighest(uni,enroll,highUni1);
	int highOutput=getHighest(uni,output,highUni2);
	out<<"---------------------------------------------------------------\n\t"
		<<left<<setw(7)<<"TOTAL"<<right<<setw(16)<<totIntake<<setw(17)<<totEnroll<<setw(18)<<totOutput<<endl<<"\t"
		<<fixed<<setprecision(2)<<left<<setw(7)<<"AVERAGE"<<right<<setw(16)<<avg(totIntake)<<setw(17)<<avg(totEnroll)<<setw(18)<<avg(totOutput)<<endl
		<<"---------------------------------------------------------------"
		<<endl<<endl<<"THE LOWEST NUMBER OF STUDENTS' INTAKE    = "<<lowIntake<<" ("<<lowUni<<")"<<endl
		<<"THE LOWEST NUMBER OF STUDENTS' ENROLMENT = "<<lowEnroll<<" ("<<lowUni1<<")"<<endl
		<<"THE LOWEST NUMBER OF STUDENTS' OUTPUT    = "<<lowOutput<<" ("<<lowUni2<<")"
		<<endl<<endl<<"THE HIGHEST NUMBER OF STUDENTS' INTAKE    = "<<highIntake<<" ("<<highUni<<")"<<endl
		<<"THE HIGHEST NUMBER OF STUDENTS' ENROLMENT = "<<highEnroll<<" ("<<highUni1<<")"<<endl
		<<"THE HIGHEST NUMBER OF STUDENTS' OUTPUT    = "<<highOutput<<" ("<<highUni2<<")"
		<<endl<<endl<<"THE RANGE OF NUMBER OF STUDENTS' INTAKE    = "<<highIntake-lowIntake<<endl
		<<"THE RANGE OF NUMBER OF STUDENTS' ENROLMENT = "<<highEnroll-lowEnroll<<endl
		<<"THE RANGE OF NUMBER OF STUDENTS' OUTPUT    = "<<highOutput-lowOutput<<endl
		<<"---------------------------------------------------------------";

	inp.close();
	out.close();
	return 0;
	
}
