Question & Answer: Programming Requirements For assignment 3, our exerciseData struct used c-strings that were a constant size, as you can see f…..

Programming Requirements For assignment 3, our exerciseData struct used c-strings that were a constant size, as you can see from the version 3 struct to the left. But this kind of storage wastes a lot of memory. In order to hold an exercise that has a long name or note, strSize /I Project 3 Version struct exerciseData needed to be fairly large. Lets use an // Project 4 Version struct exerciseData char name strSize];example Great Workout, which might be name; char date[strSizel; a note for one of the exercises. This c-stringchr. t char note[strSize]: int time; int calories; int maxHeartRate; only has 13 characters. Suppose you set up strSize to be 128. Then 115 bytes are wasted, because we set them aside but didnt use them. So, for assignment 4, we will be replacing the c-strings with char charnote; int time; int calories; int maxHeartRate; li pointers, as you can see in the project 4 version on the right. This will allow us to set aside just the right amount of space for each c-string item.
media%2Fb15%2Fb15b6325-206e-4f1c-bbad-a8
media%2F47f%2F47f6a003-084f-4bda-a843-b5
media%2F699%2F699c8de6-9ffe-44b3-8b13-5b

Programming Requirements For assignment 3, our exerciseData struct used c-strings that were a constant size, as you can see from the version 3 struct to the left. But this kind of storage wastes a lot of memory. In order to hold an exercise that has a long name or note, strSize /I Project 3 Version struct exerciseData needed to be fairly large. Let’s use an // Project 4 Version struct exerciseData char name strSize];example “Great Workout”, which might be name; char date[strSizel; a note for one of the exercises. This c-stringchr. t char note[strSize]: int time; int calories; int maxHeartRate; only has 13 characters. Suppose you set up strSize to be 128. Then 115 bytes are wasted, because we set them aside but didn’t use them. So, for assignment 4, we will be replacing the c-strings with char charnote; int time; int calories; int maxHeartRate; li pointers, as you can see in the project 4 version on the right. This will allow us to set aside just the right amount of space for each c-string item.

Expert Answer

 

main.cpp
—————————————————
/ qFH(“What is the name of the exercise data text file to load?”, fh);

Don't use plagiarized sources. Get Your Custom Essay on
Question & Answer: Programming Requirements For assignment 3, our exerciseData struct used c-strings that were a constant size, as you can see f…..
GET AN ESSAY WRITTEN FOR YOU FROM AS LOW AS $13/PAGE
Order Essay

#include <cstring>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

// Reusable stuff ——————————-

const int STRING_SIZE = 64;
const int LIST_SIZE = 4096;

// Return true if any char in cs satisfies condition.
// condition has type ‘int (*condition)(int)’ to match <cstring> convention.
bool any(const char cs[], int (*condition)(int)) {
for (int i = 0; cs[i]; i++)
if (condition(cs[i]))
return true;
return false;
}

// The q prefix indicates a function that queries the user.

// Ask the user a question. Dump the response into answer.
void qCString(const char question[], char answer[],
const int ss = STRING_SIZE) {
cout << question << ‘ ‘;
cin.getline(answer, ss);
}

// Bother the user until they enter a string containing graphical characters.
void qGCString(const char question[], char answer[],
const int ss = STRING_SIZE) {
qCString(question, answer, ss);
while (!any(answer, isgraph))
qCString(“Try again:”, answer, ss);
}

// Bother the user until they enter a valid integer. Return the integer.
int qInt(const char question[]) {
int resp;
bool fail;
cout << question << ‘ ‘;
while (true) {
cin >> resp;
fail = cin.fail();
cin.clear();
cin.ignore(STRING_SIZE, ‘n’);
if (!fail)
break;
cout << “Try again: “;
}
return resp;
}

// Bother the user until they enter a positive integer. Return the integer.
int qPInt(const char question[]) {
int response = qInt(question);
while (response <= 0)
response = qInt(“Try again:”);
return response;
}

// Get a character from user. Consumes entire line.
char qChar(const char question[]) {
cout << question << ‘ ‘;
const char resp = cin.peek();
cin.ignore(STRING_SIZE, ‘n’);
return resp;
}

// Return whether cs contains c.
bool contains(const char cs[], const char c) {
for (int i = 0; cs[i]; i++)
if (cs[i] == c)
return true;
return false;
}

// Bother user until they select an allowed character.
char qSel(const char question[], const char allowed[]) {
char resp = qChar(question);
while (!contains(allowed, resp))
resp = qChar(“Try again:”);
return resp;
}

