/****************************************************/
/*                                                  */
/*   CSCI 121: Principles of Computer Programming   */
/*   Programming Project #3                         */
/*   Due Wednesday, February 2                      */
/*   Programmed by Ian Giese                        */
/*                                                  */
/****************************************************/
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cctype>

using namespace std;

int main()
{
    int numStudents = 0, exam1, exam2, exam3, exam4, finalExam, hwPoints;
    double exam1Avg, exam2Avg, exam3Avg, exam4Avg, finalAvg, hwAvg;
    double studentAvg, totalAvg;
    char studentName[26];
    bool firstValue = true;
    
    ofstream output ("ClassReport.log");
    ifstream input ("assign3.txt");
    
    output << "Student Name           " << "Exam 1   " << "Exam 2   "
          << "Exam 3   " << "Exam 4   " << "Final Exam   " << "Homework   "
          << "Average" << endl << "--------------------   " << "------   "
          << "------   " << "------   " << "------   " << "----------   "
          << "--------   " << "-------" << endl;
    
    while (!input.eof())
    {
          input.getline(studentName, 25);
          input >> exam1 >> exam2 >> exam3 >> exam4 >> finalExam
                 >> hwPoints >> ws;
          
          studentAvg = (exam1 + exam2 + exam3 + exam4 + finalExam + hwPoints)/7;
          exam1Avg = (exam1Avg + exam1) / 2;
          exam2Avg = (exam2Avg + exam2) / 2;
          exam3Avg = (exam3Avg + exam3) / 2;
          exam4Avg = (exam4Avg + exam4) / 2;
          finalAvg = (finalAvg + finalExam) / 2;
          hwAvg = (hwAvg + hwPoints) / 2;
          totalAvg = (totalAvg + studentAvg) / 2;
          numStudents++;
          
          if (firstValue)
          {
                         exam1Avg = exam1;
                         exam2Avg = exam2;
                         exam3Avg = exam3;
                         exam4Avg = exam4;
                         finalAvg = finalExam;
                         hwAvg = hwPoints;
                         totalAvg = studentAvg;
                         firstValue = false;
          }
          
          output << left << setw(20) << studentName << right << setw(9)
                 << exam1 << setw(9) << exam2 << setw(9) << exam3 
                 << setw(9) << exam4 << setw(13)
                 << finalExam << setw(11) << hwPoints << setw(10)
                 << studentAvg << endl;
    }
    output << endl << "Number of Students: " << numStudents
           << fixed << showpoint << setprecision(1)
           << endl << "Exam Averages: " << exam1Avg << "   " << exam2Avg
           << "   " << exam3Avg << "   " << exam4Avg
           << endl << "Final Exam Average: " << finalAvg
           << endl << "Homework Average: " << hwAvg
           << endl << "Total Average: " << totalAvg;
    
    cout << "Press enter to continue...";
    cin.get();
    return 0;
}

