#include <string>

#include <vector>

#include <iostream>

#include <conio.h>

class Course

{

private:

    std::string Code, Name;

public:

    std::string getName();

};

class LecturedCourse

{

public:

    std::string getLecturer();

    void setLecturer(std::string);

    std::string getName();

    void read(std::string, std::string, std::string);

    LecturedCourse();

private:

    std::string Lecturer, Code, Name;

};

void LecturedCourse::read(std::string _Lecturer, std::string _Code, std::string _Name)

{

    Lecturer = _Lecturer;

    Code = _Code;

    Name = _Name;

}

LecturedCourse::LecturedCourse()

{

    read("", "", "");

}

std::string LecturedCourse::getName()

{

    return Name;

}

std::string LecturedCourse::getLecturer()

{

    return Lecturer;

}

void LecturedCourse::setLecturer(std::string _Lecturer)

{

    Lecturer = _Lecturer;

}

class NonLecturedCourse

{

public:

    NonLecturedCourse();

    int getMinCredit();

    std::string getName();

    void read(int, std::string, std::string);

private:

    int minCredHours;

    std::string Code, Name;

};

void NonLecturedCourse::read(int _minCredHours, std::string _Code, std::string _Name)

{

    minCredHours = _minCredHours;

    Code = _Code;

    Name = _Name;

}

NonLecturedCourse::NonLecturedCourse()

{

    read(0, "", "");

}

int NonLecturedCourse::getMinCredit()

{

    return minCredHours;

}

std::string NonLecturedCourse::getName()

{

    return Name;

}

class Lecturer

{

private:

    std::string Name;

public:

    Lecturer();

    std::string getLecturer();

    void setLecturer(std::string);

};

Lecturer::Lecturer()

{

    setLecturer("");

}

void Lecturer::setLecturer(std::string _Name)

{

    Name = _Name;

}

std::string Lecturer::getLecturer()

{

    return Name;

}

std::vector<LecturedCourse> subjects;

std::vector<NonLecturedCourse> projects;

int main()

{

    bool exit = false;

    std::string Code, Name, Lecturer;

    int minCred;

    int choice;

    LecturedCourse x;

    NonLecturedCourse y;

    while (!exit)

    {

        system("CLS");

        std::cout << "---------Menu---------" << std::endl;

        std::cout << "1. Add Subject" << std::endl;

        std::cout << "2. Add Project" << std::endl;

        std::cout << "3. Print Subjects" << std::endl;

        std::cout << "4. Print Projects" << std::endl;

        std::cout << "5. Exit" << std::endl << std::endl;

        std::cout << "Enter your choice => ";

        std::cin >> choice;

        switch (choice)

        {

        case 1:

            system("CLS");

            std::cout << "Adding a new subject course:" << std::endl;

            std::cout << "Code => ";

            getline(std::cin, Code);

            std::cout << "Name => ";

            getline(std::cin, Name);

            std::cout << "Lecturer => ";

            getline(std::cin, Lecturer);

            x.read(Lecturer, Code, Name);

            subjects.push_back(x);

            break;

        case 2:

            system("CLS");

            std::cout << "Adding a new project course:" << std::endl;

            std::cout << "Code => ";

            getline(std::cin, Code);

            std::cout << "Name => ";

            getline(std::cin, Name);

            std::cout << "Min Credit => ";

            std::cin >> minCred;

            y.read(minCred, Code, Name);

            projects.push_back(y);

            break;

        case 3:

            system("CLS");

            std::cout << "The list of subject courses:" << std::endl;

            std::cout << "Course Name                        Lecturer" << std::endl;

            for (auto& it : subjects)

            {

                std::cout << it.getName() << "                        " << it.getLecturer() << std::endl;

            }

            system("pause");

            break;

        case 4:

            system("CLS");

            std::cout << "The list of project courses:" << std::endl;

            std::cout << "Course Name                        Min Credit Hour" << std::endl;

            for (auto& it : projects)

            {

                std::cout << it.getName() << "                        " << it.getMinCredit() << std::endl;

            }

            system("pause");

            break;

        case 5:

            exit = true;

            break;

        default:

            system("cls");

            std::cout << "Invalid input" << std::endl;

            system("pause");

        }

    }

}