// Bother the user until they enter y or n. Return true for y, false for n.
bool qYN(const char question[]) { return qSel(question, “yn”) == ‘y’; }

// Bother the user for a path to a real file. Return the open file.
void qFH(const char question[], ifstream& fh) {
char filename[STRING_SIZE];
qCString(question, filename);
fh.open(filename);
while (!fh.is_open()) {
qCString(“Try again:”, filename);
fh.open(filename);
}
}

// End of reusable stuff ————————

struct exerciseData {
char name[STRING_SIZE];
char date[STRING_SIZE];
char note[STRING_SIZE];
int time;
int calories;
int maxHeartRate;
};

// Populate an activity from user input.
void queryActivty(exerciseData &ed) {
qGCString(“What exercise activity did you do?”, ed.name);
qGCString(“What was the date (mm/dd/yy):”, ed.date);
ed.time = qPInt(“How many minutes?”);
ed.calories = qPInt(“How many calories did you burn?”);
ed.maxHeartRate = qPInt(“What was you max heart rate?”);
qGCString(“Do you have any notes to add?”, ed.note);
}

// Populate an activity from a line in a csv.
bool parseActivity(exerciseData &ed, ifstream &fh) {
fh.getline(ed.name, STRING_SIZE, ‘,’);
fh.getline(ed.date, STRING_SIZE, ‘,’);
fh.getline(ed.note, STRING_SIZE, ‘,’);
fh >> ed.time;
fh.ignore();
fh >> ed.calories;
fh.ignore();
fh >> ed.maxHeartRate;
fh.ignore();
}

// Load all the data from a csv. Return number of loaded elements.
int loadData(exerciseData eds[LIST_SIZE]) {
int size = 0;
ifstream fh;
qFH(“What is the name of the exercise data text file to load?”, fh);
while (true) {
parseActivity(eds[size], fh);
if (!fh)
break;
size++;
if (size >= LIST_SIZE)
break;
}
return size;
}

template <class A, class B, class C, class D, class E, class F>
void showRow(A name, B date, C time, D calories, E maxHeartRate, F note) {
cout << left
<< setw(17) << name
<< setw(10) << date
<< setw(6) << time
<< setw(10) << calories
<< setw(15) << maxHeartRate
<< setw(12) << note
<< ‘n’;
}

// Search for specific exercise name. Print all matches.
void search(exerciseData eds[], int count) {
char name[STRING_SIZE];
qGCString(“What activity would you like to search for?”, name);
cout << “Here are the activities matching ” << name << “:n”;
showRow(“Name”, “Date”, “Time”, “Calories”, “Max Heartrate”, “Note”);
for (int i = 0; i < count; i++)
if (strcmp(name, eds[i].name) == 0)
showRow(eds[i].name, eds[i].date, eds[i].time, eds[i].calories, eds[i].maxHeartRate, eds[i].note);
}

// Pretty print all the exercises.
void list(exerciseData eds[], int count) {
showRow(“Name”, “Date”, “Time”, “Calories”, “Max Heartrate”, “Note”);
for (int i = 0; i < count; i++)
showRow(eds[i].name, eds[i].date, eds[i].time, eds[i].calories, eds[i].maxHeartRate, eds[i].note);
}

// Ask user to enter an exercise. Increment count if user chooses to save.
void add(exerciseData eds[], int &count) {
if (count >= LIST_SIZE) {
cout << “You need to stop exercising.n”;
} else {
queryActivty(eds[count]);
if (qYN(“Record the activity time and calories (y/n)?”)) {
count++;
cout << “Your activity info has been recorded.n”;
}
}
}

int main() {
exerciseData eds[LIST_SIZE];
int size;

cout << “Welcome to the exercise tracking program.n”;
size = loadData(eds);

while (true) {
const char s = qSel(“What would you like to do: (l)ist all, (s)earch by”
” name, (a)dd an exercise, or (q)uit? :”, “lsaq”);
if (s == ‘l’) {
list(eds, size);
} else if (s == ‘s’) {
search(eds, size);
} else if (s == ‘a’) {
add(eds, size);
} else if (s == ‘q’) {
break;
}
};

cout << “Thank you for using the exercise tracking program.n”;

return 0;
}

——————————————————————————
common.cpp
————————————————————
#include “common.h”

// Return true if any char in cs satisfies condition.
// condition has type ‘int (*condition)(int)’ to match <cstring> convention.
bool any(const char cs[], int (*condition)(int)) {
for (int i = 0; cs[i]; i++)
if (condition(cs[i]))
return true;
return false;
}

// The q prefix indicates a function that queries the user.

