#include #include "records.h" using namespace std; Student::Student(int the_id, string the_name){ id = the_id; name = the_name; } int Student::get_id(){ return id; } string Student::get_name(){ return name; } Course::Course(int the_id, string the_name, unsigned char the_credits){ id = the_id; name = the_name; credits = the_credits; } int Course::get_id(){ return id; } string Course::get_name(){ return name; } int Course::get_credits(){ return credits; } Grade::Grade(int sid, int cid, char grd){ student_id = sid; course_id = cid; grade = grd; } int Grade::get_student_id(){ return student_id; } int Grade::get_course_id(){ return course_id; } char Grade::get_grade(){ return grade; } /* StudentRecords methods */ void StudentRecords::add_student(int sid, string sname) { students.push_back(Student(sid, sname)); } void StudentRecords::add_course(int cid, string cname, unsigned char ccredits) { courses.push_back(Course(cid, cname, ccredits)); } void StudentRecords::add_grade(int sid, int cid, char grade) { grades.push_back(Grade(sid, cid, grade)); } float StudentRecords::get_num_grade(char letter) { float cur_grade; switch (letter) { case 'A': cur_grade = 4.0f; break; case 'B': cur_grade = 3.0f; break; case 'C': cur_grade = 2.0f; break; case 'D': cur_grade = 1.0f; break; case 'F': cur_grade = 0.0f; break; default: cur_grade = -1; break; } return cur_grade; } std::string StudentRecords::get_student_name(int sid) { int i = 0; while (i < students.size() && students[i].get_id() != sid) i++; return students[i].get_name(); } unsigned char StudentRecords::get_course_credits(int cid) { unsigned char creds; for (Course& c_iter : courses) if (c_iter.get_id() == cid) { creds = c_iter.get_credits(); break; } return creds; } float StudentRecords::get_GPA(int sid) { float points = 0.0f; float credits = 0.0f; unsigned char cur_creds; for (Grade& g_iter : grades) { if (g_iter.get_student_id() != sid) continue; cur_creds = get_course_credits(g_iter.get_course_id()); points += get_num_grade(g_iter.get_grade()) * cur_creds; credits += cur_creds; } return points / credits; } void StudentRecords::report_card(int sid) { // print a report card on the screen // name course letter grades and GPA. std::cout << "REPORT CARD:" << std::endl; std::cout << "Student name: " << get_student_name(sid) << std::endl; std::cout << "Courses enrolled | Grade" << std::endl; for (Grade& sgrade : grades ) { if (sgrade.get_student_id() != sid) continue; for (Course& scourse : courses) if (scourse.get_id() == sgrade.get_course_id()) std::cout << " " << scourse.get_name() << ": " << sgrade.get_grade() << std::endl; } std::cout << std::endl; std::cout << "Student GPA: " << get_GPA(sid) << std::endl; }