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

class Menu{
	public:
		void Mainmenu();

   private:
   	void ChangeStudentMenu();
      void ChangeSemesterMenu();
      void EditSemesterMenu();
      void ChangeCourseMenu();
      void EditCourseMenu(Semester *a_semester);
      Transcript a_transcript;
};


void Menu::Mainmenu(){
   int number = 0;
   while(number != 7){
   	clrscr();
		cout << "\n\nTranscript Editor -"
   	  << "\n  1) Create a new Transcript"
        << "\n  2) Print Transcript"
        << "\n  3) Print Grade Report for Semester"
        << "\n  4) Change Student Information"
        << "\n  5) Change Semester Information"
        << "\n  6) Change Course Information"
        << "\n  7) Quit to system"
        << "\nEnter choice: ";
   	cin >> number;
   	switch(number){
   		case 1: a_transcript.SetInitTranscript(); break;
      	case 2: a_transcript.PrintTranscript(); break;
        	case 3: a_transcript.PrintGradeReport(); break;
      	case 4: ChangeStudentMenu(); break;
      	case 5: ChangeSemesterMenu(); break;
      	case 6: ChangeCourseMenu(); break;
      	case 7: clrscr();
         			cout << "\n\n\n\t\t\t\tGOOD BYE!";
                  break;
      }
 	}
}
void Menu::ChangeStudentMenu(){
   bool done = false;
	int number;
   Student *a_student;
   a_student = &a_transcript.Getstudent();
   while(!done){
		clrscr();
		a_student->PrintStudentInfo();
   	cout << "\n\nWhat would you like to change?"
   			<< "\n  1) Name"
         	<< "\n  2) ID"
         	<< "\n  3) Address"
         	<< "\n  4) Advisor"
         	<< "\n  5) Nothing(Back to main)"
         	<< "\nEnter choice: ";
      cin >> number;
   	switch(number){
   		case 1: a_student->Setname();break;
         case 2: a_student->Setid();break;
         case 3: a_student->Setaddress();break;
         case 4: a_student->Setadvisor();break;
         case 5: done = true; break;
      }
   }
}
void Menu::ChangeSemesterMenu(){
	bool done = false;
	int number;
   while(!done){
   	clrscr();
      	cout << "\n\nWhat would you like to do?"
         	  << "\n  1) Add a Semester"
              << "\n  2) Remove a Semester"
              << "\n  3) Edit Semester Information"
              << "\n  4) Nothing(Back to main)"
              << "\nEnter choice: ";
         cin >> number;
         switch(number){
         	case 1: a_transcript.Addsemester(); break;
            case 2: a_transcript.Removesemester(); break;
            case 3: EditSemesterMenu(); break;
            case 4: done = true; break;
         }
    }
}

void Menu::EditSemesterMenu(){
   int number;
   bool done = false;
   Semester *a_semester;
	cout << "\nEnter the semester you would like to edit -";
	a_semester = &a_transcript.Getsemester();
  	while(!done) {
		clrscr();
      cout << "\n           Term:   ";
      switch(a_semester->Getterm()){
      	case 1: cout << "FALL";break;
         case 2: cout << "SPRING";break;
         case 3: cout << "SUMMER";break;
      }
      cout << "\n           Year:   " << a_semester->Getyear()
        	  << "\n           Campus: " << a_semester->Getcampus()
        	  << "\n           Major:  " << a_semester->Getmajor();
      cout << "\n\nWhat would you like to change?"
        	  << "\n  1) Semester Term"
           << "\n  2) Semester Year"
           << "\n  3) Campus Semester was completed"
           << "\n  4) Declared Major for Semester"
           << "\n  5) Nothing(Back to Semester)"
           << "\nEnter choice: ";
      cin  >> number;
      switch(number){
      	case 1: a_semester->Setterm();break;
        	case 2: a_semester->Setyear();break;
        	case 3: a_semester->Setcampus();break;
        	case 4: a_semester->Setmajor();break;
        	case 5: done = true;
      }
   }
}
void Menu::ChangeCourseMenu(){
   clrscr();
   bool done = false;
   int number;
	Semester *a_semester;
   cout << "\n\nFirst please enter the semester for changing courses -";
   a_semester = &a_transcript.Getsemester();
   while(!done){
   	clrscr();
      cout << "\n\nWhat would you like to do?"
           << "\n  1) Add a Course"
           << "\n  2) Remove a Course"
           << "\n  3) Edit a Course"
           << "\n  4) Nothing(Back to Main)"
           << "\nEnter choice: ";
      cin  >> number;
      switch(number){
      	case 1: a_semester->Addcourse(); break;
         case 2: a_semester->Removecourse(); break;
         case 3: EditCourseMenu(a_semester); break;
         case 4: done = true; break;
      }
   }
}
void Menu::EditCourseMenu(Semester *a_semester){
   bool done = false;
   int number;
   char ans;
   Course *a_course;
   cout << "\nWhich course? ";
   a_course = &a_semester->Getcourse();
   while(!done) {
   	clrscr();
      cout << "\n\n             Course Name:    " << a_course->Getcourse_name()
      	  << "\n             Course Credits: " << a_course->Getcredits()
           << "\n             Instructor:     " << a_course->Getinstructor()
           << "\n             Pass/Fail?:     ";
      if(a_course->GetPF())
      	cout << "True";
      else
      	cout << "False";
      cout << "\n             Grade:          ";
      a_course->Printgrade();
      cout << "\n\nWhat would you like to change?"
           << "\n  1) Name "
           << "\n  2) Credits"
           << "\n  3) Instructor"
           << "\n  4) Pass/Fail"
           << "\n  5) Grade"
           << "\n  6) Withdraw from this course"
           << "\n  7) Nothing(Back to Course)"
           << "\nEnter choice: ";
      cin  >> number;
      switch(number){
      	case 1: a_course->Setcourse_name();break;
         case 2: a_course->Setcredits();break;
         case 3: a_course->Setinstructor();break;
         case 4: a_course->SetPF();
      				cout << "\n Would you like to change the grade to reflect this change(y/n)?";
                  cin >> ans;
                  if(ans == 'y') a_course->Setgrade(); break;
         case 5: a_course->Setgrade();break;
         case 6: a_course->SetWD();break;
         case 7: done = true;break;
      }
   }
}