// Ask the user a question. Dump the response into answer.
void qCString(const char question[], char answer[],
const int ss = strSize) {
cout << question << ‘ ‘;
cin.getline(answer, ss);
}

// Bother the user until they enter a string containing graphical characters.
void qGCString(const char question[], char answer[],
const int ss = strSize) {
qCString(question, answer, ss);
while (!any(answer, isgraph))
qCString(“Try again:”, answer, ss);
}

// Bother the user until they enter a valid integer. Return the integer.
int qInt(const char question[]) {
int resp;
bool fail;
cout << question << ‘ ‘;
while (true) {
cin >> resp;
fail = cin.fail();
cin.clear();
cin.ignore(strSize, ‘n’);
if (!fail)
break;
cout << “Try again: “;
}
return resp;
}

// Bother the user until they enter a positive integer. Return the integer.
int qPInt(const char question[]) {
int response = qInt(question);
while (response <= 0)
response = qInt(“Try again:”);
return response;
}

// Get a character from user. Consumes entire line.
char qChar(const char question[]) {
cout << question << ‘ ‘;
const char resp = cin.peek();
cin.ignore(strSize, ‘n’);
return resp;
}

// Return whether cs contains c.
bool contains(const char cs[], const char c) {
for (int i = 0; cs[i]; i++)
if (cs[i] == c)
return true;
return false;
}

// Bother user until they select an allowed character.
char qSel(const char question[], const char allowed[]) {
char resp = qChar(question);
while (!contains(allowed, resp))
resp = qChar(“Try again:”);
return resp;
}

// Bother the user until they enter y or n. Return true for y, false for n.
bool qYN(const char question[]) { return qSel(question, “yn”) == ‘y’; }

// Bother the user for a path to a real file. Return the open file.
void qFH(const char question[], ifstream& fh) {
char filename[strSize];
qCString(question, filename);
fh.open(filename);
while (!fh.is_open()) {
qCString(“Try again:”, filename);
fh.open(filename);
}
}
——————————————————————————-
common.h
——————————————
#include <cstring>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

const int strSize = 256;
const int arraySize = 128;

// Return true if any char in cs satisfies condition.
// condition has type ‘int (*condition)(int)’ to match <cstring> convention.
bool any(const char cs[], int (*condition)(int));

// The q prefix indicates a function that queries the user.

// Ask the user a question. Dump the response into answer.
void qCString(const char question[], char answer[],
const int ss = strSize);

// Bother the user until they enter a string containing graphical characters.
void qGCString(const char question[], char answer[],
const int ss = strSize);

// Bother the user until they enter a valid integer. Return the integer.
int qInt(const char question[]);

// Bother the user until they enter a positive integer. Return the integer.
int qPInt(const char question[]);

// Get a character from user. Consumes entire line.
char qChar(const char question[]);

// Return whether cs contains c.
bool contains(const char cs[], const char c);

// Bother user until they select an allowed character.
char qSel(const char question[], const char allowed[]);

// Bother the user until they enter y or n. Return true for y, false for n.
bool qYN(const char question[]);

// Bother the user for a path to a real file. Return the open file.
void qFH(const char question[], ifstream& fh);
——————————————————————————-
exerciseJournal.cpp
———————————————————
#include “exerciseJournal.h”

// struct exerciseData {
//   char name[strSize];
//   char date[strSize];
//   char note[strSize];
//   int time;
//   int calories;
//   int maxHeartRate;
// };

// exerciseData eds[arraySize];
// int countAndIndex;
// char fileName[strSize];

// Populate an activity from a line in a csv.
bool parseActivity(exerciseData &ed, ifstream &fh) {
fh.getline(ed.name, strSize, ‘,’);
fh.getline(ed.date, strSize, ‘,’);
fh.getline(ed.note, strSize, ‘,’);
fh >> ed.time;
fh.ignore();
fh >> ed.calories;
fh.ignore();
fh >> ed.maxHeartRate;
fh.ignore();
}

template <class A, class B, class C, class D, class E, class F>
void showRow(A name, B date, C time, D calories, E maxHeartRate, F note) {
cout << left
<< setw(17) << name
<< setw(10) << date
<< setw(6) << time
<< setw(10) << calories
<< setw(15) << maxHeartRate
<< setw(12) << note
<< ‘n’;
}

// Populate an activity from user input.
void queryActivty(exerciseData &ed) {
qGCString(“What exercise activity did you do?”, ed.name);
qGCString(“What was the date (mm/dd/yy):”, ed.date);
ed.time = qPInt(“How many minutes?”);
ed.calories = qPInt(“How many calories did you burn?”);
ed.maxHeartRate = qPInt(“What was you max heart rate?”);
qGCString(“Do you have any notes to add?”, ed.note);
}

