#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
int main()
{
	const int SIZE=100;
	int matric[SIZE];
	string namegrade[SIZE][6];	
	double gradept[SIZE][5];
	double gpa[SIZE];
	int n, i=0, cnt=1;
	double tgp, sum=0, sum1=0, avg;
	fstream fileout ("outputdata.txt", ios::out);  
	fstream filein ("inputdata.txt", ios::in);
	if (!filein) 
	{
		cout<<"Input file could not be opened! Terminating!\n";
		return 0;
	}
    while(!filein.eof())
    {	
		filein>>matric[i];
		for(int j=0; j<6; j++)
    		{filein>>namegrade[i][j];}
    	i++;
	}
	n=i-1;
	for(int i=0; i<n; i++)  //determining grade point
	{
		for(int j=1; j<6; j++)
		{
			if(namegrade[i][j]=="A")
				gradept[i][j]=4.00;
			else if(namegrade[i][j]=="A-")
				gradept[i][j]=3.67;
			else if(namegrade[i][j]=="B+")
				gradept[i][j]=3.33;
			else if(namegrade[i][j]=="B")
				gradept[i][j]=3.00;
			else if(namegrade[i][j]=="B-")
				gradept[i][j]=2.67;
			else if(namegrade[i][j]=="C+")
				gradept[i][j]=2.33;
			else if(namegrade[i][j]=="F")
				gradept[i][j]=0.00;
		}
	}
	for(int i=0; i<n; i++)  //calculating gpa
	{
		sum=0;
		for(int j=1; j<6; j++)
	{	
		if(j<4)
			tgp=gradept[i][j]*3;
		else
			tgp=gradept[i][j]*2;
		sum=sum+tgp;
		gpa[i]=sum/13;   
	}
		sum1=sum1+gpa[i];
		avg=sum1/n;    //avg gpa
	}
    for(int i=0; i<n; i++)     //fileout
    {
    	fileout<<matric[i];
    	fileout<<"  "<<left<<setw(15)<<namegrade[i][0]<<" ";  
    	for(int j=1; j<6; j++)
    		fileout<<right<<setw(10)<<fixed<<setprecision(2)<<gradept[i][j]<<"		";
    	fileout<<fixed<<setprecision(2)<<gpa[i];
    	fileout<<endl;
	}
	fileout<<"Average GPA of all students : "<<avg<<endl;
	fileout<<"List of students who get GPA 3.5 and above :"<<endl;
	for(int i=0; i<n; i++)    
	{
		if(gpa[i]>=3.50)
    	{
    	fileout<<cnt<<". "<<namegrade[i][0]<<endl;
    	cnt++;
		}
    }
	fileout.close();
	filein.close();
}

