prof. Nunzio Brugaletta
C++: programmazione e oggetti

EnneBi - Programmazione
Avanti - Indietro - Inizio

Utilizzo della classe: vettori di oggetti

Il programma proposto, dopo aver caricato in un vettore i libri della biblioteca, visualizza un menù per mezzo del quale si possono gestire alcune operazioni sui libri:

// PRESTITI1: gestione prestiti libri di una biblioteca versione 1

#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

#include "c_libro" 	/*1*/
namespace biblioteca{ 	/*2*/
  vector<libro> insertLibri(); 
  void prestito(vector<libro>&); 
  void restituzione(vector<libro>&); 
  void info(vector<libro>); 
}   

int main()
{ 
  vector<biblioteca::libro> biblio; 	/*3*/
  int tipoop; 

  // Libri in biblioteca 

  biblio = biblioteca::insertLibri(); 	/*4*/

  // gestione prestiti 

  for(;;){ 
    cout << "\n1 - prestito"; 
    cout << "\n2 - restituzione"; 
    cout << "\n3 - info libro"; 
    cout << "\n0 - fine"; 
    cout << "\nOperazione ? "; 
    cin >> tipoop; 
    if(!tipoop) break;	 

    switch (tipoop){ 
    case 1: 
      biblioteca::prestito(biblio); 
      break; 
    case 2: 
      biblioteca::restituzione(biblio); 
      break; 
    case 3: 
      biblioteca::info(biblio); 
      break; 
    default: 
      cout << "Inserire 1,2,3 o 0"; 
    } 
  } 
  return 0;
} 

// Registrazione libri nella biblioteca 

vector<biblioteca::libro> biblioteca::insertLibri() 	/*5*/
{ 
  vector<biblioteca::libro> l; 
  biblioteca::libro libtemp; 
  biblioteca::datilib l1; 
  int n,i; 

  cout << "Quanti libri? "; 
  cin >> n; 
  cin.ignore(); 
  for (i=0;i<n;i++){ 
    cout << "Libro in posizione n. " << i << endl; 
    cout << "Titolo  ->"; 
    getline(cin,l1.titolo); 
    cout << "Autore  ->"; 
    getline(cin,l1.autore); 
    cout << "Editore ->"; 
    getline(cin,l1.editore); 
    cout << "Prezzo  ->"; 
    cin >> l1.prezzo; 
    cin.ignore(); 

    libtemp.setLibro(l1); 	/*6*/
    l.push_back(libtemp); 	/*7*/
  } 

  return l; 
} 

// Prestito di un libro 

void biblioteca::prestito(vector<libro>& l) 
{ 
  int quale,posultimo; 

  posultimo = l.size()-1; 	/*8*/
  cout << "\nQuale libro (0," << posultimo << ")? "; 
  cin >> quale; 
  quale = (quale<0 || quale>posultimo) ? posultimo:quale; 	/*9*/

  if (!l.at(quale).prestato())	/*10*/	 
    cout << "\nLibro gia\' prestato"; 
  else 
    cout << "\nPrestito effettuato"; 
} 

// Restituzione di un libro prestato 

void biblioteca::restituzione(vector<libro>& l) 
{ 
  int quale,posultimo; 

  posultimo = l.size()-1; 	/*8*/
  cout << "\nQuale libro (0," << posultimo << ")? "; 
  cin >> quale; 
  quale = (quale<0 || quale>posultimo) ? posultimo:quale; 	/*9*/
     
  if (!l.at(quale).restituito())	/*10*/	 
    cout << "\nLibro gia\' presente"; 
  else 
    cout << "\nRestituzione effettuata"; 
} 

// Visualizza info su un libro 

void biblioteca::info(vector<libro> l) 
{ 
  int quale,posultimo; 

  posultimo = l.size()-1; 	/*8*/
  cout << "\nQuale libro (0," << posultimo << ")? "; 
  cin >> quale; 
  quale = (quale<0 || quale>posultimo) ? posultimo:quale; 	/*9*/
        
  cout << l.at(quale); 	/*11*/
}

Per mezzo della inclusione in 1 possono essere dichiarati, nel programma, sia oggetti di tipo libro che strutture di tipo datilib.

Nella 2 viene espanso lo spazio di nomi biblioteca, già definito in c_libro, in modo da contenere anche le funzioni utilizzate nel programma. Poteva essere usato anche un altro nome, ma si è fatta la scelta di inserire le funzioni nello stesso spazio di biblioteca in modo da contenere tutto quello di cui si ha bisogno.

Nel main viene dichiarato un vettore per contenere i libri della biblioteca (3), caricato dalla chiamata 4. Subito dopo viene presentato un menù per mezzo del quale si può scegliere l'operazione da effettuare.

La funzione definita in 5, si occupa di popolare il vettore. Dopo aver acquisito i dati in una struttura temporanea, genera un oggetto di tipo libro (6) e lo invia al vettore (7).

Alle funzioni, è passato come parametro un vettore di tipo libro: non è stato necessario specificare altro perché, già nel nome della funzione, è utilizzato l'operatore di visibilità per lo spazio dei nomi biblioteca e il tipo libro è definito nello stesso spazio.

Le operazioni previste dal programma possono essere effettuate solo su libri presenti nella biblioteca. Il rintracciamento del libro è realizzato specificandone la posizione. Per non permettere l'inserimento di posizioni illegittime, dopo aver calcolato la posizione dell'ultimo libro inserito (8), un input fuori da tale limite o con posizione negativa, viene, per semplicità, ricondotto all'ultimo inserito (9).

Il prestito o la restituzione del libro sono effettuati richiamando i relativi metodi applicati al libro cercato (10). I dati del libro vengono visualizzati (11) stampando con l'utilizzo dell'operatore di inserimento. Operazione legittima perché l'operatore è stato ridefinito per gli oggetti della classe libro.





Avanti - Indietro - Inizio

http://ennebi.solira.org
ennebi@solira.org