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;
};