1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
#include<cstdlib>
using namespace std;
const int Lenght=20;
class libro{
private:
int isbn, copieDisponibili;
char titolo[Lenght],autore[Lenght];
public:
libro(){}
libro(int _isbn,int _copieDisponibili,char _titolo[],char _autore[])
{ set(_isbn,_copieDisponibili,_titolo,_autore); }
void set(int _isbn,int _copieDisponibili,char _titolo[],char _autore[])
{ isbn=_isbn; copieDisponibili=_copieDisponibili; strcpy(titolo,_titolo); strcpy(autore,_autore); }
int getIsbn(){ return isbn; }
void visu()
{ cout<<"Isbn: "<<isbn<<"\nCopie disponibili: "<<copieDisponibili<<"\nTitolo: "<<titolo<<"\nAutore: "<<autore<<"\n\n"; }
};
class biblioteca{
private:
vector <libro> scaffale;
char indirizzo[100];
fstream file;
public:
/* gestione input*/
void setIndirizzo(char _indirizzo[]) { strcpy(indirizzo,_indirizzo); }
void aggiungiLibro(libro _libro) { scaffale.push_back(_libro); }
int cercaLibroDaIsbn(int _isbn) { for (int i=0;i<scaffale.size();i++) if (scaffale.at(i).getIsbn()==_isbn) return i; return -1; }
/* gestione main loop */
int sceltaMenu(){
cout<<" ------ MENU -----\n";
cout<<"0) imposta indirizzo \n";
cout<<"1) carica dati da file testo \n";
cout<<"2) carica i dati da consol \n";
cout<<"3) visualizza un libro dato l'isbn \n";
cout<<"4) scrivi su file binario \n";
cout<<"5) leggi da file binario \n";
cout<<"6) gestisci singolo record\n";
cout<<"^) esci\n";
int s; cin>>s;
system("clear");
return s;
}
void menu()
{
bool f=true;
while(f){
switch(sceltaMenu())
{
case 0: gestioneImpostaIndirizzo(); break;
case 1: gestioneLetturaDaFileTxT(); break;
case 2: gestioneAggiungiLibro(); break;
case 3: gestioneRicercaLibro(); break;
case 4: gestioneScritturaBinaria(); break;
case 5: gestioneLetturaBinaria(); break;
case 6: gestioneRecordSingolo(); break;
default: f=false; break;
}
}
}
/* gestione interfaccia utente*/
void gestioneImpostaIndirizzo(){
cout<<"inserire l'indirizzo del file : "; cin>>indirizzo;
}
libro letturaDatiLibroDaConsol(){
int _isbn,_numero;
char _titolo[Lenght],_autore[Lenght];
cout<<"inserire i dati del libro: \n isbn : "; cin>>_isbn;
cout<<" numero copie : "; cin>>_numero;
cout<<" titolo : "; cin>>_titolo;
cout<<" autore : "; cin>>_autore;
return *(new libro(_isbn,_numero,_titolo,_autore));
}
void gestioneAggiungiLibro(){
aggiungiLibro(letturaDatiLibroDaConsol());
}
void gestioneRicercaLibro(){
int _isbn;
cout<<"inserire l'isbn del libro o -1 : "; cin>>_isbn;
if (_isbn==-1) for (int i=0;i<scaffale.size();i++) scaffale.at(i).visu();
else { _isbn=cercaLibroDaIsbn(_isbn); if (_isbn==-1) cout<<"libro non trovato\n"; else scaffale.at(_isbn).visu(); }
}
/* gestione lettura da file */
void gestioneLetturaDaFileTxT(){
file.open(indirizzo,fstream::in);
if (file==NULL) { cout<<"file non trovato, operazione terminata\n"; return; }
int _isbn,_numero; char _titolo[Lenght],_autore[Lenght];
while (!file.eof()){
file>>_isbn>>_numero>>_titolo>>_autore;
scaffale.push_back(*(new libro(_isbn,_numero,_titolo,_autore)));
}
scaffale.pop_back();
file.close();
}
void gestioneScritturaBinaria(){
file.open(indirizzo,fstream::out|fstream::binary);
cout<<scritturaBinaria();
file.close();
}
void gestioneLetturaBinaria(){
file.open(indirizzo,fstream::in|fstream::binary);
cout<<letturaBinaria();
file.close();
}
void gestioneRecordSingolo(){
file.close();
cout<<"inserire la posizione del record : ";
int pos; cin>>pos; pos--; pos*=sizeof(libro);
file.open(indirizzo,fstream::in|fstream::binary);
//file.seekg(pos,ios::beg);
libro temp; file.read((char*)&temp,sizeof(libro));
temp.visu();
file.close();
cout<<"1) scrivere\n^) esci\ninserire la scleta : ";
int s; cin>>s; if (s!=1) return;
file.open(indirizzo,fstream::out|fstream::app|fstream::binary);
file.seekg(sizeof(libro)*pos,ios::beg);
temp=letturaDatiLibroDaConsol();
file.write((char*)&temp,sizeof(libro));
file.close();
}
/*lettura e scrittura binaria PRIVATA*/
private:
const char* scritturaBinaria(){
if (file==NULL) return "Errore: file non trovato.\n";
file.write((char*)&(scaffale.front()),sizeof(libro)*scaffale.size());
return "scrittura su file binario avvenuta\n";
}
const char* letturaBinaria(){
if (file==NULL) return "Errore: file non trovato.\n";
libro temp;
while (!file.eof())
{
file.read((char *) &temp,sizeof(temp));
scaffale.push_back(temp);
}
scaffale.pop_back();
return "lettura da file binario avvenuta\n";
}
};
int main()
{
biblioteca bib;
bib.menu();
return 0;
}
|