#include <iostream>  // JACK LEE /990212-01-5315/ A19EC0057 / SECTION 07 / 17.12.2019
#include<fstream> // MUHAMMAD SUHAIL / C0082352 / A19EC0269 / SECTION 07 / 17.12.2019
#include <iomanip>
#include<cstring>
using namespace std ;

float cal_Avg(int numAcc[]);
void find_HighLow(struct dataAcc DATA[],int year []);
void displayLine();

const int NUM_STATE  = 14 ;
const int NUM_YEAR = 10 ;

ofstream out ("output.txt") ;

struct dataAcc 
{ 
	int numAcc[10]; //number of road accidents from 2006-2015 
	string state; //states in Malaysia 
	float avg; //average number of road accidents for 2006-2015 
};

int main()
{
	int year [NUM_YEAR] = {2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015};
	float avg[NUM_STATE] ;
	dataAcc DATA [NUM_STATE] ;
	ifstream op;
	op.open("input1.txt") ;
	
	for (int i = 0 ; i < NUM_STATE ; i ++)
	{
		for (int j = 0 ; j < NUM_YEAR ; j ++)
		{
			op >> DATA[i].numAcc[j] ;
		}
		avg[i] = cal_Avg(DATA[i].numAcc) ;
		getline(op, DATA[i].state);
	}
	op.close();
	
	displayLine();
	out << setw(10) << "STATE" << setw(15);
	for (int i = 0; i < NUM_YEAR; i ++)
	{
		out << year[i] << setw(7) ;
	}
	out << "  AVERAGE" ;
	out << endl;
	out << setw(0) ;
	displayLine();
	for (int i = 0 ; i < NUM_STATE ; i ++)
	{
		out << left << setw(18) << DATA[i].state;
		for (int j = 0 ; j < NUM_YEAR ; j ++)
		{
			out << right << setw(7) << DATA[i].numAcc[j];
		}
		out << setw(9) << fixed << setprecision(1) << avg[i];
		out << endl ;
	}
	displayLine();
	out << endl ;
	find_HighLow (DATA,year) ;
	out << endl ;	
	displayLine();	
}

float cal_Avg(int numAcc[])
{
	float total = 0 ;
	for (int i = 0 ; i < NUM_YEAR ; i ++)
	{
		total = total + numAcc[i] ;
	}
	return total/10;
}

void displayLine()
{
	for (int i = 0; i < 98; i++)
		{out << "-";}
		out << endl;
}

void find_HighLow(struct dataAcc DATA[],int year [])
{
	int Highest = -9999999 ;
	string State;
	int Year ;
	for (int i = 0 ; i < NUM_STATE ; i ++)
	{
		for (int j = 0 ; j < NUM_YEAR ; j ++)
		{
			if (DATA[i].numAcc[j] > Highest)
			{
				Highest = DATA[i].numAcc[j];
				State = DATA[i].state;
				Year = year[j] ;
			}
		}
	}
	out << "The highest number of road accidents = " << Highest << " at" << State << "on " << Year << endl ;
}
