Lista contenente liste

di il
25 risposte

Lista contenente liste

Volevo sapere se e possibile in c++ avere una classe che contenente una lista dinamica di liste dinamiche senza utilizzo di template....spiego meglio il mio problema:
ho dichiarato una classe biblioteca che contiene una lista dinamica di istanze della classe libro....volevo in pratica dichiarare una classe facoltà che contenga una lista dinamica di istanze della classe biblioteca. Se e possibile volevo sapere se alla definizione della lista di biblioteche l'elemento biblioteca devo "trattarlo" come qualsiasi altro elemento o diversamente...Grazie mille

25 Risposte

  • Re: Lista contenente liste

    ho dichiarato una classe biblioteca che contiene una lista dinamica di istanze della classe libro
    Teoricamente è la stessa cosa
  • Re: Lista contenente liste

    Al massimo posta il codice

  • Re: Lista contenente liste

    Come immaginavo trovo dei problemi...a dire la verita questo e piu che altro un problema concettuale...ma essendo scarso in programmazione e ovvio che abbia problemi banali....insomma sto implementando questa lista di biblioteche e non riesco a definire la funzione StampaListaBiblioteche, in pratica mentre nel while esterno della stampa in cui utilizzo il puntatore delle biblioteche posso tranquillamente iterare finche non trovo "NULL", mentre ciò non e possibile quando voglio stampare la lista di libri della iesima biblioteca perche il suo puntatore alla fine della lista trovera il primo elemento della biblioteca successiva....spero di essermi spiegato bene e di aver postato un codice piu chiaro possibile.....grazie ancora per qualsiasi aiuto
    void LISTABIB::StampaListaBiblioteche(){
                  Lista_Bib* puntbiblioteche;
                  puntbiblioteche=testabiblioteche;
                  if(puntbiblioteche!=NULL){
    		  Lista_Lib* puntlibri;
                      while(puntbiblioteche!=NULL) {
      cout<<"La Biblioteca "<<puntbiblioteche->biblioteca.NomeBiblioteca<<" apre alle ore ";
    cout<<puntbiblioteche->biblioteca.OrarioDiApertura<<" e chiude alle ore "<<puntbiblioteche->biblioteca.OrarioDiChiusura<<endl;
      cout<<"\nI libri presenti sono:"<<endl;
    puntlibri=puntbiblioteche->biblioteca.listalib.testalibri;
         if(puntlibri!=NULL){
                while(puntlibri!=) {
     cout<<"Il Libro "<<puntlibri->libro.Titolo<<" e di "<<puntlibri->libro.NumeroPagine<<" pagine ";
     cout<<"e l'autore e "<<puntlibri->libro.Cognome<<" "<<puntlibri->libro.Nome<<"\n"<<endl;
      puntlibri=puntlibri->nextlibro;
      }        
      } 
      else{
            cout<<"Lista Libri vuota"<<endl;
    	  }
             puntbiblioteche=puntbiblioteche->nextbiblioteca;
               }        
    	  } 
              else{
              cout<<"Lista Biblioteche vuota"<<endl;
    		 }
        };
  • Re: Lista contenente liste

    Posta tutto il codice, compreso quello che già funziona, così che noi possiamo testarlo
  • Re: Lista contenente liste

    Non capisco perchè l ultimo libro di una biblioteca dovebbe puntare al primo libro della biblioteca successiva...

    Ogni biblioteca dovrebbe avere una lista di libri a se stante
  • Re: Lista contenente liste

    In pratica quando scrivo while(puntlibri!=NULL) eseguo e chiamo la funzione stampabiblioteche ogni lista biblioteca contiene tutti i libri inseriti nella biblioteca stessa ed in tutte le altre biblioteche....io da neofita pensavo che le biblioteche in memoria vengono messe in sequenza e quindi il puntatore finita la lista di libri trova un altra biblioteca e quindi trova NULL quando "appunto ha trovato tutti i libri in tutte le biblioteche...se mi dici che non e cosi allora non capisco proprio perche...tutto il codice sono tra classi main e liste sono 11 file non vorrei rompere troppo le scatole ma se x te non e un problema....
  • Re: Lista contenente liste

    .tutto il codice sono tra classi main e liste sono 11 file non vorrei rompere troppo le scatole ma se x te non e un problema....
    Tranquillo c'è il caro vecchio copia-incolla

    Non so gli altri, ma senza codice non credo di poterti aiutare...
  • Re: Lista contenente liste

    Ora che guardo meglio mi sta iniziando a sorgere il dubbio che il problema si trovi nella funzione inserimento piu che in quella stampa...cmq gentilissimo ora posto tutto il codice.....
    #if !defined(_AUTORE_H)
    #define _AUTORE_H
    
    class Autore {
    public:
    	   Autore();
    	   Autore(char * , char * );
    	   void SetNomeCognome(char * , char * );
    	   void VisualizzaNomeCognome();
    	   ~Autore();
    
    	   char Nome [100];
    	   char Cognome [100];
    	   };
    
    #endif  //_AUTORE_H
    #include "Autore.h"
    #include <string.h>
    #include <iostream>
      
        using namespace std;
        Autore::Autore(){
      	                 strcpy(Nome,"");
    	                 strcpy(Cognome,"");
        }
        Autore::Autore(char * nome, char * cognome) {
                         strcpy(Nome,nome);
                         strcpy(Cognome,cognome);
    	}
    	void Autore::SetNomeCognome(char * nome , char * cognome ){
    	                strncpy(Nome,nome,100);
    	                strncpy(Cognome,cognome,100);	
    	}
        void Autore::VisualizzaNomeCognome(){
        	            cout<<Nome<<" "<<Cognome<<endl;
        }
    		Autore::~Autore(){};
    #if !defined(_LIBRO_H)
    #define _LIBRO_H
    
    #include "Autore.h"
    
    class Libro:public Autore {
    public:
    	   Libro();
           Libro(char *, int, char *, char *);
    	   void SetLibro(char *,int, char *, char *);
    	   void VisualizzaDettagliLibro();
    	   ~Libro();
    
    	   char Titolo [100];
    	   int NumeroPagine;
    	   Autore autore;
    	   };
    	   
    #endif  //_LIBRO_H
    #include <iostream>
    #include "Libro.h"
    #include "Autore.h"
    #include <string.h>
    
        using namespace std;
        Libro::Libro():autore() {
        	          strcpy(Titolo,"");
                      NumeroPagine=0;
        };
        Libro::Libro(char * titolo, int numeropagine, char * nome, char * cognome):autore(nome, cognome) {
                      strcpy(Titolo,titolo);
                      NumeroPagine=numeropagine;
        };
    
        void Libro::VisualizzaDettagliLibro() {
         	          if(NumeroPagine>0){
         	             cout<<"il Libro "<<Titolo<<" e di "<<NumeroPagine<<" pagine e l'autore e ";
                         autore.VisualizzaNomeCognome();
         	          }
                      else{
       	              cout<<"il Libro non esiste"<<endl;
                      }
        };
        void Libro::SetLibro(char * titolo, int numeropagine, char * nome, char * cognome){
                      SetNomeCognome(nome, cognome);
    		          strncpy(Titolo,titolo,80);
         	          NumeroPagine=numeropagine;
        };
        Libro::~Libro(){};
    
    #if !defined(_LISTALIB_H)
    #define _LISTALIB_H
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    
    using namespace std;
    typedef char Parola[100];
    
    struct Lista_Lib
    {
        Libro libro;
        Lista_Lib* nextlibro;    
    };
    
    
    class LISTALIB: public Libro
    {
        
    
    public:
    	    Lista_Lib* testalibri;
    	    LISTALIB();
            LISTALIB(Libro);
            Libro getFirstLibro();
            void deleteFirstLibro();
            void addFirstLibro(Libro);
            void addcodaconparametroLibro(Libro);
            void addcodaLibro();
            void StampaListaLibro();
            bool TrovaLibroconparametro(const Parola)const;
            bool TrovaLibro()const;
         	void EliminaLibroconparametro(Parola);
         	void EliminaLibro();
            ~LISTALIB();
    };
    
    #endif  // _LISTALIB_H
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    
    using namespace std;
    typedef char Parola[100];
    
    
        LISTALIB::LISTALIB(){testalibri=NULL;};
        
    	LISTALIB::LISTALIB(Libro lib){ 
                  testalibri=new Lista_Lib;
                  testalibri->libro= lib;
                  testalibri->nextlibro= NULL;
        };
       
        Libro LISTALIB::getFirstLibro(){ return testalibri->libro;};
        
    	void LISTALIB::deleteFirstLibro(){
                  Lista_Lib * puntlibri=testalibri;
                  testalibri=testalibri->nextlibro;
                  delete puntlibri;
        };
        
    	void LISTALIB::addFirstLibro(Libro lib){
                  Lista_Lib* puntlibri= testalibri;
                  testalibri=new Lista_Lib;
                  testalibri->libro= lib;
                  testalibri->nextlibro= puntlibri;
        };
        
    	void LISTALIB::addcodaconparametroLibro(Libro lib) {
                  Lista_Lib* puntlibri;
    			/* caso lista inizialmente vuota */
                  if(testalibri==NULL){
     	                      testalibri=new Lista_Lib;
     	                      testalibri->libro= lib;
                              testalibri->nextlibro= NULL;
                  }
      		 	/* caso lista con almeno un Libro */
                  puntlibri=testalibri;
    	/* vado avanti fino alla fine della lista */
                  while(puntlibri->nextlibro!=NULL)
                  puntlibri=puntlibri->nextlibro;
    	/* qui t punta all'ultima struttura della lista: ne
    	creo una nuova e sposto il puntatore in avanti */
                  puntlibri->nextlibro=new Lista_Lib;
                  puntlibri=puntlibri->nextlibro;
    	/* metto i valori nell'ultima struttura */
                  puntlibri->libro=lib;
                  puntlibri->nextlibro=NULL;
        };
    
    	void LISTALIB::addcodaLibro() {
                  Lista_Lib* puntlibri;
    			/* caso lista inizialmente vuota */
                  if(testalibri==NULL){
     	                      testalibri=new Lista_Lib;
     	                       cout<<"Inserisci il Titolo del libro: ";
     	                      cin>>testalibri->libro.Titolo;
     	                      cout<<"\nInserisci il numero di pagine del libro: ";
     	                      cin>>testalibri->libro.NumeroPagine;
     	                      cout<<"\nInserisci il Cognome dell'Autore: ";
     	                      cin>>testalibri->libro.Cognome;
     	                      cout<<"\nInserisci il Nome dell'Autore: ";
     	                      cin>>testalibri->libro.Nome;
     	                      testalibri->nextlibro= NULL;
                  }
                  else{
                  
      		 	/* caso lista con almeno un Libro */
                  puntlibri=testalibri;
    	/* vado avanti fino alla fine della lista */
                  while(puntlibri->nextlibro!=NULL)
                  puntlibri=puntlibri->nextlibro;
    	/* qui t punta all'ultima struttura della lista: ne
    	creo una nuova e sposto il puntatore in avanti */
                  puntlibri->nextlibro=new Lista_Lib;
                  puntlibri=puntlibri->nextlibro;
    	/* metto i valori nell'ultima struttura */
                    		  cout<<"Inserisci il Titolo del libro: ";
     	                      cin>>puntlibri->libro.Titolo;
     	                      cout<<"\nInserisci il numero di pagine del libro: ";
     	                      cin>>puntlibri->libro.NumeroPagine;
     	                      cout<<"\nInserisci il Cognome dell'Autore: ";
     	                      cin>>puntlibri->libro.Cognome;
     	                      cout<<"\nInserisci il Nome dell'Autore: ";
     	                      cin>>puntlibri->libro.Nome;
    			  puntlibri->nextlibro=NULL;}
        };
    
        void LISTALIB::StampaListaLibro(){
                  Lista_Lib* puntlibri;
                  puntlibri=testalibri;
                  if(puntlibri!=NULL){
                              while(puntlibri!=NULL) {
                                    cout<<"Il Libro "<<puntlibri->libro.Titolo<<" e di "<<puntlibri->libro.NumeroPagine<<" pagine ";
    	                            cout<<"e l'autore e "<<puntlibri->libro.Cognome<<" "<<puntlibri->libro.Nome<<"\n"<<endl;
                                    puntlibri=puntlibri->nextlibro;
                                    }        
    						  } 
                  else{
                         	  cout<<"Lista vuota"<<endl;
    			  }
        };
        
    	bool LISTALIB::TrovaLibroconparametro(const Parola P)const{
    	          bool trovato=false;
    	          Lista_Lib* puntlibri=testalibri;
    	          while (puntlibri && !trovato) {
    	               	if(strncmp(puntlibri->libro.Titolo,P,100)==0) {trovato=true;}
    	                else{puntlibri=puntlibri->nextlibro;}
    	          }
    			  if(!trovato){cout<<"non trovato"<<endl;}
    	          else{cout<<"trovato"<<endl;}
    	          return trovato;	
    
        };
    
        bool LISTALIB::TrovaLibro()const{
        	      Parola P;
        	      cout<<"Inserisci Libro da trovare: ";
        	      cin>>P;
    	          bool trovato=false;
    	          Lista_Lib* puntlibri=testalibri;
    	          while (puntlibri && !trovato) {
    	               	if(strncmp(puntlibri->libro.Titolo,P,100)==0) {trovato=true;}
    	                else{puntlibri=puntlibri->nextlibro;}
    	          }
    			  if(!trovato){cout<<"non trovato"<<endl;}
    	          else{cout<<"trovato"<<endl;}
    	          return trovato;	
    
        };
        
        void LISTALIB::EliminaLibroconparametro(Parola P){
                  Lista_Lib * puntlibri=testalibri;
                  Lista_Lib * prec=NULL;
                  Lista_Lib * curr;
                  bool trovato=false;
                  if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                         testalibri=testalibri->nextlibro;
                         free (puntlibri);
                  }
                  else{
                  while (puntlibri && !trovato){
                        if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                                    prec->nextlibro=puntlibri->nextlibro;
                                    free (puntlibri);
                                    trovato=true;
                                    }
                        else{
                                    prec=puntlibri;
                                    puntlibri=puntlibri->nextlibro;
                                    }
                        }
                 }     
    			 if(!trovato)
                 cout<<"Libro non trovato"<<endl;
        };
    
    void LISTALIB::EliminaLibro(){
    	           Parola P;
    	           cout<<"Inserisci Libro da eliminare: ";
    	           cin>>P;
                  Lista_Lib * puntlibri=testalibri;
                  Lista_Lib * prec=NULL;
                  Lista_Lib * curr;
                  bool trovato=false;
                  if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                         testalibri=testalibri->nextlibro;
                         free (puntlibri);
                  }
                  else{
                  while (puntlibri && !trovato){
                        if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                                    prec->nextlibro=puntlibri->nextlibro;
                                    free (puntlibri);
                                    trovato=true;
                                    }
                        else{
                                    prec=puntlibri;
                                    puntlibri=puntlibri->nextlibro;
                                    }
                        }
                 }     
    			 if(!trovato)
                 cout<<"Libro non trovato"<<endl;
        };
    
        LISTALIB::~LISTALIB(){};
    
    
    #if !defined(_BIBLIOTECA_H)
    #define _BIBLIOTECA_H
    
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    
    typedef char Parola[100];
    class Biblioteca:public Libro {
    public:
    	   Biblioteca();
    	   Biblioteca(Parola, int, int);
           void VisualizzaOrarioApertura();
    	   void VisualizzaOrarioChiusura();
    	   void main_menu (char &);
    	   void menu_lista(char &);
           ~Biblioteca();
    
    	   Parola NomeBiblioteca;
           int OrarioDiApertura;
    	   int OrarioDiChiusura;
    	   LISTALIB listalib;
    	   void SetBiblioteca();
    	   void SetNomeBiblioteca();
    	   void ImpostaOrarioApertura(int);
    	   void ImpostaOrarioChiusura(int);
    };
    
    #endif  //_BIBLIOTECA_H
    
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    #include "Biblioteca.h"
    
        typedef char Parola[100];
        using namespace std;
        
    	Biblioteca::Biblioteca() {};
        
        void Biblioteca::SetBiblioteca(){
        	    cout<<"Inserisci il Nome della Biblioteca: ";
                cin>>NomeBiblioteca;
                cout<<"\nInserisci Orario di Apertura: ";
                cin>>OrarioDiApertura;
                cout<<"\nInserisci Orario di Chiusura: ";
                cin>>OrarioDiChiusura;
                cout<<"\n"<<endl;
                char scelta_main;
    	
    	        bool esci=false;
    	
    	        do{
    		       main_menu(scelta_main);
    		       switch(scelta_main){
    			                       case '1':{
    				                        char scelta_lista;
    				                  		Parola cognome;
    				                        bool finish=false;
    				                                do {
    				                                    menu_lista(scelta_lista);
    					                                 switch (scelta_lista) {
    					                                              	case '1':
    							                                            	listalib.addcodaLibro();
    								                                            break;					
    					                                               	case '2':
    					                                                   		listalib.EliminaLibro();
    					                                                  		break;
    					                                              	case '3':
    					                                                  		listalib.StampaListaLibro();
    					                                                   		break;
    					                                              	case '4':
    					                                                	    listalib.TrovaLibro();
    					                                                		break;
    					                                                      	case '5':
    						                                                  	finish=true;
    					                                                 		break;
    					                                                      	default:
    					                                                 		break;
    							                             					}					
    			                                    	} while(!finish);
    				                        		      break; 				
    	                                     		}				
    			            			case '2':
    			                              VisualizzaOrarioApertura();
    			                              break;
    		                         	case '3':
    			                              VisualizzaOrarioChiusura();
    				                          break;
    			                        case '4':
    				                          esci=true;
    				                          break;
    				  			        default:
    			      				    break;
                                		}
    		                    } 
    		while(!esci);
        };
    
        
        
        Biblioteca::Biblioteca(Parola nomebiblioteca, int orarioapertura, int orariochiusura){
                      strcpy(NomeBiblioteca,nomebiblioteca);
                      OrarioDiApertura=orarioapertura;
                      OrarioDiChiusura=orariochiusura;
                      char scelta_main;
    	
    	bool esci=false;
    	
    	        do{
    		       main_menu(scelta_main);
    		       switch(scelta_main){
    			                       case '1':{
    				                        char scelta_lista;
    				                  		Parola cognome;
    				                        bool finish=false;
    				                                do {
    				                                    menu_lista(scelta_lista);
    					                                 switch (scelta_lista) {
    					                                              	case '1':
    							                                            	listalib.addcodaLibro();
    								                                            break;					
    					                                               	case '2':
    					                                                   		listalib.EliminaLibro();
    					                                                  		break;
    					                                              	case '3':
    					                                                  		listalib.StampaListaLibro();
    					                                                   		break;
    					                                              	case '4':
    					                                                	    listalib.TrovaLibro();
    					                                                		break;
    					                                                      	case '5':
    						                                                  	finish=true;
    					                                                 		break;
    					                                                      	default:
    					                                                 		break;
    							                             					}					
    			                                    	} while(!finish);
    				                        		      break; 				
    	                                     		}				
    			            			case '2':
    			                              VisualizzaOrarioApertura();
    			                              break;
    		                         	case '3':
    			                              VisualizzaOrarioChiusura();
    				                          break;
    			                        case '4':
    				                          esci=true;
    				                          break;
    				  			        default:
    			      				    break;
                                		}
    		                    } 
    		while(!esci);	
        };
    
    
        void Biblioteca::main_menu(char &scelta){
    			do{
    			cout<<"\n\n------------ Menu Biblioteca "<<NomeBiblioteca<<" ------------"<<endl;
    			cout<<"1 - Lista Libri della Biblioteca "<<endl;
    			cout<<"2 - Visualizza orario di apertura"<<endl;
    			cout<<"3 - Visualizza orario di chiusura"<<endl;
    			cout<<"4 - Torna al Menu Facolta" << endl;
    			cout<<"Inserire l'ADT desiderato: "<<endl;
    			cin>>scelta;
    		} while(scelta<'1' && scelta>'2');
        };
    
    
    
        void Biblioteca::menu_lista(char & scelta){
    			 do{
    			cout<<"\n\n------------ Lista Libri della Biblioteca "<<NomeBiblioteca<<" ------------"<<endl;
    			cout<<"1 - Inserisci Libro in Lista"<<endl;
    			cout<<"2 - Elimina un preciso Libro presente in lista"<< endl;
    			cout<<"3 - Visualizza la Lista degli Libri inseriti"<< endl;
    			cout<<"4 - Controlla se un preciso Libro e' presente"<<endl;
    			cout<<"5 - Torna al Menu Biblioteca"<<endl;			
    			cout<<"Inserire l'operazione che si desidera effettuare: "<<endl;
    			cin>>scelta;
    	} while (scelta<'1' && scelta>'6');	
        };
    
    
        
        void Biblioteca::SetNomeBiblioteca(){
                      cout<<"Inserisci il Nome della Biblioteca: ";
                      cin>>NomeBiblioteca;
    	};
       
        void Biblioteca::VisualizzaOrarioApertura(){
        	cout<<"La Biblioteca "<<NomeBiblioteca<<" apre alle ore "<<OrarioDiApertura<<endl;
        };
        
    	void Biblioteca::VisualizzaOrarioChiusura(){
    		cout<<"La Biblioteca "<<NomeBiblioteca<<" chiude alle ore "<<OrarioDiChiusura<<endl;
        };
       
        Biblioteca::~Biblioteca(){};
    
    
    #if !defined(_LISTABIB_H)
    #define _LISTABIB_H
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "Biblioteca.h"
    
    using namespace std;
    typedef char Parola[100];
    
    struct Lista_Bib
    {
        Biblioteca biblioteca;
        Lista_Bib* nextbiblioteca;    
    };
    
    
    class LISTABIB: public Biblioteca
    {
    private:
            Lista_Bib* testabiblioteche;
    
    public:
            LISTABIB();
            LISTABIB(Biblioteca);
            Biblioteca getFirstBiblioteca();
            void deleteFirstBiblioteca();
            void addFirstBiblioteca(Biblioteca);
            void addcodaconparametroBiblioteca(Biblioteca);
            void addcodaBiblioteca();
            void StampaListaBiblioteche();
            bool TrovaBibliotecaconparametro(const Parola)const;
            bool TrovaBiblioteca()const;
         	void EliminaBibliotecaconparametro(Parola);
         	void EliminaBiblioteca();
            ~LISTABIB();
    };
    
    #endif  // _LISTABIB_H
    
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "Biblioteca.h"
    #include "LISTALIB.h"
    #include "LISTABIB.h"
    
        using namespace std;
        typedef char Parola[100];
    
        LISTABIB::LISTABIB(){testabiblioteche=NULL;};
        
    	LISTABIB::LISTABIB(Biblioteca bib){ 
                  testabiblioteche=new Lista_Bib;
                  testabiblioteche->biblioteca=bib;
                  testabiblioteche->nextbiblioteca=NULL;
        };
       
        Biblioteca LISTABIB::getFirstBiblioteca(){ return testabiblioteche->biblioteca; };
        
    	void LISTABIB::deleteFirstBiblioteca(){
                  Lista_Bib * puntbiblioteche=testabiblioteche;
                  testabiblioteche=testabiblioteche->nextbiblioteca;
                  delete puntbiblioteche;
        };
        
    	void LISTABIB::addFirstBiblioteca(Biblioteca bib){
                  Lista_Bib* puntbiblioteche=testabiblioteche;
                  testabiblioteche=new Lista_Bib;
                  testabiblioteche->biblioteca= bib;
                  testabiblioteche->nextbiblioteca= puntbiblioteche;
        };
        
    	void LISTABIB::addcodaconparametroBiblioteca(Biblioteca bib) {
                  Lista_Bib* puntbiblioteche;
    			/* caso lista inizialmente vuota */
                  if(testabiblioteche==NULL){
     	                      testabiblioteche=new Lista_Bib;
     	                      testabiblioteche->biblioteca= bib;
                              testabiblioteche->nextbiblioteca= NULL;
                  }
      		 	/* caso lista con almeno un Biblioteca */
                  puntbiblioteche=testabiblioteche;
    	/* vado avanti fino alla fine della lista */
                  while(puntbiblioteche->nextbiblioteca!=NULL)
                  puntbiblioteche=puntbiblioteche->nextbiblioteca;
    	/* qui t punta all'ultima struttura della lista: ne
    	creo una nuova e sposto il puntatore in avanti */
                  puntbiblioteche->nextbiblioteca=new Lista_Bib;
                  puntbiblioteche=puntbiblioteche->nextbiblioteca;
    	/* metto i valori nell'ultima struttura */
                  puntbiblioteche->biblioteca=bib;
                  puntbiblioteche->nextbiblioteca=NULL;
        };
    
    	void LISTABIB::addcodaBiblioteca() {
                  Lista_Bib* puntbiblioteche;
    			/* caso lista inizialmente vuota */
                  if(testabiblioteche==NULL){
     	                      testabiblioteche=new Lista_Bib;
     	                      testabiblioteche->biblioteca.SetBiblioteca();
     	                      testabiblioteche->nextbiblioteca= NULL;
                  }
                  else{
                  
      		 	/* caso lista con almeno un Biblioteca */
                  puntbiblioteche=testabiblioteche;
    	/* vado avanti fino alla fine della lista */
                  while(puntbiblioteche->nextbiblioteca!=NULL)
                  puntbiblioteche=puntbiblioteche->nextbiblioteca;
    	/* qui t punta all'ultima struttura della lista: ne
    	creo una nuova e sposto il puntatore in avanti */
                  puntbiblioteche->nextbiblioteca=new Lista_Bib;
                  puntbiblioteche=puntbiblioteche->nextbiblioteca;
    	/* metto i valori nell'ultima struttura */
                  puntbiblioteche->biblioteca.SetBiblioteca();
    			  puntbiblioteche->nextbiblioteca=NULL;}
        };
    
        void LISTABIB::StampaListaBiblioteche(){
                  Lista_Bib* puntbiblioteche;
                  puntbiblioteche=testabiblioteche;
                  if(puntbiblioteche!=NULL){
    			              Lista_Lib* puntlibri;
                              while(puntbiblioteche!=NULL) {
                                    cout<<"La Biblioteca "<<puntbiblioteche->biblioteca.NomeBiblioteca<<" apre alle ore ";
    								cout<<puntbiblioteche->biblioteca.OrarioDiApertura<<" e chiude alle ore "<<puntbiblioteche->biblioteca.OrarioDiChiusura<<endl;
    	                            cout<<"\nI libri presenti sono:"<<endl;
    								puntlibri=puntbiblioteche->biblioteca.listalib.testalibri;
                                    if(puntlibri!=NULL){
                                    while(puntlibri!=NULL) {
                                    cout<<"Il Libro "<<puntlibri->libro.Titolo<<" e di "<<puntlibri->libro.NumeroPagine<<" pagine ";
    	                            cout<<"e l'autore e "<<puntlibri->libro.Cognome<<" "<<puntlibri->libro.Nome<<"\n"<<endl;
                                    puntlibri=puntlibri->nextlibro;
                                    }        
    						  } 
                  else{
                         	  cout<<"Lista Libri vuota"<<endl;
    			  }
                                    puntbiblioteche=puntbiblioteche->nextbiblioteca;
                                    }        
    						  } 
                  else{
                         	  cout<<"Lista Biblioteche vuota"<<endl;
    			  }
        };
        
    	bool LISTABIB::TrovaBibliotecaconparametro(const Parola P)const{
    	          bool trovato=false;
    	          Lista_Bib* puntbiblioteche=testabiblioteche;
    	          while (puntbiblioteche && !trovato) {
    	               	if(strncmp(puntbiblioteche->biblioteca.NomeBiblioteca,P,100)==0) {trovato=true;}
    	                else{puntbiblioteche=puntbiblioteche->nextbiblioteca;}
    	          }
    			  if(!trovato){cout<<"non trovata"<<endl;}
    	          else{cout<<"trovata"<<endl;}
    	          return trovato;	
    
        };
    
        bool LISTABIB::TrovaBiblioteca()const{
        	      Parola P;
        	      cout<<"Inserisci Biblioteca da trovare: ";
        	      cin>>P;
    	          bool trovato=false;
    	          Lista_Bib* puntbiblioteche=testabiblioteche;
    	          while (puntbiblioteche && !trovato) {
    	               	if(strncmp(puntbiblioteche->biblioteca.NomeBiblioteca,P,100)==0) {trovato=true;}
    	                else{puntbiblioteche=puntbiblioteche->nextbiblioteca;}
    	          }
    			  if(!trovato){cout<<"non trovata"<<endl;}
    	          else{cout<<"trovata"<<endl;}
    	          return trovato;	
    
        };
        
        void LISTABIB::EliminaBibliotecaconparametro(Parola P){
                  Lista_Bib * puntbiblioteche=testabiblioteche;
                  Lista_Bib * prec=NULL;
                  Lista_Bib * curr;
                  bool trovato=false;
                  if (strncmp(puntbiblioteche->biblioteca.NomeBiblioteca,P,100)==0){
                         testabiblioteche=testabiblioteche->nextbiblioteca;
                         free (puntbiblioteche);
                  }
                  else{
                  while (puntbiblioteche && !trovato){
                        if (strncmp(puntbiblioteche->biblioteca.NomeBiblioteca,P,100)==0){
                                    prec->nextbiblioteca=puntbiblioteche->nextbiblioteca;
                                    free (puntbiblioteche);
                                    trovato=true;
                                    }
                        else{
                                    prec=puntbiblioteche;
                                    puntbiblioteche=puntbiblioteche->nextbiblioteca;
                                    }
                        }
                 }     
    			 if(!trovato)
                 cout<<"Biblioteca non trovato"<<endl;
        };
    
    void LISTABIB::EliminaBiblioteca(){
    	           Parola P;
    	           cout<<"Inserisci Biblioteca da eliminare: ";
    	           cin>>P;
                  Lista_Bib * puntbiblioteche=testabiblioteche;
                  Lista_Bib * prec=NULL;
                  Lista_Bib * curr;
                  bool trovato=false;
                  if (strncmp(puntbiblioteche->biblioteca.NomeBiblioteca,P,100)==0){
                         testabiblioteche=testabiblioteche->nextbiblioteca;
                         free (puntbiblioteche);
                  }
                  else{
                  while (puntbiblioteche && !trovato){
                        if (strncmp(puntbiblioteche->biblioteca.NomeBiblioteca,P,100)==0){
                                    prec->nextbiblioteca=puntbiblioteche->nextbiblioteca;
                                    free (puntbiblioteche);
                                    trovato=true;
                                    }
                        else{
                                    prec=puntbiblioteche;
                                    puntbiblioteche=puntbiblioteche->nextbiblioteca;
                                    }
                        }
                 }     
    			 if(!trovato)
                 cout<<"Biblioteca non trovata"<<endl;
        };
        LISTABIB::~LISTABIB(){};
    
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "Biblioteca.h"
    #include "LISTALIB.h"
    #include "LISTABIB.h"
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char** argv) {
    	LISTABIB l;
        Biblioteca n;
    
        n.SetBiblioteca();
        l.addFirstBiblioteca(n);
        n.SetBiblioteca();
        l.addcodaconparametroBiblioteca(n);
        l.StampaListaBiblioteche();
        return 0;
    
    };
    
  • Re: Lista contenente liste

    Peso di aver capito l'errore...dovrebbe essere nel main perche gli do la funzione metti in coda con il parametro da inserire, invece devo dargli quello senza parametro e tutto sembra funzionare...se magri mi date conferma e meglio ma cmq grazie lo stesso....
  • Re: Lista contenente liste

    A una prima occhiata la funizone di stampa mi sembra corretta...

    Questo pm guarderò con calma
  • Re: Lista contenente liste

    Se listalib ha un metodo fatto per stampare la lista di libri perchè non lo usi?
    void LISTABIB::StampaListaBiblioteche()
    {
        Lista_Bib* puntbiblioteche;
        puntbiblioteche=testabiblioteche;
    
        if(puntbiblioteche!=NULL)
        {
            //Lista_Lib* puntlibri;
            while(puntbiblioteche!=NULL)
            {
                cout<<"La Biblioteca "<<puntbiblioteche->biblioteca.NomeBiblioteca<<" apre alle ore ";
                cout<<puntbiblioteche->biblioteca.OrarioDiApertura<<" e chiude alle ore "<<puntbiblioteche->biblioteca.OrarioDiChiusura<<endl;
                cout<<"\nI libri presenti sono:"<<endl;
                
                puntbiblioteche->biblioteca.listalib.StampaListaLibro();
                
                //puntlibri=puntbiblioteche->biblioteca.listalib.testalibri;
                
                /*if(puntlibri!=NULL)
                {
                    while(puntlibri!=NULL)
                    {
                        cout<<"Il Libro "<<puntlibri->libro.Titolo<<" e di "<<puntlibri->libro.NumeroPagine<<" pagine ";
                        cout<<"e l'autore e "<<puntlibri->libro.Cognome<<" "<<puntlibri->libro.Nome<<"\n"<<endl;
                        puntlibri=puntlibri->nextlibro;
                    }
                }
                else
                {
                    cout<<"Lista Libri vuota"<<endl;
                }*/
                
                
                
                puntbiblioteche=puntbiblioteche->nextbiblioteca;
            }
        }
        else
        {
            cout<<"Lista Biblioteche vuota"<<endl;
        }
    };

    Ma quindi ti funziona?
  • Re: Lista contenente liste

    Ho sistemato la cosa....come avevo pensato era un errore nel main per questo non mi spiegavo....ti ringrazio tantissimo cmq per la disponibilita....
    ps: in ogni caso ora ho un altro problema nella lista libri in pratica ho provato ad aggiungere una variabile booleana che mi indica se il libro e disponibile o e in prestito con le funzioni di prendiinprestito e restituisci nella classe listalibri....ma quando eseguo i libri rimangono sempre disponibili, in pratica il valore della variabile booleana puntata dal puntatore non cambia dopo la funzione, e questo sicuramente non e un errore nel main....proprio non ci arrivo...posto il codice se potete aiutarmi in questo problema
    
    #if !defined(_AUTORE_H)
    #define _AUTORE_H
    
    class Autore {
    public:
    	   Autore();
    	   Autore(char * , char * );
    	   void SetNomeCognome(char * , char * );
    	   void VisualizzaNomeCognome();
    	   ~Autore();
    
    	   char Nome [100];
    	   char Cognome [100];
    	   };
    
    #endif  //_AUTORE_H
    
    
    #include "Autore.h"
    #include <string.h>
    #include <iostream>
      
        using namespace std;
        Autore::Autore(){
      	                 strcpy(Nome,"");
    	                 strcpy(Cognome,"");
        }
        Autore::Autore(char * nome, char * cognome) {
                         strcpy(Nome,nome);
                         strcpy(Cognome,cognome);
    	}
    	void Autore::SetNomeCognome(char * nome , char * cognome ){
    	                strncpy(Nome,nome,100);
    	                strncpy(Cognome,cognome,100);	
    	}
        void Autore::VisualizzaNomeCognome(){
        	            cout<<Nome<<" "<<Cognome<<endl;
        }
    		Autore::~Autore(){};
    
    
    #if !defined(_LIBRO_H)
    #define _LIBRO_H
    
    #include "Autore.h"
    
    class Libro:public Autore {
    public:
    	   Libro();
           Libro(char *, int, char *, char *);
    	   void SetLibro(char *,int, char *, char *);
    	   void VisualizzaDettagliLibro();
    	   void prestato();
           void restituito();
    	   ~Libro();
    
    	   char Titolo [100];
    	   int NumeroPagine;
    	   Autore autore;
    	   bool disponibile;
    	   };
    	   
    #endif  //_LIBRO_H
    
    
    #include <iostream>
    #include "Libro.h"
    #include "Autore.h"
    #include <string.h>
    
        using namespace std;
        Libro::Libro():autore() {
        	          strcpy(Titolo,"");
                      NumeroPagine=0;
                      disponibile=true;
        };
        Libro::Libro(char * titolo, int numeropagine, char * nome, char * cognome):autore(nome, cognome) {
                      strcpy(Titolo,titolo);
                      NumeroPagine=numeropagine;
                      disponibile=true;
        };
    
        void Libro::VisualizzaDettagliLibro() {
         	          if(NumeroPagine>0){
         	             cout<<"il Libro "<<Titolo<<" e di "<<NumeroPagine<<" pagine e l'autore e ";
                         autore.VisualizzaNomeCognome();
                       if(disponibile=true){
                       	cout<<" ed e disponibile"<<endl;
                       }
                       else {cout<<" ed e in prestito"<<endl;}
         	          }
                      else{
       	              cout<<"il Libro non esiste"<<endl;
                      }
        };
        void Libro::SetLibro(char * titolo, int numeropagine, char * nome, char * cognome){
                      SetNomeCognome(nome, cognome);
    		          strncpy(Titolo,titolo,80);
         	          NumeroPagine=numeropagine;
         	          };
        void Libro::prestato(){
        bool prestatoOk=false;
        if (disponibile){	
          disponibile=false;
          prestatoOk=true;
        };
    
        disponibile=prestatoOk;
      }
    
      void Libro::restituito(){
        bool ritornatoOk=false;
        if (!disponibile){	
          disponibile=true;
          ritornatoOk=true;
        };
    
        disponibile=ritornatoOk;
      }
           
      Libro::~Libro(){};
    
    
    #if !defined(_LISTALIB_H)
    #define _LISTALIB_H
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    
    using namespace std;
    typedef char Parola[100];
    
    struct Lista_Lib
    {
        Libro libro;
        Lista_Lib* nextlibro;    
    };
    
    
    class LISTALIB: public Libro
    {
        
    
    public:
    	    Lista_Lib* testalibri;
    	    LISTALIB();
            LISTALIB(Libro);
            Libro getFirstLibro();
            void deleteFirstLibro();
            void addFirstLibro(Libro);
            void addcodaconparametroLibro(Libro);
            void addcodaLibro();
            void StampaListaLibro();
            void TrovaLibroconparametro(const Parola)const;
            void TrovaLibro()const;
         	void EliminaLibroconparametro(Parola);
         	void EliminaLibro();
         	void PrendiInPrestito();
         	void Restituisci();
            ~LISTALIB();
    };
    
    #endif  // _LISTALIB_H
    
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    
    using namespace std;
    typedef char Parola[100];
    
    
        LISTALIB::LISTALIB(){testalibri=NULL;};
        
    	LISTALIB::LISTALIB(Libro lib){ 
                  testalibri=new Lista_Lib;
                  testalibri->libro= lib;
                  testalibri->nextlibro= NULL;
        };
       
        Libro LISTALIB::getFirstLibro(){ return testalibri->libro;};
        
    	void LISTALIB::deleteFirstLibro(){
                  Lista_Lib * puntlibri=testalibri;
                  testalibri=testalibri->nextlibro;
                  delete puntlibri;
        };
        
    	void LISTALIB::addFirstLibro(Libro lib){
                  Lista_Lib* puntlibri= testalibri;
                  testalibri=new Lista_Lib;
                  testalibri->libro= lib;
                  testalibri->nextlibro= puntlibri;
        };
        
    	void LISTALIB::addcodaconparametroLibro(Libro lib) {
                  Lista_Lib* puntlibri;
    			/* caso lista inizialmente vuota */
                  if(testalibri==NULL){
     	                      testalibri=new Lista_Lib;
     	                      testalibri->libro= lib;
                              testalibri->nextlibro= NULL;
                  }
      		 	/* caso lista con almeno un Libro */
                  puntlibri=testalibri;
    	/* vado avanti fino alla fine della lista */
                  while(puntlibri->nextlibro!=NULL)
                  puntlibri=puntlibri->nextlibro;
    	/* qui t punta all'ultima struttura della lista: ne
    	creo una nuova e sposto il puntatore in avanti */
                  puntlibri->nextlibro=new Lista_Lib;
                  puntlibri=puntlibri->nextlibro;
    	/* metto i valori nell'ultima struttura */
                  puntlibri->libro=lib;
                  puntlibri->nextlibro=NULL;
        };
    
    	void LISTALIB::addcodaLibro() {
                  Lista_Lib* puntlibri;
    			/* caso lista inizialmente vuota */
                  if(testalibri==NULL){
     	                      testalibri=new Lista_Lib;
     	                       cout<<"Inserisci il Titolo del libro: ";
     	                      cin>>testalibri->libro.Titolo;
     	                      cout<<"\nInserisci il numero di pagine del libro: ";
     	                      cin>>testalibri->libro.NumeroPagine;
     	                      cout<<"\nInserisci il Cognome dell'Autore: ";
     	                      cin>>testalibri->libro.Cognome;
     	                      cout<<"\nInserisci il Nome dell'Autore: ";
     	                      cin>>testalibri->libro.Nome;
     	                      testalibri->nextlibro= NULL;
                  }
                  else{
                  
      		 	/* caso lista con almeno un Libro */
                  puntlibri=testalibri;
    	/* vado avanti fino alla fine della lista */
                  while(puntlibri->nextlibro!=NULL)
                  puntlibri=puntlibri->nextlibro;
    	/* qui t punta all'ultima struttura della lista: ne
    	creo una nuova e sposto il puntatore in avanti */
                  puntlibri->nextlibro=new Lista_Lib;
                  puntlibri=puntlibri->nextlibro;
    	/* metto i valori nell'ultima struttura */
                    		  cout<<"Inserisci il Titolo del libro: ";
     	                      cin>>puntlibri->libro.Titolo;
     	                      cout<<"\nInserisci il numero di pagine del libro: ";
     	                      cin>>puntlibri->libro.NumeroPagine;
     	                      cout<<"\nInserisci il Cognome dell'Autore: ";
     	                      cin>>puntlibri->libro.Cognome;
     	                      cout<<"\nInserisci il Nome dell'Autore: ";
     	                      cin>>puntlibri->libro.Nome;
    			  puntlibri->nextlibro=NULL;}
        };
    
        void LISTALIB::StampaListaLibro(){
                  Lista_Lib* puntlibri;
                  puntlibri=testalibri;
                  if(puntlibri!=NULL){
                              while(puntlibri!=NULL) {
                                    cout<<"Il Libro "<<puntlibri->libro.Titolo<<" e di "<<puntlibri->libro.NumeroPagine<<" pagine ";
    	                            cout<<"e l'autore e "<<puntlibri->libro.Cognome<<" "<<puntlibri->libro.Nome<<endl;
    	                            if(puntlibri->libro.disponibile=true){cout<<" ed e disponibile\n"<<endl;}
    	                            else{cout<<" ed e in prestito\n"<<endl;}
                                    puntlibri=puntlibri->nextlibro;
                                    }        
    						  } 
                  else{
                         	  cout<<"Lista vuota"<<endl;
    			  }
        };
        
    	void LISTALIB::TrovaLibroconparametro(const Parola P)const{
    	          bool trovato=false;
    	          Lista_Lib* puntlibri=testalibri;
    	          while (puntlibri && !trovato) {
    	               	if(strncmp(puntlibri->libro.Titolo,P,100)==0) {trovato=true;}
    	                else{puntlibri=puntlibri->nextlibro;}
    	          }
    			  if(!trovato){cout<<"non trovato"<<endl;}
    	          else{cout<<"trovato"<<endl;
    			  if(puntlibri->libro.disponibile=true){cout<<" ed e disponibile"<<endl;}
    			  else{cout<<" ed e in prestito"<<endl;}
    			  }
        };
    
        void LISTALIB::TrovaLibro()const{
        	      Parola P;
        	      cout<<"Inserisci Libro da trovare: ";
        	      cin>>P;
    	          bool trovato=false;
    	          Lista_Lib* puntlibri=testalibri;
    	          while (puntlibri && !trovato) {
    	               	if(strncmp(puntlibri->libro.Titolo,P,100)==0) {trovato=true;}
    	                else{puntlibri=puntlibri->nextlibro;}
    	          }
    			  if(!trovato){cout<<"non trovato"<<endl;}
    	          else{cout<<"trovato"<<endl;
    			  if(puntlibri->libro.disponibile=true){cout<<" ed e disponibile"<<endl;}
    			  else{cout<<" ed e in prestito"<<endl;}
    			  }
    	};
        
        void  LISTALIB::PrendiInPrestito(){
        	      Parola P;
        	      cout<<"Inserisci Libro da prestare: ";
        	      cin>>P;
    	          bool trovato=false;
    	          Lista_Lib* puntlibri=testalibri;
    	          while (puntlibri && !trovato) {
    	               	if(strncmp(puntlibri->libro.Titolo,P,100)==0) {trovato=true;}
    	                else{puntlibri=puntlibri->nextlibro;}
    	          }
    			  if(!trovato){cout<<"non trovato"<<endl;}
    	          else{cout<<"trovato"<<endl;
    			  if(puntlibri->libro.disponibile=true){puntlibri->libro.disponibile=false;cout<<" e dato in prestito"<<endl;}
    			  else{cout<<" ed e in prestito"<<endl;}
    			  }
        };
        
        void  LISTALIB::Restituisci(){
        	      Parola P;
        	      cout<<"Inserisci Libro da restituire: ";
        	      cin>>P;
    	          bool trovato=false;
    	          Lista_Lib* puntlibri=testalibri;
    	          while (puntlibri && !trovato) {
    	               	if(strncmp(puntlibri->libro.Titolo,P,100)==0) {trovato=true;}
    	                else{puntlibri=puntlibri->nextlibro;}
    	          }
    			  if(!trovato){cout<<"non trovato"<<endl;}
    	          else{cout<<"trovato"<<endl;
    			  if(puntlibri->libro.disponibile=false){puntlibri->libro.disponibile=true;cout<<" ed e stato restituito"<<endl;}
    			  else{cout<<" ed non e in prestito"<<endl;}
    			  }
        };
        
        void LISTALIB::EliminaLibroconparametro(Parola P){
                  Lista_Lib * puntlibri=testalibri;
                  Lista_Lib * prec=NULL;
                  Lista_Lib * curr;
                  bool trovato=false;
                  if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                         testalibri=testalibri->nextlibro;
                         free (puntlibri);
                  }
                  else{
                  while (puntlibri && !trovato){
                        if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                                    prec->nextlibro=puntlibri->nextlibro;
                                    free (puntlibri);
                                    trovato=true;
                                    }
                        else{
                                    prec=puntlibri;
                                    puntlibri=puntlibri->nextlibro;
                                    }
                        }
                 }     
    			 if(!trovato)
                 cout<<"Libro non trovato"<<endl;
        };
    
    void LISTALIB::EliminaLibro(){
    	           Parola P;
    	           cout<<"Inserisci Libro da eliminare: ";
    	           cin>>P;
                  Lista_Lib * puntlibri=testalibri;
                  Lista_Lib * prec=NULL;
                  Lista_Lib * curr;
                  bool trovato=false;
                  if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                         testalibri=testalibri->nextlibro;
                         free (puntlibri);
                  }
                  else{
                  while (puntlibri && !trovato){
                        if (strncmp(puntlibri->libro.Titolo,P,100)==0){
                                    prec->nextlibro=puntlibri->nextlibro;
                                    free (puntlibri);
                                    trovato=true;
                                    }
                        else{
                                    prec=puntlibri;
                                    puntlibri=puntlibri->nextlibro;
                                    }
                        }
                 }     
    			 if(!trovato)
                 cout<<"Libro non trovato"<<endl;
        };
    
        LISTALIB::~LISTALIB(){};
    
    
    #if !defined(_BIBLIOTECA_H)
    #define _BIBLIOTECA_H
    
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    
    typedef char Parola[100];
    class Biblioteca:public Libro {
    public:
    	   Biblioteca();
    	   Biblioteca(Parola, int, int);
           void VisualizzaOrarioApertura();
    	   void VisualizzaOrarioChiusura();
    	   void main_menu (char &);
    	   void menu_lista(char &);
           ~Biblioteca();
    
    	   Parola NomeBiblioteca;
           int OrarioDiApertura;
    	   int OrarioDiChiusura;
    	   LISTALIB listabib;
    	   void SetBiblioteca();
    	   void SetNomeBiblioteca();
    	   void ImpostaOrarioApertura(int);
    	   void ImpostaOrarioChiusura(int);
    };
    
    #endif  //_BIBLIOTECA_H
    
    
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    #include "Biblioteca.h"
    
        typedef char Parola[100];
        using namespace std;
        
    	Biblioteca::Biblioteca() {};
        
        void Biblioteca::SetBiblioteca(){
        	    cout<<"Inserisci il Nome della Biblioteca: ";
                cin>>NomeBiblioteca;
                cout<<"\nInserisci Orario di Apertura: ";
                cin>>OrarioDiApertura;
                cout<<"\nInserisci Orario di Chiusura: ";
                cin>>OrarioDiChiusura;
                cout<<"\n"<<endl;
                char scelta_main;
    	
    	        bool esci=false;
    	
    	        do{
    		       main_menu(scelta_main);
    		       switch(scelta_main){
    			                       case '1':{
    				                        char scelta_lista;
    				                  		Parola cognome;
    				                        bool finish=false;
    				                                do {
    				                                    menu_lista(scelta_lista);
    					                                 switch (scelta_lista) {
    					                                              	case '1':
    							                                            	listabib.addcodaLibro();
    								                                            break;					
    					                                               	case '2':
    					                                                   		listabib.EliminaLibro();
    					                                                  		break;
    					                                              	case '3':
    					                                                  		listabib.StampaListaLibro();
    					                                                   		break;
    					                                              	case '4':
    					                                                	    listabib.TrovaLibro();
    					                                                		break;
    					                                                case '5':
    					                                                	    listabib.PrendiInPrestito();
    					                                                	    break;
    					                                                case '6':
    					                                                	    listabib.Restituisci();
    					                                                	    break;
    																	case '7':
    						                                                  	finish=true;
    					                                                 		break;
    					                                                      	default:
    					                                                 		break;
    							                             					}					
    			                                    	} while(!finish);
    				                        		      break; 				
    	                                     		}				
    			            			case '2':
    			                              VisualizzaOrarioApertura();
    			                              break;
    		                         	case '3':
    			                              VisualizzaOrarioChiusura();
    				                          break;
    			                        case '4':
    				                          esci=true;
    				                          break;
    				  			        default:
    			      				    break;
                                		}
    		                    } 
    		while(!esci);
        };
    
        
        
        Biblioteca::Biblioteca(Parola nomebiblioteca, int orarioapertura, int orariochiusura){
                      strcpy(NomeBiblioteca,nomebiblioteca);
                      OrarioDiApertura=orarioapertura;
                      OrarioDiChiusura=orariochiusura;
                      char scelta_main;
    	
    	bool esci=false;
    	
    	        do{
    		       main_menu(scelta_main);
    		       switch(scelta_main){
    			                       case '1':{
    				                        char scelta_lista;
    				                  		Parola cognome;
    				                        bool finish=false;
    				                                do {
    				                                    menu_lista(scelta_lista);
    					                                 switch (scelta_lista) {
    					                                              	case '1':
    							                                            	listabib.addcodaLibro();
    								                                            break;					
    					                                               	case '2':
    					                                                   		listabib.EliminaLibro();
    					                                                  		break;
    					                                              	case '3':
    					                                                  		listabib.StampaListaLibro();
    					                                                   		break;
    					                                              	case '4':
    					                                                	    listabib.TrovaLibro();
    					                                                		break;
    					                                                case '5':
    					                                                	    listabib.PrendiInPrestito();
    					                                                	    break;
    					                                                case '6':
    					                                                	    listabib.Restituisci();
    					                                                	    break;
    																	case '7':
    						                                                  	finish=true;
    					                                                 		break;
    					                                                      	default:
    					                                                 		break;
    							                             					}					
    			                                    	} while(!finish);
    				                        		      break; 				
    	                                     		}				
    			            			case '2':
    			                              VisualizzaOrarioApertura();
    			                              break;
    		                         	case '3':
    			                              VisualizzaOrarioChiusura();
    				                          break;
    			                        case '4':
    				                          esci=true;
    				                          break;
    				  			        default:
    			      				    break;
                                		}
    		                    } 
    		while(!esci);	
        };
    
    
        void Biblioteca::main_menu(char &scelta){
    			do{
    			cout<<"\n\n------------ Menu Biblioteca "<<NomeBiblioteca<<" ------------"<<endl;
    			cout<<"1 - Lista Libri della Biblioteca "<<endl;
    			cout<<"2 - Visualizza orario di apertura"<<endl;
    			cout<<"3 - Visualizza orario di chiusura"<<endl;
    			cout<<"4 - Torna al Menu Facolta" << endl;
    			cout<<"Inserire l'ADT desiderato: "<<endl;
    			cin>>scelta;
    		} while(scelta<'1' && scelta>'2');
        };
    
    
    
        void Biblioteca::menu_lista(char & scelta){
    			 do{
    			cout<<"\n\n------------ Lista Libri della Biblioteca "<<NomeBiblioteca<<" ------------"<<endl;
    			cout<<"1 - Inserisci Libro in Lista"<<endl;
    			cout<<"2 - Elimina un preciso Libro presente in lista"<< endl;
    			cout<<"3 - Visualizza la Lista degli Libri inseriti"<< endl;
    			cout<<"4 - Controlla se un preciso Libro e' presente"<<endl;
    			cout<<"5 - Prendi un Libro in prestito"<<endl;
    			cout<<"6 - Restituisci un Libro"<<endl;
    			cout<<"7 - Torna al Menu Biblioteca"<<endl;			
    			cout<<"Inserire l'operazione che si desidera effettuare: "<<endl;
    			cin>>scelta;
    	} while (scelta<'1' && scelta>'6');	
        };
    
    
        
        void Biblioteca::SetNomeBiblioteca(){
                      cout<<"Inserisci il Nome della Biblioteca: ";
                      cin>>NomeBiblioteca;
    	};
       
        void Biblioteca::VisualizzaOrarioApertura(){
        	cout<<"La Biblioteca "<<NomeBiblioteca<<" apre alle ore "<<OrarioDiApertura<<endl;
        };
        
    	void Biblioteca::VisualizzaOrarioChiusura(){
    		cout<<"La Biblioteca "<<NomeBiblioteca<<" chiude alle ore "<<OrarioDiChiusura<<endl;
        };
       
        Biblioteca::~Biblioteca(){};
    
    
    
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Autore.h"
    #include "Libro.h"
    #include "LISTALIB.h"
    #include "Biblioteca.h"
    
    
    int main (int argc, char * const argv[]) {
    	
    Biblioteca bibl;
    bibl.SetBiblioteca();
    	return 0;
    };
    
  • Re: Lista contenente liste

    Occhio a
    if(disponibile = true) 
    in
    void Libro::VisualizzaDettagliLibro()
    forse intendevi "=="
  • Re: Lista contenente liste

    Ecco la differenza tra un programmatore serio e un scolaretto come me in poco tempo hai trovato l'errore banale(che ovviamente ho fatto in tutti gli if) che io non sono riuscito a vedere...ti ringrazio tantissimo...
Devi accedere o registrarti per scrivere nel forum
25 risposte