Metodo Data

di il
9 risposte

Metodo Data

Salve a tutti avrei un problema con delle classi in c++ e ora vi spiego

devo realizzare un metodo Data dataConPiuScontrini() const

e ho a disposizione le seguenti classi

class Data {
public:
int giorno;
int mese;
int anno;
Data(int g = 31, int m = 12, int a = 2099) {
giorno = g;
mese = m;
anno = a;
}
};

class Scontrino {
private:
Data data;
Orario arrivo;
Orario uscita;
double prezzo;
public:
Scontrino(const Data & d, const Orario & a,
const Orario & u, double p) {
data = d;
arrivo = a;
uscita = u;
prezzo = p;
}
const Data & getData() const {
return data;
}
const Orario & getArrivo() const {
return arrivo;
}
const Orario & getUscita() const {
return uscita;
}
double getPrezzo() const {
return prezzo;
}
};

Credete possa servire una classe aggiuntiva? sono un pochettino incartato

9 Risposte

  • Re: Metodo Data

    Ma vuoi i scontrini per data oppure vuoi che ogni scontrino abbia una data. devi definire chi controlla chi.
  • Re: Metodo Data

    Il metodo deve restituire la data in cui sono stati emessi più scontrini, per cui gli scontrini per data....

    E' vero anche che ogni scontrino ha una data ovvero la data in cui è stato emesso, ma scandendo tutta la lista degli scontrini devo trovare la data in cui sono stati emessi più scontrini....

    Spero che mi sono spiegato
  • Re: Metodo Data

    Allora parliamo di dipendenze:

    Uno scontrino dipende da una data e non viceversa. Quindi la classe che controlla lo scontrino sarà la classe data. Cambia le tue definizioni per rispecchiare ciò. In una data si possono avere più scontrini quindi la classe data conterrà un vettore di scontrini. qual'è la data con + scontrini si trova paragonando la dimensione di questo vettore. Se a te ti dano un id di un scontrino devi controllare tutte le data per vedere se esiste lo scontrino in questione ma quì stiamo andando sul complicato.
  • Re: Metodo Data

    Considera che le classi non posso cambiarle al massimo implementarle con qualche metodo statico, il quesito mi chiede di implementare questo metodo all'interno di una classe GestioneParcheggio

    O altrimenti potrei creare una classe aggiuntiva ex novo
  • Re: Metodo Data

    Com'è l'esercizio che non sto capendo niente. Posta il testo completo. E usa i tag CODE per postare il codice:

    [code]il tuo codice quì[/code]
  • Re: Metodo Data

    Si vuole realizzare in C++ un’applicazione per la gestione di un parcheggio multipiano.
    Un Piano è caratterizzato da un numero (un intero che identifica il piano), una lista di scontrini (relativi ai
    pagamenti per posteggi effettuati in quel piano) e il numero di posti disponibili il quale viene decrementato
    ogni volta che una macchina occupa un posto nel piano e incrementato ogni volta che una macchina libera
    un posto nel piano.
    Uno Scontrino è caratterizzato da una data (un oggetto di tipo Data), un orario di arrivo (un oggetto di tipo
    Orario), un orario di uscita (un oggetto di tipo Orario), e da un prezzo. Il prezzo è pari ad un’Euro per ogni
    ora o frazione di ora di durata della permanenza all’interno del parcheggio.
    Una Data è caratterizzata da tre interi corrispondenti a giorno, mese e anno.
    Un Orario è caratterizzato da due interi, uno corrispondente all’ora ed uno ai minuti.
    Si implementi una classe GestioneParcheggio per la gestione delle informazioni complessive, utilizzando le
    classi Piano, Scontrino, Data, Orario riportate in allegato.
    La classe GestioneParcheggio comprende un vector di piani ed implementa i seguenti metodi:
    · Piano & pianoConPiuPosti() const;
    Restituisce l’oggetto Piano avente più posti disponibili; se tutti i piani non hanno posti disponibili il
    metodo restituisce null;
    · int ingresso();
    Usando il metodo precedente cerca il piano avente più posti disponibili: se lo trova ne decrementa di
    uno i posti disponibili e restituisce il numero del piano. Se tutti i piani non hanno posti disponibili il
    metodo restituisce -1;
    · int calcolaPrezzo(const Orario & i, const Orario & u) const;
    Calcola il prezzo dello scontrino secondo quanto spiegato sopra, dove l’orario di ingresso è dato da i
    e quello di uscita da u, e ne restistuisce il risultato;
    · void uscita(const Data & d, const Orario & i, const Orario & u, int p);
    Aumenta il numero di posti disponibili nel piano p; successivamente crea un oggetto Scontrino
    avente come data d, orario di ingresso i, orario di uscita u, e come prezzo quello calcolato usando il
    metodo precedente; infine aggiunge l’oggetto Scontrino alla lista degli scontrini del piano p;
    · Data dataConPiuScontrini() const;
    Restituisce la data in cui sono stati emessi più scontrini.

    Allego le classi già compilate
    
    class Piano {
    private:
    int numero; // numero di piano
    list<Scontrino> scontrini;
    int nDisponibili; // numero di posti disponibili
    public:
    Piano(int n, int d) {
    numero = n;
    nDisponibili = d;
    }
    int getNumero() const {
    return numero;
    }
    const list<Scontrino> & getScontrini() const {
    return scontrini;
    }
    void aggiungiScontrino(const Scontrino & s) {
    scontrini.push_back(s);
    }
    int getNDisponibili() const {
    return nDisponibili;
    }
    void incrementaND() {
    ++nDisponibili;
    }
    void decrementaND() {
    --nDisponibili;
    }
    };
    class Orario {
    private:
    int ora;
    int minuti;
    public:
    Orario(int o, int m) {
    ora = o;
    minuti = m;
    }
    int getOra() const {
    return ora;
    }
    int getMinuti() const {
    return minuti;
    }
    };
    
    class Data {
    public:
    int giorno;
    int mese;
    int anno;
    Data(int g = 31, int m = 12, int a = 2099) {
    giorno = g;
    mese = m;
    anno = a;
    }
    };
    class Scontrino {
    private:
    Data data;
    Orario arrivo;
    Orario uscita;
    double prezzo;
    public:
    Scontrino(const Data & d, const Orario & a,
    const Orario & u, double p) {
    data = d;
    arrivo = a;
    uscita = u;
    prezzo = p;
    }
    const Data & getData() const {
    return data;
    }
    const Orario & getArrivo() const {
    return arrivo;
    }
    const Orario & getUscita() const {
    return uscita;
    }
    double getPrezzo() const {
    return prezzo;
    }
    };
    class GestioneParcheggio {
    private:
    vector<Piano> piani;
    public:
    // ... metodi da implementare
    };
    
  • Re: Metodo Data

    Ho scritto tutta la traccia x completezza, a me interessa solo l'ultimo metodo richiesto
  • Re: Metodo Data

    Ma sono classi fatti da te o arrivano così di fabbrica. Di al prof di sedersi nei banchi ancora per un pò se sono di fabbrica.
    
    Piano & pianoConPiuPosti() const;
    ..............
    
    void uscita(const Data & d, const Orario & i, const Orario & u, int p);
    
    se tu hai un piano che ti viene tornato come piano con + posti come fai ad avere un int che indica il piano quando la macchina è uscita?

    I contructor sono fatti male. Aumenta,decrementaND sono fatti male.Per trovare la data con + scontrini dovresti creare una mappa definita con:
    
    map<Data,int> data2NScontrini map;
    
    andare a leggere ogni piano quanti scontrini ha emmesso,andare ad inserire nella mappa ogni data e incrementare il numero dei scontrini se la data esiste nella mappa, oppure inserire la nuova data se questa non compare. Per fare questo dovresti definire l'operatore < (less) per la classe Data. Come vedi con questa implementazione il lavoro da fare è enorme.

    Oppure crea una struttura che abbia come campi la Data e in numero di scontrino emmessi, ma anche quì devi definire l'operatore == . Quindi con questa discendenza il lavoro che devi fare è grande. Per quello che ti dicevo che la discendenza è fatta male in partenza.
  • Re: Metodo Data

    Le classi sono così fatte da lui per il compito, e mi rendo conto che piano è un oggetto che viene poi inteso come intero.

    Per il metodo è sicuramente la seconda cosa che hai detto creare una classe aggiuntiva dove ridefinire l'operatore == perchè è già successo in altri appelli che bisognava fare una cosa di questo tipo
Devi accedere o registrarti per scrivere nel forum
9 risposte