Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Your local gym has approached you to set up a system to check how healthy their

ID: 3713661 • Letter: Y

Question

Your local gym has approached you to set up a system to check how healthy their members are. They keep track of their members details in a file named input.txt (seen in Listing 1) which contains each members height, weight, gender and ID number. You are required to calculate certain health measures about each gym member. As you approach each task decide what assumptions should be made. List any assumptions at the top of your cpp file in a comment. Listing 1: Input file input.txt. The data fields are as follows: ID number, height (m), weight (kg) and gender 1 9011190059087 1.5 52 F 2 6411840059063 1.9 66 M 3 9401290059020 1.34 50 M 4 7210090050887 1.76 84 F

Explanation / Answer

Given below is the code for the question.
Please do rate the answer if it was helpful. Thank you

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;

struct member
{
string ID;
double height; //in meters
int weight; //in kgs
char gender; //F or M
int age;
double BMI;
double BMR;
};

int readFile(string filename, member members[]);
void compute(member members[], int n);
void writeFile(string filename, member members[], int n);

int main()
{
member members[20];
int n;
string inputFname, outputFname;

cout << "Enter input filename: ";
cin >> inputFname;

cout << "Enter output filename: ";
cin >> outputFname;

n = readFile(inputFname, members);
compute(members, n);
writeFile(outputFname, members, n);
}

int readFile(string filename, member members[])
{
ifstream infile(filename.c_str());
if(infile.fail())
{
cout << "ERROR: could not read input file " << filename << endl;
exit(1);
}

int n = 0;
while(infile >> members[n].ID)
{
infile >> members[n].height >> members[n].weight >> members[n].gender;
members[n].BMI = 0;
members[n].BMR = 0;
n++;
}
infile.close();
return n;
}
void compute(member members[], int n)
{
for(int i = 0; i < n; i++)
{
double h2 = members[i].height * members[i].height;
members[i].BMI = members[i].weight / h2;

int CURRENT_YEAR = 2018;
int birthYear =1900 + atoi(members[i].ID.substr(0, 2).c_str());
members[i].age = CURRENT_YEAR - birthYear;

if(members[i].gender == 'M')
members[i].BMR = 10 * members[i].weight + 6.25 * members[i].height * 100 - 5 * members[i].age + 5;
else
members[i].BMR = 10 * members[i].weight + 6.25 * members[i].height * 100 - 5 * members[i].age - 161;
}
}

void writeFile(string filename, member members[], int n)
{
ofstream outfile(filename.c_str());
if(outfile.fail())
{
cout << "ERROR: could not open file for writing: " << filename << endl;
exit(1);
}

outfile << fixed << setprecision(3);

for(int i = 0; i < n; i++)
{
outfile << members[i].ID << " " << members[i].gender << " " << members[i].age << " ";
if(members[i].BMI < 18.5)
outfile << "under_weight";
else if(members[i].BMI < 25)
outfile << "normal_weight";
else if(members[i].BMI < 30)
outfile << "over_weight";
else
outfile << "obese" ;

outfile << " " << members[i].BMR << endl;
}

outfile.close();
cout << "Output written to file " << filename << endl;
}


input.txt
------
9011190059087 1.5 52 F
6411040059063 1.9 66 M
9401290059020 1.34 50 M
7210090050887 1.76 84 F


output.txt (generated)
------
9011190059087 F 28 normal_weight 1156.500
6411040059063 M 54 under_weight 1582.500
9401290059020 M 24 over_weight 1222.500
7210090050887 F 46 over_weight 1549.000