/*------------------------------------------------------------------------------
Description:  Transcript class for Assignment 1
Author: Chris Huyler
Language: C++
Name: Transcript.h
Date: February 2, 2000
------------------------------------------------------------------------------*/
#include "Semester.h"
#include "Student.h"
#include <conio.h>

class Transcript {
	public:
	 Transcript();                                 // NULL constructor
    void PrintGradeReport();
    void PrintTranscript();				 			  // prints out transcript
	 void ResetTranscriptStats();						  // resets statistics so a new...
    															  // transcript can be printed
	 void CalcTranscriptStats(int counter);		  // calculates statistics
    void SetInitTranscript();							  // sets all transcript attributes
    void Setstudent();									  // sets student
    void Addsemester();									  // adds semster to transcript
    bool Removesemester();								  // removes semester from transcript
    Semester& Getsemester();					 		  // gets specific semester
    void Addcourse();									  // Adds course
    void Removecourse();								  // Removes course
    Student& Getstudent();								  // gets student
    float& Getcmltve_ttl_credits();					  // gets cumulative credits
    float& Getcmltve_ttl_earned_credits();        // gets cumulative earned credits
    float& Getcmltve_ttl_GPA_credits();			  // gets gpa credits
    float& Getcmltve_gpa();							  // gets cumulative gpa
    float& Getcmltve_quality_pts();					  // gets cumulative quality points


	private:
    int Findsemester();									  // finds semester in array and
    															  // returns address
	 Semester semesters[12];
    Student a_student;
    int semester_counter;
    float cmltve_tr_credits;
    float cmltve_ttl_credits;
    float cmltve_ttl_earned_credits;
    float cmltve_ttl_GPA_credits;
    float cmltve_gpa;
    float cmltve_quality_pts;


};

Transcript::Transcript(){
	semester_counter = 0;
	ResetTranscriptStats();
}

void Transcript::PrintTranscript(){

   for(int i=0; i<semester_counter; i++){
   	clrscr();
		cout << "     Student Name: " << a_student.Getname();
      cout << "     Advisor:      " << a_student.Getadvisor();
   	semesters[i].PrintSemesterTranscript();
      ResetTranscriptStats();
      CalcTranscriptStats(i);
      cout << "\n\nCUMULATIVE:   "
           << cmltve_tr_credits << "     "
           << "   "
           << cmltve_ttl_credits << "        "
           << cmltve_ttl_earned_credits <<"        "
           << cmltve_ttl_GPA_credits << "     "
           << cmltve_quality_pts << "   "
           << cmltve_gpa << endl
           << "\nPress space...";
      getch();
   }
   cout << "\n\n                   *** End of Transcript ***";
}
void Transcript::PrintGradeReport(){
	int temp = Findsemester();
   if(temp != -1)
   	semesters[temp].PrintSemesterGradeReport();
}
void Transcript::ResetTranscriptStats(){
   cmltve_tr_credits = 0;
   cmltve_ttl_credits = 0;
   cmltve_ttl_earned_credits = 0;
   cmltve_ttl_GPA_credits = 0;
   cmltve_gpa = 0;
   cmltve_quality_pts = 0;
}
void Transcript::CalcTranscriptStats(int counter){
	for(int i=0; i<counter+1; i++){
      semesters[i].ResetSemesterStats();
      semesters[i].CalcSemesterStats();
   	cmltve_ttl_credits += semesters[i].Gettotal_credits();
      cmltve_ttl_earned_credits += semesters[i].Gettotal_earned_credits();
      cmltve_ttl_GPA_credits += semesters[i].Gettotal_GPA_credits();
      cmltve_quality_pts += semesters[i].Getquality_pts();
   }
   cmltve_gpa = cmltve_quality_pts / cmltve_ttl_GPA_credits;
}

void Transcript::SetInitTranscript(){
   Setstudent();
   char ans;
   cout << "\n\nEnter a semster(y/n)?: ";
   cin >> ans;
   while(ans == 'y'){
      Addsemester();
      cout << "\n\nEnter another semester(y/n)?: ";
      cin >> ans;
   }
}
void Transcript::Setstudent(){
	a_student.SetInitStudent();
}

void Transcript::Addsemester(){
	semesters[semester_counter].SetInitSemester();
   semester_counter++;
}
bool Transcript::Removesemester(){
   cout << "\n\nWhich Semester would you like to remove?";
   int temp = Findsemester();
   if(temp != (-1)){
   	for(int i=temp; i<semester_counter; i++)
      	semesters[i] = semesters[i+1];
      semester_counter--;
      return (true);
   }
   else
   	return(false);
}

Semester& Transcript::Getsemester(){
	return(semesters[Findsemester()]);
}
void Transcript::Addcourse(){
	cout << "\n\nWhich Semester would you like to add a course to? ";
	int temp = Findsemester();
   semesters[temp].Addcourse();
}
void Transcript::Removecourse(){
	cout << "\n\nWhich Semester would you like to remove a course from? ";
   int temp = Findsemester();
   semesters[temp].Removecourse();
}
Student& Transcript::Getstudent(){
	return(a_student);
}
float& Transcript::Getcmltve_ttl_credits(){
	return(cmltve_ttl_credits);
}
float& Transcript::Getcmltve_ttl_earned_credits(){
	return(cmltve_ttl_earned_credits);
}
float& Transcript::Getcmltve_ttl_GPA_credits(){
	return(cmltve_ttl_GPA_credits);
}
float& Transcript::Getcmltve_gpa(){
	return(cmltve_gpa);
}
float& Transcript::Getcmltve_quality_pts(){
	return(cmltve_quality_pts);
}

int Transcript::Findsemester(){
	int temp_term, temp_year;
   int temp_counter = semester_counter;
	cout << "\nSelect term -\n  1) Fall\n  2) Spring\n  3) Summer";
   cout << "\nEnter number then press ENTER: ";
   cin >> temp_term;
   cout << "Enter year of term (eg. ""2000""): ";
   cin >> temp_year;
   bool found = false;
   while(temp_counter >= 0 && !found)
   	if (semesters[temp_counter].Getterm() == temp_term)
         if(semesters[temp_counter].Getyear() == temp_year)
         	found = true;
         else
            temp_counter--;
      else
      	temp_counter--;
   return(temp_counter);
}


