#include #include using namespace std; // // Base class // class lu_student { public: lu_student(int ssn); string get_name(); int get_ssn(); int get_total_hr(); double get_gpa(); void change_name(string new_name); double update(int hr, char grade); private: int my_ssn; string my_name; double my_gpa; int total_hr; }; lu_student::lu_student(int ssn) :my_ssn(ssn), my_gpa(0), total_hr(0) {} string lu_student::get_name() { return my_name; } int lu_student::get_ssn() { return my_ssn; } int lu_student::get_total_hr() { return total_hr; } double lu_student::get_gpa() { return my_gpa; } void lu_student::change_name(string new_name) { my_name = new_name; } double lu_student::update(int hr, char grade) { int p; switch (toupper(grade)) { case 'A': p=4; break; case 'B': p=3; break; case 'C': p=2; break; case 'D': p=1; break; case 'F': p=0; break; default : cout << "Invalid Grade!!"; return my_gpa; } my_gpa = (my_gpa*total_hr + p*hr)/(total_hr+hr); total_hr += hr; return my_gpa; } void print_lu_student(lu_student s) { cout << s.get_name() << " SSN:" << s.get_ssn(); cout << " Total Hr: " << s.get_total_hr(); cout << " GPA = " << s.get_gpa() << endl; } void use_lu_student() { char grade; string name; lu_student s(123456789); cout << "Input name:"; cin >> name; s.change_name(name); while (true) { cout << "\n Input a grade (x to exit):"; cin >> grade; if (toupper(grade) == 'X') break; s.update(3,grade); print_lu_student(s); } } // // // Derived class // class cs_student : public lu_student { public: cs_student(int ssn); int get_cs_hr(); double get_cs_gpa(); double cs_update(int hr, char grade); void change_name(string first_name, string last_name); private: double my_cs_gpa; int cs_hr; }; cs_student::cs_student(int ssn) :lu_student(ssn), my_cs_gpa(0), cs_hr(0) { } int cs_student::get_cs_hr() { return cs_hr; } double cs_student::get_cs_gpa() { return my_cs_gpa; } void cs_student::change_name(string first_name, string last_name) { lu_student::change_name(first_name + " " + last_name); } double cs_student::cs_update(int hr, char grade) { int p; switch (toupper(grade)) { case 'A': p=4; break; case 'B': p=3; break; case 'C': p=2; break; case 'D': p=1; break; case 'F': p=0; break; default : cout << "Invalid Grade!!"; return my_cs_gpa; } my_cs_gpa = (my_cs_gpa*cs_hr + p*hr)/(cs_hr+hr); cs_hr += hr; update(hr,grade); return my_cs_gpa; } void print_cs_student(cs_student s) { cout << endl << s.get_name() << " SSN:" << s.get_ssn(); cout << "\nTotal Hr: " << s.get_total_hr(); cout << " GPA = " << s.get_gpa(); cout << "\n CS Hr: " << s.get_cs_hr(); cout << " CS GPA = " << s.get_cs_gpa() << endl; } void use_cs_student() { char grade; string fname,lname; cs_student s(123456789); cout << "Input first name:"; cin >> fname; cout << "Input last name:"; cin >> lname; s.change_name(fname,lname); while (true) { cout << "\n Input a CS grade (x to exit):"; cin >> grade; if (toupper(grade) == 'X') break; s.cs_update(3,grade); cout << "Input a none CS grade (x to exit):"; cin >> grade; if (toupper(grade) == 'X') break; s.update(3,grade); print_cs_student(s); } print_lu_student(s); // No problem!! } // // // Derived class // class cpp_student : public cs_student { public: cpp_student(int ssn); int get_score(); char get_grade(); void update(int score); private: int my_score; }; cpp_student::cpp_student(int ssn) : cs_student(ssn), my_score(0) { } int cpp_student::get_score() { return my_score; } char cpp_student::get_grade() { if (my_score >= 90) return 'A'; if (my_score >= 80) return 'B'; if (my_score >= 70) return 'C'; if (my_score >= 60) return 'D'; return 'F'; } void cpp_student::update(int score) { my_score = score; cs_student::cs_update(3, get_grade()); } void main() { cout << "\n***** use_lu_student():: *******\n"; use_lu_student(); cout << "\n***** use_cs_student():: *******\n"; use_cs_student(); }