Class Example student.h file: Declaration of the student template. #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include <string> #include <fstream> using namespace std; class student public: student(); student(string first, string last, long stuid); ~student(); void setfirstname(string first); void setlastname(string last); void setid(long stuid); string getfirstname(); string getlastname(); long getid(); double getaverage(); int getnumberofgrades(); char getlettergrade(); void addexamscore(double score); void calculateaverage(int numexams); void calculateaverageoftakenexams(); void assignlettergarde(); void printstudentinformation(); void printstudentinformationtofile(ofstream &outfile); private: string firstname; string lastname; long studentid; double examscores[10]; int numgrades; double averageoftakenexams; // average of exams taken. double average; // average of all exams. char lettergrade; ; #endif // STUDENT_H_INCLUDED 1
student.cpp file: Implementation of the student template. #include <iostream> #include "student.h" using namespace std; // Constructors student::student() firstname = ""; lastname = ""; studentid = 0; numgrades = 0; student::student(string first, string last, long stuid) firstname = first; lastname = last; studentid = stuid; numgrades = 0; // Destructor student::~student() // Accessor Functions void student::setfirstname(string first) firstname = first; void student::setlastname(string last) lastname = last; void student::setid(long stuid) studentid = stuid; string student::getfirstname() return firstname; string student::getlastname() return lastname; 2
long student::getid() return studentid; double student::getaverage() return average; int student::getnumberofgrades() return numgrades; char student::getlettergrade() return lettergrade; void student::addexamscore(double score) if (numgrades < 10) examscores[numgrades] = score; numgrades++; void student::calculateaverage(int numexams) double totalscore = 0; for (int j = 0; j < numgrades; j++) totalscore += examscores[j]; if (numexams > 0) average = totalscore/numexams; else average = 0; void student::calculateaverageoftakenexams() double totalscore = 0; for (int j = 0; j < numgrades; j++) totalscore += examscores[j]; if (numgrades > 0) averageoftakenexams = totalscore/numgrades; else averageoftakenexams = 0; 3
void student::assignlettergarde() if (average >= 90) lettergrade = 'A'; else if (average >= 80) lettergrade = 'B'; else if (average >= 70) lettergrade = 'C'; else if (average >= 60) lettergrade = 'D'; else lettergrade = 'F'; void student::printstudentinformation() cout << lastname << ", " << firstname << endl; cout << "Number of Exams Taken: " << numgrades << endl; cout << "Exam Scores: "; for (int j = 0; j < numgrades; j++) cout << examscores[j] << " "; cout << endl; cout << "Average of Exams Taken: " << averageoftakenexams << endl; cout << "Average: " << average << endl; cout << "Letter Grade: " << lettergrade << endl << endl; void student::printstudentinformationtofile(ofstream &outfile) outfile << lastname << ", " << firstname << endl; outfile << "Number of Exams Taken: " << numgrades << endl; outfile << "Exam Scores: "; for (int j = 0; j < numgrades; j++) outfile << examscores[j] << " "; outfile << endl; outfile << "Average of Exams Taken: " << averageoftakenexams << endl; outfile << "Average: " << average << endl; outfile << "Letter Grade: " << lettergrade << endl << endl; 4
main.cpp file: #include <iostream> #include <fstream> #include <string> #include "student.h" using namespace std; int SearchID(student mathclass[], int size, long targetid) if (mathclass[i].getid() == targetid) return i; return -1; void SortClassByLastName(student mathclass[], int size) bool swap; student temp; int bottom = size - 1; do swap = false; for (int count = 0; count < bottom; count++) if (mathclass[count].getlastname().compare(mathclass[count+1].getlastname()) > 0) temp = mathclass[count]; mathclass[count] = mathclass[count+1]; mathclass[count+1] = temp; swap = true; bottom--; while(swap!= false); void LoadIntoClass(student mathclass[], int &size, student stu, double examscore) int pos = SearchID(mathclass, size, stu.getid()); if (pos >= 0) mathclass[pos].addexamscore(examscore); else stu.addexamscore(examscore); mathclass[size] = stu; size++; 5
void CalculateStudentAveragesAndLetterGrades(student mathclass[], int size) int maxexams = 0; mathclass[i].calculateaverageoftakenexams(); if (mathclass[i].getnumberofgrades() > maxexams) maxexams = mathclass[i].getnumberofgrades(); mathclass[i].calculateaverage(maxexams); mathclass[i].assignlettergarde(); double CalculateClassAverage(student mathclass[], int size) double totalscore = 0; totalscore += mathclass[i].getaverage(); if (size > 0) return totalscore/size; else return 0; void PrintClassReport(student mathclass[], int size) cout << "Student Grade Reports" << endl << endl; mathclass[i].printstudentinformation(); cout << "Class Report" << endl << endl; cout << "Number of students in the class: " << size << endl; double classavg = CalculateClassAverage(mathclass, size); cout << "Class Average: " << classavg << endl << endl; cout << "Grade Distribution" << endl << endl; for (char ch = 'A'; ch <= 'F'; ch++) if (ch!= 'E') cout << ch << ": "; if (mathclass[i].getlettergrade() == ch) cout << "*"; cout << endl; 6
void PrintClassReportToFile(student mathclass[], int size, string filename) ofstream outfile; outfile.open(filename.c_str()); outfile << "Student Grade Reports" << endl << endl; mathclass[i].printstudentinformationtofile(outfile); outfile << "Class Report" << endl << endl; outfile << "Number of students in the class: " << size << endl; double classavg = CalculateClassAverage(mathclass, size); outfile << "Class Average: " << classavg << endl << endl; outfile << "Grade Distribution" << endl << endl; for (char ch = 'A'; ch <= 'F'; ch++) if (ch!= 'E') outfile << ch << ": "; if (mathclass[i].getlettergrade() == ch) outfile << "*"; outfile << endl; outfile.close(); int main() student mathclass[20]; int mathclasssize = 0; char ch; ifstream datafile; datafile.open("datafile.txt"); if(!datafile) cout << "Error opening file.\n"; cin.ignore(); return 1; 7
while ((ch = datafile.peek())!= EOF) double examscore; string first; string last; long ID; datafile >> first; datafile >> last; datafile >> ID; datafile >> examscore; student stu(first, last, ID); LoadIntoClass(mathclass, mathclasssize, stu, examscore); datafile.close(); CalculateStudentAveragesAndLetterGrades(mathclass, mathclasssize); SortClassByLastName(mathclass, mathclasssize); PrintClassReport(mathclass, mathclasssize); cout << endl; char choice; do cout << "Would you like to save the class information to a file? (Y/N): "; cin >> choice; cin.ignore(255, '\n'); while (toupper(choice)!= 'Y' && toupper(choice)!= 'N'); if (toupper(choice) == 'Y') string filename; cout << "Input Filename: "; getline(cin, filename); PrintClassReportToFile(mathclass, mathclasssize, filename); return 0; 8
Output: Student Grade Reports Anderson, Kevin Number of Exams Taken: 4 Exam Scores: 53 65 74 60 Average of Exams Taken: 63 Average: 50.4 Letter Grade: F Black, Joe Number of Exams Taken: 5 Exam Scores: 76 81 65 89 93 Average of Exams Taken: 80.8 Average: 80.8 Letter Grade: B Doe, John Number of Exams Taken: 3 Exam Scores: 84 23 13 Average of Exams Taken: 40 Average: 24 Letter Grade: F Duncan, Jane Number of Exams Taken: 5 Exam Scores: 91 92 77 90 75 Average of Exams Taken: 85 Average: 85 Letter Grade: B Smith, Rita Number of Exams Taken: 5 Exam Scores: 68 54 61 72 68 Average of Exams Taken: 64.6 Average: 64.6 Letter Grade: D Thomas, Jackie Number of Exams Taken: 5 Exam Scores: 86 72 86 86 71 Average of Exams Taken: 80.2 Average: 80.2 Letter Grade: B Zimmermann, Adam Number of Exams Taken: 5 Exam Scores: 79 82 89 88 82 Average of Exams Taken: 84 Average: 84 Letter Grade: B 9
Class Report Number of students in the class: 7 Class Average: 67 Grade Distribution A: B: **** C: D: * F: ** Would you like to save the class information to a file? (Y/N): y Input Filename: testout.txt 10