/****************************************************************/
/*	MEMBER 1: TEE HUI YOU (A19EC0170)							*/
/*	MEMBER 2: MOHAMED MUSTAFA MAHMOUD AlGANZORY (A19EC4015)		*/
/*	SECTION	: 02 												*/
/*	DATE	: 19/12/2019										*/
/****************************************************************/

#include <iostream>
#include <cstring>
#include <fstream>
#include <iomanip>
#define NUM_STATE 14
#define NUM_YEAR 10
using namespace std;

ofstream out ("output1.txt");

struct dataAcc
{
	int numAcc[10];
	string state;
	float avg;
};

void displayLine ()
{
	for (int i = 0; i < 98; i++)
		out << "-";
	out << endl;
}

float cal_Avg(int num[])
{
	int total = 0;
	float average = 0;
	
	for (int i = 0; i < NUM_YEAR; i++)
		total += num[i];
	
	for (int j = 0; j < NUM_STATE; j++)
		average = static_cast<float>(total) / NUM_YEAR;
	
	return average;
}

void find_HighLow(const dataAcc A[NUM_STATE])
{
	int high = 0, valJ;
	string Hstate;
	
	for (int i = 0; i < NUM_STATE; i++)
	{
		for (int j = 0; j < NUM_YEAR; j++)
		{
			if (A[i].numAcc[j] > high)
			{
				high = A[i].numAcc[j];
				valJ = j+1;
				Hstate = A[i].state;
			}
		}
	}
	
	out << "The highest number of road accidents = " << high 
		<< " at " << Hstate << " on " << valJ+2005 << endl;
}

int main ()
{
	dataAcc stu[NUM_STATE];
	int high;
	ifstream inp ("input1.txt");
	
	if (!inp)
	{
		cout << "Error! File input1.txt is missing!\n";
		exit(0);
	}

	for (int i = 0; i < NUM_STATE; i++)
	{
		for (int j = 0; j < NUM_YEAR; j++)
			inp >> stu[i].numAcc[j];
		
		string removeSpace;
		getline (inp, removeSpace, ' ');
		getline (inp, stu[i].state);
		
		stu[i].avg = cal_Avg(stu[i].numAcc);
	}
	
	displayLine ();
	
	out << setw(10) << "STATE";
	out << "\t";
	for (int i = 2006; i < 2016; i++)
		out << setw(7) << i;
	out << setw(10) << "AVERAGE\n";
	
	displayLine();
	
	for (int i = 0; i < NUM_STATE; i++)
	{
		out << left;
		out << setw(16) << stu[i].state;
		for (int j = 0; j < NUM_YEAR; j++)
		{
			out << right;
			out << setw(7) << stu[i].numAcc[j];
		} 
		out << right << setw(9) << fixed << setprecision(1) << stu[i].avg << endl;
	}
	
	displayLine();
	find_HighLow(stu);
	displayLine();
	
	inp.close();
	out.close();
	
	return 0;
}
