Entering Users, Modules and Grades, with procedures

C++

Author: ahambridge

10 months ago 9,307 B


// ConsoleApplication4.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <string>
#include <vector>
#include <conio.h>

struct Modules
{
    std::string _Name;
    int _Score;

    Modules() { _Name = ""; _Score = 0; };
    Modules(std::string Name, int Score) {
        _Name = Name; _Score = Score;
    };
};

class User
{
private:
    std::string _Name;
    Modules _ModuleScore;
    std::vector <Modules> _vModules;
public:
    std::string GetName();
    //std::string GetName() { return _Name; }w
    void SetName(std::string);
    //void SetName(std::string Name) { _Name = Name; }

    void UpdateModule(std::string, int);
    Modules GetModule() { return _ModuleScore; }
    std::string GetModuleName() { return _ModuleScore._Name; }

    //Pushback a module ready for information
    //Get the details and add it to the module

    void AddModule(std::string Name, int Score)
    {
        _vModules.push_back(Modules(Name, Score));
    }

    void AddModule()
    {
        _vModules.push_back(Modules());
    }

    std::vector<Modules> GetAllModules()
    {
        return _vModules;
    }

    //Get the average grade
    double GetAverageGrade()
    {
        double Average = 0;

        for (int Count = 0; Count < _vModules.size(); Count++)
        {
            Average += (double)_vModules[Count]._Score;
        }

        return Average / _vModules.size();
    }

    //get the highest

    int HighestGrade()
    {
        int Highest = _vModules[0]._Score;

        for (int Count = 1; Count < _vModules.size(); Count++)
        {
            if (Highest < _vModules[Count]._Score)
            {
                Highest = _vModules[Count]._Score;
            }
        }

        return Highest;
    }

    Modules HighestModule()
    {
        int Highest = _vModules[0]._Score;
        int index = 0;

        for (int Count = 1; Count < _vModules.size(); Count++)
        {
            if (Highest < _vModules[Count]._Score)
            {
                Highest = _vModules[Count]._Score;
                index = Count;
            }
        }

        return _vModules[index];

    }

    Modules LowestModule()
    {
        int Lowest = _vModules[0]._Score;
        int index = 0;

        for (int Count = 1; Count < _vModules.size(); Count++)
        {
            if (Lowest > _vModules[Count]._Score)
            {
                Lowest = _vModules[Count]._Score;
                index = Count;
            }
        }

        return _vModules[index];
    }


    //get the lowest





    User() { _Name = "Test"; }
};

std::string User::GetName() { return _Name; }
void User::SetName(std::string Name) { _Name = Name; }
void User::UpdateModule(std::string Name, int ModuleScore)
{
    _ModuleScore._Name = Name;
    _ModuleScore._Score = ModuleScore;
}

void OutputModuleResults(Modules objModule);
void OutputModuleResults(User objUser);
void UpdateUserName(User& objUser);
void UpdateUserGrade(User& objUser);

void OutputModuleResults(Modules objModule)
{
    std::cout << "Name: " << objModule._Name << ", Score: " << objModule._Score << "\n";
}

void OutputModuleResults(User objUser)
{
    Modules objModule;
    objModule = objUser.GetModule();

    std::cout << objUser.GetModuleName();

    std::cout << objModule._Name << objModule._Score;
}

void UpdateUserName(User& objUser)
{
    std::string Name = "";

    std::cout << "Please enter the users name \n";
    std::cin >> Name;

    objUser.SetName(Name);
}

void UpdateUserGrade(User& objUser)
{
    std::string ModuleName = "";
    int ModuleGrade = 0;

    std::cout << "Please enter the module name \n";
    std::cin >> ModuleName;

    std::cout << "Please enter the grade for " << ModuleName << "\n";
    std::cin >> ModuleGrade;

    objUser.UpdateModule(ModuleName, ModuleGrade);
}

void AddModulesToUser(User& objUser)
{
    int Choice = 0;

    std::cout << "How many modules have you completed?\n";
    std::cin >> Choice;

    std::string ModuleName = "";
    int Score = 0;

    for (int iCount = 0; iCount < Choice; iCount++)
    {
        std::cout << "\nEnter the module name\n";
        std::cin >> ModuleName;

        std::cout << "\nEnter the grade for " << ModuleName << "\n";
        std::cin >> Score;

        objUser.AddModule(ModuleName, Score);
    }
}

void OutputAllModuleDetails(User objUser)
{
    std::vector<Modules> vModules = objUser.GetAllModules();

    for (int iCount = 0; iCount < vModules.size(); iCount++)
    {
        std::cout << "\nName: " << vModules[iCount]._Name;
        std::cout << " Score: " << vModules[iCount]._Score;
    }
}

