// File:Student.cpp // Student Class Definition #include "Student.h" #include #include #include // Need for strcpy #include // Need for toupper #include // Need for setw in cout // Default Constructor Student::Student() {strcpy(Name,""); Courses=Hours=Points=0; } // Constructor with argument Student::Student(char StudentName[]) {strcpy(Name,StudentName); Courses=Hours=Points=0; cout << "Enter SSN >"; cin >> SSN; } Student::Student(char StudentName[],char SocialSecurity[]) {strcpy(Name,StudentName); Courses=Hours=Points=0; strcpy(SSN,SocialSecurity); } // Initialize Name of Student void Student::SetName(char StudentName[],char SSNo[]) {strcpy(Name,StudentName); strcpy(SSN,SSNo); } // Update the class with a class record (#Hours,Grade in class 0..4) void Student::AddClass(int CourseHours,char Grade) {Hours+=CourseHours; Courses++; if (Grade!='F') Points+=('E'-toupper(Grade))*CourseHours; } // Change a Grade (#Hours, Previous Grade, New Grade) void Student::ChangeGrade(int CourseHours,char OldGrade,char NewGrade) {Points+=(toupper(OldGrade)-toupper(NewGrade))*CourseHours;} // Remove a class from student's record (Hours, Grade) void Student::RemoveClass(int CourseHours,char Grade) {Hours-=CourseHours; Courses--; if (Grade!='F') Points-=('F'-toupper(Grade))*CourseHours; } // Get Hours Completed int Student::HoursCompleted() const {return(Hours);} void Student::PrintStudentInfoToScreen() {cout << "\nStudent Name Hours GPA Courses SSN\n"; cout.setf(ios::showpoint); cout.precision(2); cout.setf(ios::left); cout << setw(20) << Name; cout.setf(ios::right); cout << setw(4) << Hours << setw(10) << ComputeGPA(); cout << setw(7) << Courses << " " << SSN << endl; } int operator == (const Student& d_e1, // IN: left-operand const Student& d_e2) // IN: right-operand {return (d_e1.Name == d_e2.Name);} int operator < (const Student& d_e1, // IN: left-operand const Student& d_e2) // IN: right-operand {return (d_e1.Name < d_e2.Name);} int operator > (const Student& d_e1, // IN: left-operand const Student& d_e2) // IN: right-operand {return (d_e1.Name > d_e2.Name);} // Input Student Data from a File // Precondition: File has format: // Name // SSN // #Courses #Hours #Points // and eof is not true (i.e. something will happen, either: // a. eof will become true on attempt to read name // b. student will be read istream &operator>> (istream &Source,Student &S) {Source.getline(S.Name,NameLength,'\n'); Source.getline(S.SSN,SSNLength,'\n'); Source >> S.Courses >> S.Hours >> S.Points; Source.ignore(80,'\n'); return (Source); } // Print Student Info to a stream ostream &operator<< (ostream &Dest, const Student &S) {Dest << S.Name << endl; Dest << S.SSN << endl; Dest << S.Courses << S.Hours << S.Points << endl; return(Dest); } // Get Student's GPA float Student::ComputeGPA() const {if (Hours>0) return(float(Points)/Hours); return(0); }