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();
}