Programma Libreria

di il
8 risposte

Programma Libreria

Ciao a tutti.
Ho un problema abbastanza importante. Ho dovuto costruire un programma con due classi, una Libreria e una Libro, per un'ipotetica libreria. Va tutto bene tranne una cosa: la funzione vendi quando la applico mi stampa il numero di copie ridotto di un(come giusto che sia). Se però poi richiamo la funzione elenco, questa mi si ripresenta invariata.
Credo non mi modifichi la variabile "numero" permanentemente ma solo temporaneamente. Il problema è che non so come fare perchè lo faccia.
Vi mando il codice delle funzioni che c'entrano di più.
#include "libro.h"

Libro::Libro()
{

}

QString Libro::getter()
{
    QString s;
    s.append(this->titolo);
    s.append("\t");
    s.append(this->autore);
    s.append("\t");
    s.append(QString::number(this->numero));
    return s;
}

void Libro::setter(QString tit, QString aut, int nc)
{
    this->titolo=tit;
    this->autore=aut;
    this->numero=nc;
}

int Libro::getnumero()
{
    return this->numero;
}

void Libro::menocopie(int count)
{
    this->numero=count;
}

QString Libro::gettitolo()
{
    return this->titolo;
}

Libro::~Libro()
{

}
void Libreria::vendi()
{
    ui->textEdit->clear();
    ui->textEdit->append("Libri venduti\n\nTitolo\tAutore\tQuantita'\n");
    QVector<Libro>::Iterator i;
    Libro l;
    bool ok;
    ok=NULL;
    QString titolo;
    titolo=QInputDialog::getText(this,tr("Ricerca Titolo"),tr("Inserisci il titolo del libro"),QLineEdit::Normal,"",&ok);
    ok=NULL;
    int count=0;
    for (i=v.begin();i!=v.end();i++)
    {
        l=*i;
        if (titolo==l.gettitolo())
        {
            int copie=l.getnumero();
            if (copie>0)
            {
                copie--;
                l.menocopie(copie);
                count++;
                ui->textEdit->append(l.getter());
            }
        }
    }
    if (count==0)
    {
        ui->textEdit->clear();
        ui->textEdit->append("Non ci sono libri con questo titolo");
    }

}
#ifndef LIBRO_H
#define LIBRO_H
#include<QString>

class Libro
{
private:
    QString titolo;
    QString autore;
    int numero;

public:
    Libro();
    QString getter();
    void setter(QString tit, QString aut, int nc);
    void menocopie(int count);
    QString gettitolo();
    int getnumero();
    ~Libro();
};

#endif // LIBRO_H

8 Risposte

  • Re: Programma Libreria

    Se fai la copia dell'oggetto in l durante l'iterazione lavori sulla copia che poi viene distrutta, quindi ...
  • Re: Programma Libreria

    l=*i;
    Il problema sta qua.
    Tu stai faccendo una copia dell'oggetto e non stai lavorando su quello reale.
    soluzione
    
    Togli l è aggisci con i->
    
    for (i=v.begin();i!=v.end();i++)
        {
           if (titolo==i->gettitolo())
            {
                int copie=i->getnumero();
                if (copie>0)
                {
                    copie--;
                    i->menocopie(copie);
                    count++;
                    ui->textEdit->append(i->getter());
                }
            }
        }
    
  • Re: Programma Libreria

    Grazie mille della risposta skynet.
    Volevo solo chiedere una cosa. Io pensavo che il passaggio l=*i associasse l'elemento l al valore puntato da i. i pensavo quindi fosse un puntatore.
    Non capisco dunque perchè abbia le funzioni di un vettore libro l.
  • Re: Programma Libreria

    I è un puntatore ma *i è l'oggetto e come ti avevo detto prima tu fai la copia dell'oggetto
  • Re: Programma Libreria

    oregon ha scritto:


    i è un puntatore ma *i è l'oggetto e come ti avevo detto prima tu fai la copia dell'oggetto
    Ok ma mettere i-> e le varie procedure non mi modifica il puntatore? O la freccia significa modificare quello che sta puntando?

    Inviato dal mio GT-I9300 utilizzando Tapatalk
  • Re: Programma Libreria

    Non sai cosa fa l'operatore -> freccia?
  • Re: Programma Libreria

    oregon ha scritto:


    Non sai cosa fa l'operatore -> freccia?
    Diciamo che il mio prof non è stato molto chiaro su cosa fa. Ci ha detto solo come si usa. Purtroppo informatica da me è fatta un po cosi. Non ho neanche riferimenti su cui studiare
  • Re: Programma Libreria

    Beh, certamente non modifichi il puntatore ma accedi ai membri dell'oggetto tramite il suo puntatore.
Devi accedere o registrarti per scrivere nel forum
8 risposte