// gpa2.cpp
#include <iostream>
#include <cctype>

using namespace std;

int main() {

  int gpa_credits, gpa_points, class_credits, class_points;
  char grade, another_student;
  float gpa;

  do {                        // loop per student
    gpa_credits = 0;
    gpa_points = 0;

    cout << endl << "Enter lines of: credit grade  (-1 to quit)" << endl;

    cout << "Enter credit and grade: ";
    cin >> class_credits >> grade;

    while (class_credits != -1) {             // loop per class
      grade = toupper(grade);
      // error check the input
      if (class_credits<1 || class_credits>5)
	cout << "ERROR credits value out of range.  Must be between 1 and 5"
	     << endl << "Reenter this classes' credits and grade." << endl;

      else if (grade!='A' && grade!='B' && grade!='C' && grade!= 'D' &&
	       grade!='F' && grade!='S' && grade!='N')
	cout << "ERROR invalid grade.  Must be A, B, C, D, F, S, or N"
	     << endl << "Reenter this classes' credits and grade." << endl;

      // input is valid
      else if (grade!='S' && grade!='N') {

	gpa_credits += class_credits;

	switch (grade) {
	case 'A': class_points = class_credits * 4;
		  break;
	case 'B': class_points = class_credits * 3;
		  break;
	case 'C': class_points = class_credits * 2;
		  break;
	case 'D': class_points = class_credits;
		  break;
	default:  class_points = 0;
	}
	gpa_points += class_points;
      }

    cout << "Enter credit and grade: ";
    cin >> class_credits >> grade;
    }

    gpa = float(gpa_points) / gpa_credits;
    cout << endl << "GPA: " << gpa << endl << endl;

    cout << "Another student?: (y or n) ";
    cin >> another_student;

  } while (toupper(another_student) == 'Y');
}
