#include #include #include //#include #include "student.h" using namespace std; // obtain a random digit char GetRandDigit(); // obtain a random std id string GetRandomValidAcctNum (); // default constructor Student::Student() { stdID = GetRandomValidAcctNum(); first = "unknown"; last = "unknown"; currYr = fr; major = "Undeclared"; credits = 0; gradePoints = 0; gpa = 0; balanceDue = 0; } // full constructor // note defaults sepcified in the header file //Student::Student(string fname, string lname, string id, year yr = fr, string maj = "Undeclared", // double cred = 0, double points = 0, double ave = 0, double bal = 0) { Student::Student(string fname, string lname, string id, year yr, string maj, double cred, double points, double ave, double bal) { stdID = id; first = fname; last = lname; currYr = yr; major = maj; credits = cred; gradePoints = points; gpa = ave; balanceDue = bal; } // inspectors string Student::GetStdID() const { return stdID; } string Student::GetFirst() const { return first; } string Student::GetLast() const { return last; } year Student::GetCurrYr() const { return currYr; } string Student::GetMajor() const { return major; } double Student::GetCredits() const { return credits; } double Student::GetGradePoints() const { return gradePoints; } double Student::GetGpa() const { return gpa; } double Student::GetBalanceDue() const { return balanceDue; } // mutators void Student::SetStdID(string id) { stdID = id; } void Student::SetFirst(string fname) { first = fname; } void Student::SetLast(string lname) { last = lname; } // defaults to fr void Student::SetCurrYr(year yr) { currYr = yr; } // defaults to undeclared void Student::SetMajor(string maj) { major = maj; } // defaults to 3 credits and 6 points void Student::AddClassResults(double cred, double points) { // ensure credits is positive and not more than 6 // and grade points are not negative if ((cred > 0) && (cred <= 6) && (points >= 0)) { credits += cred; gradePoints += points; gpa = gradePoints / credits; } else { cerr << "bad info for add class "; } } // defaults to 0 // should probably also ensure that gpa is correct void Student::SetCredits(double cred) { // ensure credits is positive if (cred >= 0) { credits = cred; gpa = gradePoints / credits; } else { cerr << "bad info for SetCredits "; } } // defaults to 0 // should probably also ensure that gpa is correct void Student::SetGradePoints(double points) { // ensure grade points is positive if (points >= 0) { gradePoints = points; gpa = gradePoints / credits; } else { cerr << "bad info for SetGradePoints "; } } // defaults to 0 // should probably never be used except internally // should probably also ensure that gpa is correct void Student::SetGpa(double ave) { gpa = ave; } // defaults to 0 void Student::SetBalanceDue(double bal) { balanceDue = bal; } // output a textual representation of a Student ostream & operator << (ostream & out, Student & aStudent) { out << setw(5) << aStudent.GetStdID() << " : " << setw(10) << aStudent.GetFirst() << " : " << setw(10) << aStudent.GetLast() << " : " << setw(5) << aStudent.GetCurrYr()+1 << " : " << setw(10) << aStudent.GetMajor() << " : " << fixed << setprecision(1) << setw(10) << aStudent.GetCredits() << " : " << fixed << setprecision(1) << setw(10) << aStudent.GetGradePoints() << " : " << fixed << setprecision(2) << setw(10) << aStudent.GetGpa() << " : " << fixed << setprecision(2) << setw(10) << aStudent.GetBalanceDue() << " : "; return out; } // reports whether one student has greater gpa than another bool operator > (const Student & lhs, const Student & rhs){ if (lhs.GetGpa() > rhs.GetGpa() ) { return true; } else { return false; } } // reports whether one Student has same balance as another bool operator == (const Student & lhs, const Student & rhs) { if (lhs.GetGpa() == rhs.GetGpa() ) { return true; } else { return false; } } // reports whether one Student has lower balance than another bool operator < (const Student & lhs, const Student & rhs) { if ( ! (lhs > rhs) && ! (lhs == rhs)) { return true; } return false; } // First some non-object-oriented functions useful to the class // stolen from Account class // obtain a random digit char GetRandDigit() { char dig; int x = rand() % 10; switch (x) { case 0: dig = '0'; break; case 1: dig = '1'; break; case 2: dig = '2'; break; case 3: dig = '3'; break; case 4: dig = '4'; break; case 5: dig = '5'; break; case 6: dig = '6'; break; case 7: dig = '7'; break; case 8: dig = '8'; break; case 9: dig = '9'; break; default: dig = 'X'; // should never happen } return dig; } // Develop a random account number by randomly generating chars and // concatenating them together // problem is that it doesn't result in number that is // guaranteed to not already be being used // stolen from account class string GetRandomValidAcctNum () { string acct = ""; // assume 4 digit account numbers for (int cnt = 0;cnt < 4;cnt++) { // generate a random digit char newDig = GetRandDigit(); // add to the end of account number so far acct += newDig; } // really should add a check digit return acct; }