🏋️Activity

Si consideri un'applicazione per fare tracciamento delle attività e che traccia il numero di ore in cui si sta in piedi, la durata di attività fisica e le calorie consumate. Per ognuna di queste quantità si può impostare un obiettivo minimo e si tiene traccia dei rispettivi valori man mano che incrementano mediante le attività tracciate da un dispositivo. I sensori del dispositivo consentono di capire se una persona è in piedi e per quanto tempo o se sta effettuando attività fisica di un certo tipo e per quanto tempo. Ad ogni attività fisica registrata è associato anche un valore di calorie consumate ed una stringa che descrive l'attività in questione. La app fornisce un elenco delle attività fisiche registrate. La app fornisce lo stato attuale dei tre indicatori. (8 punti) Deve essere possibile cancellare un'attività fisica, aggiornando di conseguenza anche le calorie (4 punti).

Risposta Accettata
main.cpp
#include <iostream>
#include <list>
using namespace std;

class App;
class Activity {
private:
    string activityName;
    int activityTime;
    int activityCalories;
public:
    Activity(string activityName, int activityTime, int activityCalories, App* app);

    void printActivity() {
        cout << activityName << " " << activityTime << " " << activityCalories << "\n" << endl;
    }

    int getActivityTime() {
        return activityTime;
    }

    int getActivityCalories() {
        return activityCalories;
    }
};


class App {
private:
    int minStand {120};
    int minExercise {30};
    int minCalories{2000};

    int standTime {0};
    int exerciseTime {0};
    int caloriesBurned {0};

public:
    list <Activity*> exerciseList;

    App(int minStand, int minExercise, int minCalories) :
            minStand(minStand),
            minExercise(minExercise),
            minCalories(minCalories) {}

    void addActivity(Activity* activity) {
        exerciseList.push_back(activity);
    }

    void removeActivity(Activity* activity) {
        exerciseList.remove(activity);
    }

    void printExerciseList() {
        for (auto &i: exerciseList)
            i->printActivity();
    }

    void updateStandTime(int standTime) {
        this->standTime += standTime;
    }

    int getExerciseTime() {
        int exerciseTime = 0;
        for (auto &i: exerciseList)
            exerciseTime += i->getActivityTime();
        return exerciseTime;
    }

    int getCaloriesBurned() {
        int caloriesBurned = 0;
        for (auto &i: exerciseList)
            caloriesBurned += i->getActivityCalories();
        return caloriesBurned;
    }

    void printGoals() {
        int exerciseTime = getExerciseTime();
        int caloriesBurned = getCaloriesBurned();
        cout << "Stand goal: " << standTime << "/" << minStand << " minutes" << endl;
        cout << "Exercise goal: " << exerciseTime << "/" << minExercise << " minutes" << endl;
        cout << "Calories goal: " << caloriesBurned << "/" << minCalories << " calories" << endl;
    }
};



//unico modo possibile a quanto pare
//The Activity class's constructor implementation is outside the class definition
// because it references the App class. In C++, if a class A uses another class B in its methods,
// class B must be fully defined before those methods. In this case, the Activity constructor uses
// the App class, so the App class must be fully defined before the Activity constructor

Activity::Activity(string activityName, int activityTime, int activityCalories, App* app) :
        activityName(activityName),
        activityTime(activityTime),
        activityCalories(activityCalories) {
    app->addActivity(this);
}


int main() {
    App app(120, 30, 2000);
    Activity activity1("Running", 30, 300, &app);
    Activity activity2("Swimming", 60, 600, &app);
    Activity activity3("Cycling", 45, 450, &app);
    app.updateStandTime(120);
    app.printExerciseList();
    app.printGoals();
    app.removeActivity(&activity1);
    app.printExerciseList();
    app.printGoals();
    return 0;
}

Last updated