πŸ‹οΈ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).

circle-check
circle-exclamation
chevron-rightRisposta Accettatahashtag
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