I am experiencing a runtime error with this program.
The problem is that if I want one of the weights to be .7 and the other to be .3, it will say there is an error. It should only be saying this if the weights do not equal 1.0, which they do!
I know it's something in the "getWeightedGrade" function, but I can't figure out why it is giving me this error message. Otherwise the program runs just fine.
Here is an example:
"
Student's Name: Amy
Type of test? midterm
Score? 99
Weight? (in decimal form) : .3
Type of test? final
Score? 87
Weight? (in decimal form): .7
Weights are not balanced. Try again.
Type of test? "
Can someone help me?
Code:
#include <iostream>
#include <string>
using namespace std;
class Grade
{
public:
string getID();
double getScore();
double getWeight();
void enterInfo();
double getWeightedGrade();
void showInfo();
void changeScore(double mCurve);
private:
string ID;
double mScore;
double mWeight;
};
class Student
{
public:
string showName();
Grade getFirstGrade();
Grade getSecondGrade();
void enterInfo();
bool areGoodWeights();
double getAverageOfBothWeighted();
void curveBothGrades(double CBG);
private:
string aName;
Grade firstGrade;
Grade secondGrade;
};
class Seminar
{
public:
void enterInfo();
Student getBestStudent();
void showTheFinalGrades();
void applyCurve(double thePercentToCurve);
private:
Student firstStudent;
Student secondStudent;
Student thirdStudent;
};
int main ()
{
Seminar EngLit ;
EngLit.enterInfo();
EngLit.showTheFinalGrades();
cout << "The student with the highest final grade is: " ;
cout << EngLit.getBestStudent().showName() << endl;
cout << "Curve amount? ";
double theCurveAmount;
cin >> theCurveAmount;
EngLit.applyCurve(theCurveAmount);
EngLit.showTheFinalGrades();
return 0;
}
string Grade::getID()
{
return ID;
}
double Grade::getScore()
{
return mScore;
}
double Grade::getWeight()
{
return mWeight;
}
void Grade::enterInfo()
{
cout << "Type of test? ";
cin >> ID;
cout << "Score? ";
cin >> mScore;
cout << "Weight? (in decimal form): ";
cin >> mWeight;
cout << endl;
}
double Grade::getWeightedGrade()
{
double temp;
temp = mScore * mWeight;
return temp;
}
void Grade::changeScore(double mCurve)
{
mScore = mScore + (mScore * mCurve);
}
string Student::showName()
{
return aName;
}
Grade Student::getFirstGrade()
{
return firstGrade;
}
Grade Student::getSecondGrade()
{
return secondGrade;
}
void Student::enterInfo()
{
cout << "Student's name? ";
cin >> aName;
love:
firstGrade.enterInfo();
secondGrade.enterInfo();
if (! areGoodWeights())
{
cout << "Weights are not balanced. Try again." << endl;
goto love;
}
}
bool Student::areGoodWeights()
{
if ((firstGrade.getWeight() + secondGrade.getWeight()) == 1.0)
{
return true;
}
else
{
return false;
}
}
double Student::getAverageOfBothWeighted()
{
double temp;
temp = firstGrade.getWeightedGrade() + secondGrade.getWeightedGrade();
return temp;
}
void Student::curveBothGrades(double CBG)
{
firstGrade.changeScore(CBG);
secondGrade.changeScore(CBG);
}
void Seminar::enterInfo()
{
firstStudent.enterInfo();
secondStudent.enterInfo();
thirdStudent.enterInfo();
}
Student Seminar::getBestStudent()
{
if (firstStudent.getAverageOfBothWeighted() > secondStudent.getAverageOfBothWeighted() && firstStudent.getAverageOfBothWeighted() > thirdStudent.getAverageOfBothWeighted())
{
return firstStudent;
}
else if (secondStudent.getAverageOfBothWeighted() > firstStudent.getAverageOfBothWeighted() && secondStudent.getAverageOfBothWeighted() > thirdStudent.getAverageOfBothWeighted())
{
return secondStudent;
}
else
{
return thirdStudent;
}
}
void Seminar::showTheFinalGrades()
{
cout << "Final Grades: " << endl;
cout << firstStudent.showName() << "\t" << firstStudent.getAverageOfBothWeighted() << endl;
cout << secondStudent.showName() << "\t" << secondStudent.getAverageOfBothWeighted() << endl;
cout << thirdStudent.showName() << "\t" << thirdStudent.getAverageOfBothWeighted() << endl;
}
void Seminar::applyCurve(double thePercentToCurve)
{
firstStudent.curveBothGrades(thePercentToCurve);
secondStudent.curveBothGrades(thePercentToCurve);
thirdStudent.curveBothGrades(thePercentToCurve);
}