Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <vector>
- #include <string>
- #include <fstream>
- #include <stdlib.h>
- #define MAX_LEN 100
- #define MAX_ELEMENTS 1000
- #define DATA_PUBB 12
- #define BIBLIOTECA "Biblioteca.txt"
- using namespace std;
- class Libro{
- public:
- string titolo;
- string autore;
- string editore;
- string datapubblicazione;
- int pagine;
- int copiedisponibili;
- int personeinattesa;
- public:
- Libro(string titolo, string autore, string editore, string datapubblicazione, int pagine, int copiedisponibili, int personeinattesa);
- ~Libro();
- };
- class Cliente{
- public:
- string nome;
- string cognome;
- public:
- Cliente(string nome, string cognome);
- ~Cliente();
- };
- Libro::Libro(string titolo, string autore, string editore, string datapubblicazione, int pagine, int copiedisponibili, int personeinattesa){
- this->titolo = titolo;
- this->autore = autore;
- this->editore = editore;
- this->datapubblicazione = datapubblicazione;
- this->pagine = pagine;
- this->copiedisponibili = copiedisponibili;
- this->personeinattesa = personeinattesa;
- }
- Libro::~Libro(){
- };
- Cliente::Cliente(string nome, string cognome){
- this->nome = nome;
- this->cognome = cognome;
- }
- Cliente::~Cliente(){
- };
- void ricerca(int elementipresenti, vector <Libro> biblioteca);
- void restituzione(int elementipresenti, vector <Libro> biblioteca);
- void prestito(int elementipresenti, vector <Libro> biblioteca);
- void inserimento();
- void eliminazione(int elementipresenti, vector <Libro> biblioteca);
- void stampa_biblioteca(int elementipresenti);
- void prenota_libro(string titolo);
- vector <Libro> biblioteca;
- int elementipresenti = 0;
- int main(int argc, char *argv[])
- {
- int scelta;
- cout << "BENVENUTO NELLA NOSTRA LIBRERIA!" << endl;
- do {
- string titolo;
- string autore;
- string editore;
- string datapubblicazione;
- string pagine_temp;
- string copiedisponibili_temp;
- string personeinattesa_temp;
- int pagine;
- int copiedisponibili;
- int personeinattesa;
- ifstream f(BIBLIOTECA);
- if(!f.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- //f.seekg(0;ios::beg);
- while(f.good()){
- getline(f,titolo);
- getline(f,autore);
- getline(f,editore);
- getline(f,datapubblicazione);
- getline(f,pagine_temp);
- pagine = atoi(pagine_temp);
- getline(f,copiedisponibili_temp);
- copiedisponibili = atoi(copiedisponibili_temp);
- getline(f,personeinattesa_temp);
- personeinattesa = atoi(personeinattesa_temp);
- //qua passi STRING non INT, converti con atoi
- Libro tmp(titolo,autore,editore,datapubblicazione,pagine,copiedisponibili,personeinattesa);
- biblioteca.push_back(tmp);
- }
- f.close();
- cout << "\n\n********************************";
- if(biblioteca.size()==1)
- cout << "\nIl nostro archivio ha in questo momento un solo libro" << endl;
- else
- cout << "\nIl nostro archivio ha in questo momento" << elementipresenti << " libri" << endl;
- cout << "\nCosa vuoi fare?" << endl;
- cout << "1. Ricerca un libro" << endl;
- cout << "2. Restituisci un libro" << endl;
- cout << "3. Richiedi in prestito un libro" << endl;
- cout << "4. Inserisci un nuovo libro" << endl;
- cout << "5. Elimina un libro gia' esistente" << endl;
- cout << "6. Stampa l'elenco dei libri" << endl;
- cout << "7. Esci" << endl;
- cin >> scelta;
- switch(scelta){
- case 1:
- if(elementipresenti>0)
- ricerca(elementipresenti, biblioteca);
- else
- cout << "L'archivio e' vuoto. Inserisci prima dei libri!" << endl;
- break;
- case 2:
- if(elementipresenti>0)
- restituzione(elementipresenti, biblioteca);
- else
- cout << "L'archivio e' vuoto. Inserisci prima dei libri e poi puoi ricercarli in caso!" << endl;
- break;
- case 3:
- if(elementipresenti>0)
- prestito(elementipresenti, biblioteca);
- else
- cout << "L'archivio e' vuoto. Inserisci prima dei libri e poi potresti prenderli in prestito!" << endl;
- break;
- case 4:
- inserimento();
- break;
- case 5:
- if(elementipresenti>0)
- eliminazione(elementipresenti, biblioteca);
- else
- cout << "L'archivio e' vuoto. Inserisci prima dei libri e poi puoi eliminarli in caso!" << endl;
- break;
- case 6:
- if(elementipresenti>0)
- stampa_biblioteca(elementipresenti);
- else
- cout << "L'archivio e' vuoto. Comincia a inserire qualcosa va!" << endl;
- break;
- case 7:
- cout << "Ci vediamo la prossima volta. Stammi bene caro!";
- exit(-1);
- default:
- cout << "Errore. Inserisci un valore tra 1 e 7 per piacere!" << endl;
- }//chiusura switch
- } while(scelta != 7);
- system("PAUSE");
- return 0;
- }//chiusura main
- void ricerca(int elementipresenti, vector <Libro> lista[]){
- string titolo;
- string autore;
- string editore;
- string datapubblicazione;
- int scelta;
- int i;
- int contatore = 0;
- cout << "\nPer cosa vuoi ricercare il libro?" << endl;
- cout << "1. Per titolo" << endl;
- cout << "2. Per autore" << endl;
- cout << "3. Per editore" << endl;
- cout << "4. Per data di pubblicazione" << endl;
- cout << "5. Torna al menu iniziale" << endl;
- cin >> scelta;
- switch(scelta){
- case 1:
- cout << "Quale libro vuoi ricercare? ";
- cin >> titolo;
- for(i = 0; i<elementipresenti; i++)
- if(strcmp(titolo, biblioteca[i].titolo)==0){
- cout << "Libro " << titolo << " trovato correttamente nel nostro archivio" << endl;
- cout << "Autore: " << biblioteca[i].autore << endl;
- cout << "Editore: " << biblioteca[i].editore << endl;
- cout << "Data di pubblicazione: " << biblioteca[i].datapubblicazione << endl;
- cout << "Numero di pagine: " << biblioteca[i].pagine << endl;
- cout << "Copie disponibili: " << biblioteca[i].copiedisponibili << endl;
- cout << "Persone in attesa: " << biblioteca[i].personeinattesa << "\n" << endl;
- contatore++;
- }//chiusura if
- if(contatore==0)
- cout << "Mi dispiace, ma il libro " << titolo << " che hai inserito non e' presente nel nostro archivio" << endl;
- break;
- case 2:
- cout << "Quale autore vuoi ricercare? ";
- cin >> autore;
- for(i = 0; i<elementipresenti; i++)
- if(strcmp(autore, biblioteca[i].autore)==0){
- cout << "Autore " << autore << " trovato correttamente nel nostro archivio" << endl;
- cout << "Titolo: " << biblioteca[i].titolo << endl;
- cout << "Editore: " << biblioteca[i].editore << endl;
- cout << "Data di pubblicazione: " << biblioteca[i].datapubblicazione << endl;
- cout << "Numero di pagine: " << biblioteca[i].pagine << endl;
- cout << "Copie disponibili: " << biblioteca[i].copiedisponibili << endl;
- cout << "Persone in attesa: " << biblioteca[i].personeinattesa << "\n" << endl;
- contatore++;
- }//chiusura if
- if(contatore==0)
- cout << "Mi dispiace, ma l'autore " << autore << " che hai inserito non ha scritto nessuno dei nostri libri presenti nel nostro archivio" << endl;
- break;
- case 3:
- cout << "Scrivi il nome di un editore o editrice? ";
- cin >> editore;
- for(i = 0; i<elementipresenti; i++)
- if(strcmp(editore, biblioteca[i].datapubblicazione)==0){
- cout << "Editore " << editore << " trovato correttamente nel nostro archivio" << endl;
- cout << "Titolo: " << biblioteca[i].titolo << endl;
- cout << "Autore : " << biblioteca[i].autore << endl;
- cout << "Data di pubblicazione: " << biblioteca[i].datapubblicazione << endl;
- cout << "Numero di pagine: " << biblioteca[i].pagine << endl;
- cout << "Copie disponibili: " << biblioteca[i].copiedisponibili << endl;
- cout << "Persone in attesa: " << biblioteca[i].personeinattesa << "\n" << endl;
- contatore++;
- }
- if(contatore==0)
- cout << "Mi dispiace, ma nel nostro archivio non c'e' nessun libro che e' stato editato da " << editore << endl;
- break;
- case 4:
- cout << "Questo o questi libri che cerchi quando sono stati pubblicati? ";
- cin >> datapubblicazione;
- for(i = 0; i<elementipresenti; i++)
- if(strcmp(datapubblicazione, biblioteca[i].datapubblicazione)==0){
- cout << "Data di pubblicazione " << datapubblicazione << " trovata correttamente nel nostro archivio" << endl;
- cout << "Titolo: " << biblioteca[i].titolo << endl;
- cout << "Autore: " << biblioteca[i].autore << endl;
- cout << "Editore: " << biblioteca[i].editore << endl;
- cout << "Numero di pagine: " << biblioteca[i].pagine << endl;
- cout << "Copie disponibili: " << biblioteca[i].copiedisponibili << endl;
- cout << "Persone in attesa: " << biblioteca[i].personeinattesa << "\n" << endl:
- contatore++;
- }
- if(contatore==0)
- cout << "Mi dispiace, ma nel nostro archivio non c'e' nessun libro pubblicato in data " << datapubblicazione << endl;
- break;
- case 5:
- break;
- default:
- cout << "Errore. Inserisci 1, 2, 3 o 4 per piacere!" << endl;
- }//chiusura switch
- }//chiusura funzione
- void restituzione(int elementiipresenti, vector <Libro> elementipresenti[]){
- string titolo;
- string buffer;
- string nomefile;
- string nome;
- string cognome;
- int index = 0;
- int i;
- int j;
- int contatore = 0;
- int righedelfile = 0;
- cout << "Quale libro devi restituire? ";
- cin >> titolo;
- for(i = 0; i<elementipresenti;i++)
- if(strcmp(titolo, biblioteca[i].titolo)==0){
- cout << "Libro " << titolo << " trovato nel nostro archivio. Grazie per avercelo riportato" << endl;
- biblioteca[i].copiedisponibili++;
- contatore++;
- }//chiusura if
- if(contatore==0)
- cout << "Mi dispiace, ma il libro " << titolo << " che hai inserito non e' presente nel nostro archivio. Forse l'hai preso in un'altra libreria";
- if(biblioteca[i].copiedisponibili==1){
- nomefile = biblioteca[i].titolo + ".txt";
- fstream fr(nomefile, ios::in);
- if(!fr.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- vector <Cliente> listaattesa;
- //fseek(fr, 0, SEEK_SET);
- while(fr){
- getline(fr,nome);
- getline(fr,cognome);
- Cliente cli(nome,cognome);
- listaattesa.push_back(cli);
- }
- fr.close();
- fstream fw(nomefile, ios::out);
- if(!fw.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- if(biblioteca[i].copiedisponibili==1)
- for(j = 1; j<listaattesa.size();j++){
- fw << listaattesa[j].nome << endl;
- fw << listaattesa[j].cognome << endl;
- }
- biblioteca[i].copiedisponibili = 0;
- biblioteca[i].personeinattesa--;
- fw.close();
- }
- fstream fw(BIBLIOTECA,ios::out);
- if(!fw.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- for(i = 0;i<elementipresenti;i++){
- fw << biblioteca[i].titolo << endl;
- fw << biblioteca[i].autore << endl;
- fw << biblioteca[i].editore << endl;
- fw << biblioteca[i].datapubblicazione << endl;
- fw << biblioteca[i].pagine << endl;
- fw << biblioteca[i].copiedisponibili << endl;
- fw << biblioteca[i].personeinattesa << endl;
- }
- fw.close();
- }
- void prestito(int elementipresenti, vector <Libro> lista[]){
- string titolo;
- int scelta;
- int i;
- int contatore = 0;
- cout << "Quale libro vuoi prendere in prestito? ";
- cin >> titolo;
- for(i = 0; i<elementipresenti;i++)
- if(strcmp(titolo, biblioteca[i].titolo)==0){
- contatore++;
- cout << "Libro " << titolo << " trovato nel nostro archivio" << endl;
- if(biblioteca[i].copiedisponibili>0){
- cout << "Sono disponibili " << biblioteca[i].copiedisponibili << " copie in archivio quindi puoi prendere in prestito il libro" << endl;
- biblioteca[i].copiedisponibili--;
- }//chiusura if
- else{
- do{
- cout << "Il libro e' nel nostro archivio ma tutte le copie disponibili sono in giro, mi spiace. Vuole prenotarlo?" << endl;
- cout << "1. Si'" << endl;
- cout << "2. No" << endl;
- cin >> scelta;
- switch(scelta){
- case 1:
- biblioteca[i].personeinattesa++;
- prenota_libro(titolo);
- case 2:
- cout << "Ok, come desidera!" << endl;
- break;
- default:
- cout << "Errore, devi inserire 1 o 2" << endl;
- }//chiusura switch
- } while((scelta<1)&&(scelta>2));
- }//chiusura else
- }//chiusura if principale
- if(contatore==0)
- cout << "Mi dispiace, ma il libro " << titolo << " che vuoi prendere in prestito non e' presente nel nostro archivio" << endl;
- fstream f(BIBLIOTECA,ios::app);
- if(!f.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- for(i = 0;i<elementipresenti;i++){
- f << biblioteca[i].titolo << endl;
- f << biblioteca[i].autore << endl;
- f << biblioteca[i].editore << endl;
- f << biblioteca[i].datapubblicazione << endl;
- f << biblioteca[i].pagine << endl;
- f << biblioteca[i].copiedisponibili << endl;
- f << biblioteca[i].personeinattesa << endl;
- }
- f.close();
- }
- void inserimento(){
- string titolo;
- string autore;
- string editore;
- string datapubblicazione;
- int pagine;
- int copiedisponibili;
- cout << "Quale e' il titolo del libro? ";
- cin >> titolo;
- cout << "Chi l'ha scritto questo libro? ";
- cin >> autore;
- cout << "E l'editore chi e'? ";
- cin >> editore;
- cout << "In che data e' stato pubblicato? ";
- cin >> datapubblicazione;
- cout << "Quante pagine ha? ";
- cin >> pagine;
- cout << "Quante copie disponibili ci sono? ";
- cin >> copiedisponibili;
- fstream f(BIBLIOTECA, ios::app);
- if(!f.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- f << titolo << endl;
- f << autore << endl;
- f << editore << endl;
- f << datapubblicazione << endl;
- f << pagine << endl;
- f << copiedisponibili << endl;
- f << 0 << endl;
- cout << "\nLibro aggiunto correttamente all'archivio!" << endl;
- f.close();
- }
- void eliminazione(int elementipresenti, vector <Libro> lista[]){
- string titolo;
- int i;
- int k;
- int contatore = 0;
- fstream f(BIBLIOTECA, ios::out);
- if(!f.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- cout << "Quale libro vuoi eliminare? ";
- cin >> titolo;
- for(i = 0; i<elementipresenti; i++)
- if(strcmp(titolo, biblioteca[i].titolo)==0){
- cout << "Libro " << titolo << " trovato nel nostro archivio" << endl;
- contatore++;
- break;
- }//chiusura if principale
- if(contatore==0)
- cout << "Mi dispiace, ma il libro " << titolo << " che vuoi eliminare non e' presente nel nostro archivio" << endl;
- else{
- if(biblioteca[i].personeinattesa==0){
- for(k = 0; k<elementipresenti; k++)
- if(k!=i){
- f << biblioteca[k].titolo << endl;
- f << biblioteca[k].autore << endl;
- f << biblioteca[k].editore << endl;
- f << biblioteca[k].datapubblicazione << endl;
- f << biblioteca[k].pagine << endl;
- f << biblioteca[k].copiedisponibili << endl;
- f << biblioteca[k].personeinattesa << endl;
- }
- cout << "Libro eliminato correttamente dall'archivio!" << endl;
- }
- else
- cout << "Il libro che hai cercato e' nell'archivio solo che " << biblioteca[k].personeinattesa << " persone sono in attesa di prenderlo quindi non puoi eliminarlo" << endl;
- }//chiusura else
- f.close();
- }
- void stampa_biblioteca(int elementipresenti){
- int i;
- cout << "--------------------" << endl;
- for(i = 0; (i < MAX_ELEMENTS) && ( i < elementipresenti); i++){
- cout << "Titolo: " << biblioteca[i].titolo << endl;
- cout << "Autore: " << biblioteca[i].autore << endl;
- cout << "Editore " << biblioteca[i].editore << endl;
- cout << "Data pubblicazione: " << biblioteca[i].datapubblicazione << endl;
- cout << "Numero di pagine: " << biblioteca[i].pagine << endl;
- cout << "Copie disponibili: " << biblioteca[i].copiedisponibili << endl;
- cout << "Persone in attesa: " << biblioteca[i].personeinattesa << endl;
- cout << endl;
- }
- cout << "--------------------" << endl;
- }
- void prenota_libro(string titolo){
- string nomefile;
- string nome;
- string cognome;
- cout << "Inserisci il nome dell'utente: ";
- cin >> nome;
- cout << "Inserisci il cognome dell'utente: ";
- cin >> cognome;
- Cliente cli(nome,cognome);
- nomefile = titolo + ".txt";
- fstream f(nomefile,ios::app);
- if(!f.good()) {
- cout << "Errore in apertura del file" << endl;
- return 0;
- }
- f << cli.nome << "\n" << cli.cognome << endl;
- cout << "Libro prenotato correttamente" << endl;
- f.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement