Modify to do the following: Add data integrity handing using cin.ignore, etc. for the initial inputs #include #include #include #include #include using namespace std; class StudentRec { private: string last_name = ""; // Last name string first_name = ""; // First name int year_grad = 0; // Year expected to graduate float gpa = 0.0; // Current gpa public: void set_last_name(string last_name_param); void set_first_name(string first_name_param); void set_gpa(float gpa = 0.0); string get_last_name() const; string get_first_name()const; string get_last_name_upper() const; string get_first_name_upper() const; void set_year_grad(int year_grad_param); int get_year_grad() const; int getgpa()const; bool equals(const StudentRec&); string to_str() const; // the rest of the "setter" and "getter" functions for each variable above go here }; void StudentRec::set_last_name(string last_name_param) { last_name = last_name_param; } void StudentRec::set_first_name(string first_name_param) { first_name = first_name_param; } void StudentRec::set_gpa(float gpa_param) { gpa = gpa_param; } string StudentRec::get_last_name() const { return last_name; } string StudentRec::get_first_name() const { return first_name; } string StudentRec::get_last_name_upper() const { string last_name_upper; for (char c : last_name) { last_name_upper.push_back(toupper(c)); } return last_name_upper; } string StudentRec::get_first_name_upper() const { string first_name_upper; for (char c : first_name) { first_name_upper.push_back(toupper(c)); } return first_name_upper; } void StudentRec::set_year_grad(int year_param) { if (year_param < 1888) { throw invalid_argument("Year must be 1888 or later."); } year_grad = year_param; } int StudentRec::get_year_grad() const { return year_grad; } bool StudentRec::equals(const StudentRec& to_compare) { return (last_name == to_compare.last_name && year_grad == to_compare.year_grad); } string StudentRec::to_str()const { return last_name + " (" + to_string(year_grad) + ')'; } int StudentRec::getgpa() const { return gpa; } int main() { float avggpa = 0; cout << "The Student List Program\n\n"; cout << "Enter a Student Record \n\n"; // Get vector of StudentRec objects vector student_list; char another = 'y'; while (tolower(another) == 'y') { StudentRec StudentRec; // make temporary new (initialized) StudentRec object string first_name; cout << "First Name: "; getline(cin, first_name); StudentRec.set_first_name(first_name); string last_name; cout << "Last name: "; getline(cin, last_name); StudentRec.set_last_name(last_name); int year_grad; cout << "Grad Year: "; cin >> year_grad; try { StudentRec.set_year_grad(year_grad); } catch (const invalid_argument& e) { cout << e.what() << "\n"; cout << "Exiting Program...\n\n"; return 0; } StudentRec.set_year_grad(year_grad); float gpa; cout << "GPA: "; cin >> gpa; StudentRec.set_gpa(gpa); student_list.push_back(StudentRec); cout << "\nEnter another Student Record? (y/n): "; cin >> another; cin.ignore(); // Only one character should be extracted; the others should be ignored (flush the buffer) cout << endl; } // display the list vector avg; for (StudentRec temp : student_list) { avg.push_back(temp.getgpa()); } for (int x = 0; x < avg.size(); x++) { avggpa += avg.at(x); } avggpa = (avggpa) / (avg.size()); // Use to find the average gpa of the students const int w = 5; cout << left << setw(w * 3) << "First Name" << setw(w * 3) << "Last Name" << setw(w * 3) << "Grad Year" << setw(w * 3) << "GPA" << endl; cout << endl; for (StudentRec StudentRec : student_list) { cout << setw(w * 3) << StudentRec.get_first_name() << setw(w * 3) << StudentRec.get_last_name() << setw(w * 3) << StudentRec.get_year_grad() << setw(w * 3) << StudentRec.getgpa() << endl; } cout << endl; cout << endl; // Output with titles in ALL CAPS for (StudentRec StudentRec : student_list) { cout << setw(w * 3) << StudentRec.get_first_name_upper() << setw(w * 3) << StudentRec.get_last_name_upper() << setw(w * 3) << StudentRec.get_year_grad() << setw(w * 3) << StudentRec.getgpa() << endl; } cout << endl; cout << "Average gpa for the students is " << fixed << setprecision(2) << avggpa << endl; return 0; }
Modify to do the following:
Add data integrity handing using cin.ignore, etc. for the initial inputs
#include <iostream>
#include <iomanip>
#include <string>
#include <
#include <cmath>
using namespace std;
class StudentRec
{
private:
    string last_name = "";          // Last name
    string first_name = "";         // First name
    int year_grad = 0;                  // Year expected to graduate
    float gpa = 0.0; // Current gpa
public:
    void set_last_name(string last_name_param);
    void set_first_name(string first_name_param);
    void set_gpa(float gpa = 0.0);
    string get_last_name() const;
    string get_first_name()const;
    string get_last_name_upper() const;
    string get_first_name_upper() const;
    void set_year_grad(int year_grad_param);
    int get_year_grad() const;
    int getgpa()const;
    bool equals(const StudentRec&);
    string to_str() const;
// the rest of the "setter" and "getter" functions for each variable above go here
};
void StudentRec::set_last_name(string last_name_param)
{
    last_name = last_name_param;
}
void StudentRec::set_first_name(string first_name_param)
{
    first_name = first_name_param;
}
void StudentRec::set_gpa(float gpa_param)
{
    gpa = gpa_param;
}
string StudentRec::get_last_name() const
{
    return last_name;
}
string StudentRec::get_first_name() const
{
    return first_name;
}
string StudentRec::get_last_name_upper() const
{
    string last_name_upper;
    for (char c : last_name) {
        last_name_upper.push_back(toupper(c));
    }
    return last_name_upper;
}
string StudentRec::get_first_name_upper() const
{
    string first_name_upper;
    for (char c : first_name) {
        first_name_upper.push_back(toupper(c));
    }
    return first_name_upper;
}
void StudentRec::set_year_grad(int year_param)
{
    if (year_param < 1888)
    {
        throw invalid_argument("Year must be 1888 or later.");
    }
    year_grad = year_param;
}
int StudentRec::get_year_grad() const
{
    return year_grad;
}
bool StudentRec::equals(const StudentRec& to_compare)
{
    return (last_name == to_compare.last_name && year_grad == to_compare.year_grad);
}
string StudentRec::to_str()const
{
    return last_name + " (" + to_string(year_grad) + ')';
}
int StudentRec::getgpa() const
{
    return gpa;
}
int main()
{
    float avggpa = 0;
    cout << "The Student List Program\n\n";
    cout << "Enter a Student Record \n\n";    // Get vector of StudentRec objects
    vector<StudentRec> student_list;
    char another = 'y';
    while (tolower(another) == 'y')
    {
        StudentRec StudentRec; // make temporary new (initialized) StudentRec object 
        string first_name;
        cout << "First Name: ";
        getline(cin, first_name);
        StudentRec.set_first_name(first_name);
        string last_name;
        cout << "Last name: ";
        getline(cin, last_name);
        StudentRec.set_last_name(last_name);
        int year_grad;
        cout << "Grad Year: ";
        cin >> year_grad;
        try {
            StudentRec.set_year_grad(year_grad);
        }
        catch (const invalid_argument& e)
        {
            cout << e.what() << "\n";
            cout << "Exiting Program...\n\n";
            return 0;
        }
        StudentRec.set_year_grad(year_grad);
        float gpa;
        cout << "GPA: ";
        cin >> gpa;
        StudentRec.set_gpa(gpa);
        student_list.push_back(StudentRec);
        cout << "\nEnter another Student Record? (y/n): ";
        cin >> another;
        cin.ignore();    // Only one character should be extracted; the others should be ignored (flush the buffer)
        cout << endl;
    }
    // display the list
    vector<double> avg;
    for (StudentRec temp : student_list)
    {
        avg.push_back(temp.getgpa());
    }
    for (int x = 0; x < avg.size(); x++)
    {
        avggpa += avg.at(x);
    }
    avggpa = (avggpa) / (avg.size());    // Use to find the average gpa of the students
    const int w = 5;
    cout << left << setw(w * 3) << "First Name" << setw(w * 3) << "Last Name" << setw(w * 3) << "Grad Year" << setw(w * 3) << "GPA" << endl;
    cout << endl;
    for (StudentRec StudentRec : student_list)
    {
        cout << setw(w * 3) << StudentRec.get_first_name()
            << setw(w * 3) << StudentRec.get_last_name() << setw(w * 3) << StudentRec.get_year_grad() << setw(w * 3) << StudentRec.getgpa() << endl;
    }
    cout << endl;
    cout << endl;
    // Output with titles in ALL CAPS
    for (StudentRec StudentRec : student_list)
    {
        cout << setw(w * 3) << StudentRec.get_first_name_upper()
            << setw(w * 3) << StudentRec.get_last_name_upper() << setw(w * 3) << StudentRec.get_year_grad() << setw(w * 3) << StudentRec.getgpa() << endl;
    }
    cout << endl;
    cout << "Average gpa for the students is " << fixed << setprecision(2) << avggpa << endl;
return 0;
}

Step by step
Solved in 2 steps