//void OutputAllModuleDetails(User objUser)
//{
//    //std::vector<Modules> vModules = objUser.GetAllModules();
//
//    for (int iCount = 0; iCount < objUser.GetAllModules().size(); iCount++)
//    {
//        std::cout << iCount + 1 << " Name: " << objUser.GetAllModules()[iCount]._Name << "\n";
//        std::cout << iCount + 1 << " Score: " << objUser.GetAllModules()[iCount]._Score;
//    }
//}

void OutputResults(User objUser)
{
    std::cout << "\n\nAverage Grade " << objUser.GetAverageGrade() << "\n";
    std::cout << "Highest Module " << objUser.HighestModule()._Name << " with the score " << objUser.HighestModule()._Score << "\n";
    std::cout << "Lowest Module " << objUser.LowestModule()._Name << " with the score " << objUser.LowestModule()._Score << "\n";
}

// A procedure to define how many users the user wants
void AddUsers(std::vector<User>& vUsers) {
    int UserChoice = 0;
    std::string username = "";

    std::cout << "How many users would you like to add? ";
    std::cin >> UserChoice;

    User objUser;

    for(int i = 0; i < UserChoice; i++) {
        std::cout << "Please enter the name for user " << i + 1 << "\n";
        std::cin >> username;
        objUser.SetName(username);
        vUsers.push_back(objUser);
    }

}

void AddModulesToAllUsers(std::vector<User>& vUsers) {
    for (int iCount = 0; iCount < vUsers.size(); iCount++) {
        std::cout << "Users to add modules to " << vUsers[iCount].GetName() << "\n";

        AddModulesToUser(vUsers[iCount]);
    }
}

// Create a procedure called OutputAllUsersModules
// Use the behaviour OutputAllModuleDetails
void OutputAllUsersModules(std::vector<User>& vUsers) {
    for (int i = 0; i < vUsers.size(); i++) {
        std::cout << "\nModules for user: " << vUsers[i].GetName() << "\n";
        OutputAllModuleDetails(vUsers[i]);
    }
}

double CalculateAverageScoreAllusers(std::vector<User>& vUsers) {
    double Average = 0;

    for (int iCount = 0; iCount < vUsers.size(); iCount++) {
        Average += (double)vUsers[iCount].GetAverageGrade();
    }
    // std::cout << Average/= vUsers.size();
    return Average /= vUsers.size();
}



std::string highestAverageGrade(std::vector<User>& vUsers) {
    double Highest = vUsers[0].GetAverageGrade();
    std::string HighestGradeName = vUsers[0].GetName();

    for (int iCount = 1; iCount < vUsers.size(); iCount++)
    {
        if (Highest < vUsers[iCount].GetAverageGrade())
        {
            Highest = vUsers[iCount].GetAverageGrade();
            HighestGradeName = vUsers[iCount].GetName();
        }
    }
    return HighestGradeName;
}

std::string lowestGradeAverage(std::vector<User>& vUsers) {
    double Lowest = vUsers[0].GetAverageGrade();
    std::string lowestGradeName = vUsers[0].GetName();

    for (int iCount = 1; iCount > vUsers.size(); iCount++)
    {
        if (Lowest < vUsers[iCount].GetAverageGrade())
        {
            Lowest = vUsers[iCount].GetAverageGrade();
            lowestGradeName = vUsers[iCount].GetName();
        }
    }
    return lowestGradeName;
}




void GetAllAverages(std::vector<User>& vUsers) {

    std::cout << "\n\nThe averages are as follows: \n";
    for (int iCount = 0; iCount < vUsers.size(); iCount++) {
        // Overall Average for all users
        std::cout << vUsers[iCount].GetName() << " has the average of " << vUsers[iCount].GetAverageGrade() << "\n";
        // Who has the highest average?
        // Who has the lowest average?
    }
}

void OutputReports(std::vector<User>& vUsers) {
    GetAllAverages(vUsers);
    std::cout << "The average for all users is " << CalculateAverageScoreAllusers(vUsers) << "\n";
    std::cout << "The highest average belongs to: " << highestAverageGrade(vUsers) << " with a grade of " << "\n";
    std::cout << "The lowest average belong to: " << lowestGradeAverage(vUsers) << " with a grade of " << "\n";
}

int main()
{
    User objUser;

   /* UpdateUserName(objUser);
    UpdateUserGrade(objUser);
    OutputModuleResults(objUser.GetModule());*/

    // AddModulesToUser(objUser);
    // OutputAllModuleDetails(objUser);
    // OutputResults(objUser);

    std::vector<User> vUsers(0);
    AddUsers(vUsers);
    AddModulesToAllUsers(vUsers);
    OutputAllUsersModules(vUsers);
    OutputReports(vUsers);



    _getch();

}