// Attached: HW_8-1b
// ===========================================================
// File: HW_8-1b_Combined.cpp
// ===========================================================
// Programmer: Elaine Torrez
// Class: CMPR 121
// ===========================================================

#include <iostream>
#include <string>
using namespace std;

class Student
{
protected:
    int id;
    int units;
    string name;

public:
    Student()
    {
        id = 0;
        units = 0;
        name = "";
    }

    Student(int studentId, string studentName, int studentUnits)
    {
        id = studentId;
        name = studentName;
        units = studentUnits;
    }

    virtual ~Student()
    {
    }

    void setID(int studentId)
    {
        id = studentId;
    }

    int getID()
    {
        return id;
    }

    void setUnits(int studentUnits)
    {
        units = studentUnits;
    }

    int getUnits()
    {
        return units;
    }

    virtual void displayRecord() = 0;
};

class UnderGrad : public Student
{
private:
    string level;

public:
    UnderGrad(int studentId, string studentName, int studentUnits, string studentLevel)
        : Student(studentId, studentName, studentUnits)
    {
        level = studentLevel;
    }

    ~UnderGrad()
    {
    }

    void displayRecord()
    {
        cout << "ID:      " << id << endl;
        cout << "Name:    " << name << endl;
        cout << "Units:   " << units << endl;
        cout << "Class:   " << level << endl;
    }
};

class Grad : public Student
{
private:
    string degree;

public:
    Grad(int studentId, string studentName, int studentUnits, string studentDegree)
        : Student(studentId, studentName, studentUnits)
    {
        degree = studentDegree;
    }

    ~Grad()
    {
    }

    void displayRecord()
    {
        cout << "ID:      " << id << endl;
        cout << "Name:    " << name << endl;
        cout << "Units:   " << units << endl;
        cout << "Degree:  " << degree << endl;
    }
};

int main()
{
    UnderGrad underGrad(100, "Tom Lee", 9, "Freshman");
    Grad grad(101, "Jim Jones", 12, "PHD");

    underGrad.displayRecord();
    cout << endl;

    grad.displayRecord();
    cout << endl;

    grad.setUnits(15);
    grad.displayRecord();

    return 0;
}