// Load all the data from a csv. Return number of loaded elements.
int exerciseJournal::loadData() {
int countAndIndex = 0;
ifstream fh(fileName);
while (true) {
parseActivity(eds[countAndIndex], fh);
if (!fh)
break;
countAndIndex++;
if (countAndIndex >= arraySize)
break;
}
return size;
}

void exerciseJournal::writeData();

// Ask user to enter an exercise. Increment count if user chooses to save.
void exerciseJournal::add() {
if (countAndIndex >= arraySize) {
cout << “You need to stop exercising.n”;
} else {
queryActivty(eds[countAndIndex]);
if (qYN(“Record the activity time and calories (y/n)?”)) {
countAndIndex++;
cout << “Your activity info has been recorded.n”;
}
}
}

// Search for specific exercise name. Print all matches.
bool exerciseJournal::search() {
char name[strSize];
qGCString(“What activity would you like to search for?”, name);
cout << “Here are the activities matching ” << name << “:n”;
showRow(“Name”, “Date”, “Time”, “Calories”, “Max Heartrate”, “Note”);
for (int i = 0; i < countAndIndex; i++)
if (strcmp(name, eds[i].name) == 0)
showRow(eds[i].name, eds[i].date, eds[i].time,
eds[i].calories, eds[i].maxHeartRate, eds[i].note);
}

// Pretty print all the exercises.
void exerciseJournal::listAll() {
showRow(“Name”, “Date”, “Time”, “Calories”, “Max Heartrate”, “Note”);
for (int i = 0; i < countAndIndex; i++)
showRow(eds[i].name, eds[i].date, eds[i].time,
eds[i].calories, eds[i].maxHeartRate, eds[i].note);
}
—————————————————————————
exerciseJournal.h
———————————-
#include <cstring>
#include <iostream>
#include <fstream>
using namespace std;

const int strSize = 128;
const int arraySize = 100;

struct exerciseData {
char name[strSize];
char date[strSize];
char note[strSize];
int time;
int calories;
int maxHeartRate;
};

class exerciseJournal {
exerciseData eds[arraySize];
int countAndIndex;
char fileName[strSize];
public:
int loadData();
void writeData();
void add();
bool search();
void listAll();
};
————————————————-
exercise.txt
————–
Elliptical,06/10/17,great workout,40,400,135
Treadmill,06/12/17,doggin it,20,150,120
Stationary Bike,06/15/17,felt good,30,200,130
Elliptical,06/20/17,great-worked out with Mike,45,350,140

Grand Paper Writers
Order NOW For A 10% Discount!
Pages (550 words)
Approximate price: -

Our Advantages

Plagiarism Free Papers

All papers are written by the best professional writers to ensure 100% originality. We always provide plagiarism reports whenever we deliver completed papers.

Free Revisions

All papers by Grand Paper Writers are completed and submitted on time. This timely delivery of papers gives you time to go through the paper before the official deadline.

Title-page

As an additional service, we will provide a title page that precedes the contents of your paper. Here, you will provide your personal details.

Bibliography

We also ensure that we provide an extra page for the references or bibliographies following referencing rules.

Originality & Security

At Grandpaperwriters.com, we guarantee students for the provision of security and original work. All your personal information is handled with confidentiality and is not shared with third parties. Additionally, we ensure that we provide original content with accompanying plagiarism reports to show originality.

24/7 Customer Support

Our customer support team is always available 24/7 to provide instant responses to any queries raised by students.

Try it now!

Calculate the price of your order

We'll send you the first draft for approval by at
Total price:
$0.00

How it works?

Follow these simple steps to get your paper done

Place your order

Fill in the order form and provide all details of your assignment.

Proceed with the payment

Choose the payment system that suits you most.

Receive the final file

Once your paper is ready, we will email it to you.

Our Services

Grandpaperwriters.com has the best professional essay writers for quality services.

Pricing

Flexible Pricing

Here, a Grandpaperwriters.com, we do not compromise on the time of our clients. We always deliver all completed papers on or before the deadlines.

Communication

Admission Help & Client-Writer Contact

Grandpaperwriters.com provides an interactive portal where students can communicate directly to their writers.

Deadlines

Paper Submission

Here, a Grandpaperwriters.com, we do not compromise on the time of our clients. We always deliver all completed papers on or before the deadlines.

Reviews

Customer Feedback

Grandpaperwriters.com appreciates feedback from our clients to help us improve the delivery of essay writing services. As such, we are constantly changing our policies to ensure maximum customer and writer satisfaction.