Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 21.71 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <fstream>
  6. #include <stdlib.h>
  7.  
  8. #define MAX_LEN 100
  9. #define MAX_ELEMENTS 1000
  10. #define DATA_PUBB 12
  11. #define BIBLIOTECA "Biblioteca.txt"
  12.  
  13. using namespace std;
  14.  
  15. class Libro{
  16.       public:
  17.       string titolo;
  18.       string autore;
  19.       string editore;
  20.       string datapubblicazione;
  21.       int pagine;
  22.       int copiedisponibili;
  23.       int personeinattesa;
  24.      
  25.       public:
  26.       Libro(string titolo, string autore, string editore, string datapubblicazione, int pagine, int copiedisponibili, int personeinattesa);
  27.       ~Libro();
  28. };
  29.  
  30. class Cliente{
  31.       public:
  32.       string nome;
  33.       string cognome;
  34.      
  35.       public:
  36.       Cliente(string nome, string cognome);
  37.       ~Cliente();
  38. };
  39.  
  40. Libro::Libro(string titolo, string autore, string editore, string datapubblicazione, int pagine, int copiedisponibili, int personeinattesa){
  41.       this->titolo = titolo;
  42.       this->autore = autore;
  43.       this->editore = editore;
  44.       this->datapubblicazione = datapubblicazione;
  45.       this->pagine = pagine;
  46.       this->copiedisponibili = copiedisponibili;
  47.       this->personeinattesa = personeinattesa;
  48. }
  49.  
  50. Libro::~Libro(){
  51. };
  52.  
  53. Cliente::Cliente(string nome, string cognome){
  54.       this->nome = nome;
  55.       this->cognome = cognome;
  56. }
  57.  
  58. Cliente::~Cliente(){
  59. };
  60.  
  61. void ricerca(int elementipresenti, vector <Libro> biblioteca);
  62. void restituzione(int elementipresenti, vector <Libro> biblioteca);
  63. void prestito(int elementipresenti, vector <Libro> biblioteca);
  64. void inserimento();
  65. void eliminazione(int elementipresenti, vector <Libro> biblioteca);
  66. void stampa_biblioteca(int elementipresenti);
  67. void prenota_libro(string titolo);
  68.  
  69. vector <Libro> biblioteca;
  70. int elementipresenti = 0;
  71.  
  72. int main(int argc, char *argv[])
  73. {
  74.      int scelta;
  75.      
  76.      cout << "BENVENUTO NELLA NOSTRA LIBRERIA!" << endl;
  77.      do {
  78.          string titolo;
  79.          string autore;
  80.          string editore;
  81.          string datapubblicazione;
  82.          string pagine_temp;
  83.          string copiedisponibili_temp;
  84.          string personeinattesa_temp;
  85.          int pagine;
  86.          int copiedisponibili;
  87.          int personeinattesa;
  88.          int elementipresenti;
  89.          
  90.          ifstream f(BIBLIOTECA);
  91.          
  92.          if(!f.good()) {
  93.                cout << "Errore in apertura del file" << endl;
  94.                return 0;
  95.           }
  96.              
  97.          //f.seekg(0;ios::beg);
  98.          while(f.good()){
  99.               getline(f,titolo);
  100.               getline(f,autore);
  101.               getline(f,editore);
  102.               getline(f,datapubblicazione);
  103.               getline(f,pagine_temp);
  104.               pagine = atoi(pagine_temp);
  105.               getline(f,copiedisponibili_temp);
  106.               copiedisponibili = atoi(copiedisponibili_temp);
  107.               getline(f,personeinattesa_temp);
  108.               personeinattesa = atoi(personeinattesa_temp);
  109.               //qua passi STRING non INT, converti con atoi
  110.               Libro tmp(titolo,autore,editore,datapubblicazione,pagine,copiedisponibili,personeinattesa);
  111.               biblioteca.push_back(tmp);            
  112.          }
  113.          f.close();
  114.          
  115.          elementipresenti = biblioteca.size()/7;
  116.          
  117.          cout << "\n\n********************************";
  118.          if(elementipresenti==1)      
  119.              cout << "\nIl nostro archivio ha in questo momento un solo libro" << endl;
  120.          else
  121.              cout << "\nIl nostro archivio ha in questo momento" << elementipresenti << " libri" << endl;
  122.          
  123.          cout << "\nCosa vuoi fare?" << endl;
  124.          cout << "1. Ricerca un libro" << endl;
  125.          cout << "2. Restituisci un libro" << endl;
  126.          cout << "3. Richiedi in prestito un libro" << endl;
  127.          cout << "4. Inserisci un nuovo libro" << endl;
  128.          cout << "5. Elimina un libro gia' esistente" << endl;
  129.          cout << "6. Stampa l'elenco dei libri" << endl;
  130.          cout << "7. Esci" << endl;
  131.          cin >> scelta;
  132.          switch(scelta){
  133.              case 1:
  134.                   if(elementipresenti>0)
  135.                        ricerca(elementipresenti, biblioteca);
  136.                   else
  137.                        cout << "L'archivio e' vuoto. Inserisci prima dei libri!" << endl;
  138.                   break;
  139.              case 2:
  140.                   if(elementipresenti>0)
  141.                        restituzione(elementipresenti, biblioteca);
  142.                   else
  143.                        cout << "L'archivio e' vuoto. Inserisci prima dei libri e poi puoi ricercarli in caso!" << endl;
  144.                   break;
  145.              case 3:
  146.                   if(elementipresenti>0)
  147.                        prestito(elementipresenti, biblioteca);
  148.                   else
  149.                        cout << "L'archivio e' vuoto. Inserisci prima dei libri e poi potresti prenderli in prestito!" << endl;
  150.                   break;
  151.              case 4:
  152.                   inserimento();
  153.                   break;
  154.              case 5:
  155.                   if(elementipresenti>0)
  156.                        eliminazione(elementipresenti, biblioteca);
  157.                   else
  158.                        cout << "L'archivio e' vuoto. Inserisci prima dei libri e poi puoi eliminarli in caso!" << endl;
  159.                   break;
  160.              case 6:
  161.                   if(elementipresenti>0)
  162.                        stampa_biblioteca(elementipresenti);
  163.                   else
  164.                        cout << "L'archivio e' vuoto. Comincia a inserire qualcosa va!" << endl;
  165.                   break;
  166.              case 7:
  167.                   cout << "Ci vediamo la prossima volta. Stammi bene caro!";
  168.                   exit(-1);
  169.              default:
  170.                   cout << "Errore. Inserisci un valore tra 1 e 7 per piacere!" << endl;  
  171.          }//chiusura switch
  172.      } while(scelta != 7);
  173.   system("PAUSE"); 
  174.   return 0;
  175. }//chiusura main
  176.  
  177. void ricerca(int elementipresenti, vector <Libro> lista[]){
  178.      string titolo;
  179.      string autore;
  180.      string editore;
  181.      string datapubblicazione;
  182.      int scelta;
  183.      int i;
  184.      int contatore = 0;
  185.      
  186.      cout << "\nPer cosa vuoi ricercare il libro?" << endl;
  187.      cout << "1. Per titolo" << endl;
  188.      cout << "2. Per autore" << endl;
  189.      cout << "3. Per editore" << endl;
  190.      cout << "4. Per data di pubblicazione" << endl;
  191.      cout << "5. Torna al menu iniziale" << endl;
  192.      cin >> scelta;
  193.      switch(scelta){
  194.                     case 1:
  195.                         cout << "Quale libro vuoi ricercare? ";
  196.                         cin >> titolo;
  197.                         for(i = 0; i<elementipresenti; i++)
  198.                         if(strcmp(titolo, biblioteca[i].titolo)==0){
  199.                               cout << "Libro " << titolo << " trovato correttamente nel nostro archivio" << endl;
  200.                               cout << "Autore:                " << biblioteca[i].autore << endl;
  201.                               cout << "Editore:               " << biblioteca[i].editore << endl;
  202.                               cout << "Data di pubblicazione: " << biblioteca[i].datapubblicazione << endl;
  203.                               cout << "Numero di pagine:      " << biblioteca[i].pagine << endl;
  204.                               cout << "Copie disponibili:     " << biblioteca[i].copiedisponibili << endl;
  205.                               cout << "Persone in attesa:     " << biblioteca[i].personeinattesa << "\n" << endl;
  206.                               contatore++;              
  207.                         }//chiusura if
  208.                         if(contatore==0)
  209.                               cout << "Mi dispiace, ma il libro " << titolo << " che hai inserito non e' presente nel nostro archivio" << endl;
  210.                         break;
  211.                     case 2:  
  212.                         cout << "Quale autore vuoi ricercare? ";
  213.                         cin >> autore;
  214.                         for(i = 0; i<elementipresenti; i++)
  215.                         if(strcmp(autore, biblioteca[i].autore)==0){
  216.                               cout << "Autore " << autore << " trovato correttamente nel nostro archivio" << endl;
  217.                               cout << "Titolo:                " << biblioteca[i].titolo << endl;
  218.                               cout << "Editore:               " << biblioteca[i].editore << endl;
  219.                               cout << "Data di pubblicazione: " << biblioteca[i].datapubblicazione << endl;
  220.                               cout << "Numero di pagine:      " << biblioteca[i].pagine << endl;
  221.                               cout << "Copie disponibili:     " << biblioteca[i].copiedisponibili << endl;
  222.                               cout << "Persone in attesa:     " << biblioteca[i].personeinattesa << "\n" << endl;
  223.                               contatore++;              
  224.                         }//chiusura if
  225.                         if(contatore==0)
  226.                               cout << "Mi dispiace, ma l'autore " << autore << " che hai inserito non ha scritto nessuno dei nostri libri presenti nel nostro archivio" << endl;
  227.                         break;
  228.                     case 3:
  229.                         cout << "Scrivi il nome di un editore o editrice? ";
  230.                         cin >> editore;
  231.                         for(i = 0; i<elementipresenti; i++)
  232.                         if(strcmp(editore, biblioteca[i].datapubblicazione)==0){
  233.                               cout << "Editore " << editore << " trovato correttamente nel nostro archivio" << endl;
  234.                               cout << "Titolo:                " << biblioteca[i].titolo << endl;
  235.                               cout << "Autore :               " << biblioteca[i].autore << endl;
  236.                               cout << "Data di pubblicazione: " << biblioteca[i].datapubblicazione << endl;
  237.                               cout << "Numero di pagine:      " << biblioteca[i].pagine << endl;
  238.                               cout << "Copie disponibili:     " << biblioteca[i].copiedisponibili << endl;
  239.                               cout << "Persone in attesa:     " << biblioteca[i].personeinattesa << "\n" << endl;
  240.                               contatore++;              
  241.                         }
  242.                         if(contatore==0)
  243.                               cout << "Mi dispiace, ma nel nostro archivio non c'e' nessun libro che e' stato editato da " << editore << endl;
  244.                         break;
  245.                     case 4:
  246.                         cout << "Questo o questi libri che cerchi quando sono stati pubblicati? ";
  247.                         cin >> datapubblicazione;
  248.                         for(i = 0; i<elementipresenti; i++)
  249.                         if(strcmp(datapubblicazione, biblioteca[i].datapubblicazione)==0){
  250.                               cout << "Data di pubblicazione " << datapubblicazione << " trovata correttamente nel nostro archivio" << endl;
  251.                               cout << "Titolo:                " << biblioteca[i].titolo << endl;
  252.                               cout << "Autore:                " << biblioteca[i].autore << endl;
  253.                               cout << "Editore:               " << biblioteca[i].editore << endl;
  254.                               cout << "Numero di pagine:      " << biblioteca[i].pagine << endl;
  255.                               cout << "Copie disponibili:     " << biblioteca[i].copiedisponibili << endl;
  256.                               cout << "Persone in attesa:     " << biblioteca[i].personeinattesa << "\n" << endl:
  257.                               contatore++;              
  258.                         }
  259.                         if(contatore==0)
  260.                               cout << "Mi dispiace, ma nel nostro archivio non c'e' nessun libro pubblicato in data " << datapubblicazione << endl;
  261.                         break;
  262.                     case 5:
  263.                         break;
  264.                     default:
  265.                         cout << "Errore. Inserisci 1, 2, 3 o 4 per piacere!" << endl;
  266.      }//chiusura switch
  267. }//chiusura funzione
  268.  
  269. void restituzione(int elementiipresenti, vector <Libro> elementipresenti[]){
  270.      string titolo;
  271.      string buffer;
  272.      string nomefile;
  273.      string nome;
  274.      string cognome;
  275.      int index = 0;
  276.      int i;
  277.      int j;
  278.      int contatore = 0;
  279.      int righedelfile = 0;
  280.      int personeinattesa;
  281.      
  282.      cout << "Quale libro devi restituire? ";
  283.      cin >> titolo;
  284.      for(i = 0; i<elementipresenti;i++)
  285.           if(strcmp(titolo, biblioteca[i].titolo)==0){
  286.                 cout << "Libro " << titolo << " trovato nel nostro archivio. Grazie per avercelo riportato" << endl;
  287.                 biblioteca[i].copiedisponibili++;
  288.                 contatore++;              
  289.           }//chiusura if
  290.      if(contatore==0)
  291.           cout << "Mi dispiace, ma il libro " << titolo << " che hai inserito non e' presente nel nostro archivio. Forse l'hai preso in un'altra libreria";
  292.      
  293.      if(biblioteca[i].copiedisponibili==1){                            
  294.           nomefile = biblioteca[i].titolo + ".txt";
  295.          
  296.           fstream fr(nomefile, ios::in);
  297.          
  298.           if(!fr.good()) {
  299.                cout << "Errore in apertura del file" << endl;
  300.                return 0;
  301.           }
  302.        
  303.           while (fgets (buffer, sizeof (buffer), fr) != NULL)
  304.                      righedelfile++;
  305.                      
  306.           personeinattesa = righedelfile/2;
  307.                
  308.           vector <Cliente> listaattesa;
  309.                
  310.           fseek(fr, 0, SEEK_SET);
  311.           while(!feof(fr)){
  312.                if(fgets(nome, MAX_LEN, fr) == NULL)
  313.                     break;
  314.                nome[strlen(nome) -1] = '\0';
  315.                if(fgets(cognome, MAX_LEN, fr) == NULL)
  316.                     break;
  317.                cognome[strlen(cognome) -1] = '\0';
  318.                Cliente cli(nome,cognome);
  319.                listaattesa.push_back(cli);
  320.           }
  321.           fr.close();
  322.          
  323.           fstream fw(nomefile, ios::out);
  324.          
  325.           if(!fw.good()) {
  326.                cout << "Errore in apertura del file" << endl;
  327.                return 0;
  328.           }
  329.            
  330.           if(biblioteca[i].copiedisponibili==1)
  331.                for(j = 1; j<personeinattesa;j++){
  332.                     fw << listaattesa[j].nome << endl;
  333.                     fw << listaattesa[j].cognome << endl;
  334.                }
  335.                
  336.           biblioteca[i].copiedisponibili = 0;
  337.           biblioteca[i].personeinattesa--;
  338.          
  339.           fw.close();
  340.      }
  341.      
  342.      fstream fw(BIBLIOTECA,ios::out);
  343.      
  344.      if(!fw.good()) {
  345.           cout << "Errore in apertura del file" << endl;
  346.           return 0;
  347.      }
  348.      
  349.      for(i = 0;i<elementipresenti;i++){
  350.           fw << biblioteca[i].titolo << endl;
  351.           fw << biblioteca[i].autore << endl;
  352.           fw << biblioteca[i].editore << endl;
  353.           fw << biblioteca[i].datapubblicazione << endl;
  354.           fw << biblioteca[i].pagine << endl;
  355.           fw << biblioteca[i].copiedisponibili << endl;
  356.           fw << biblioteca[i].personeinattesa << endl;
  357.      }
  358.      
  359.      fw.close();
  360. }
  361.  
  362. void prestito(int elementipresenti, vector <Libro> lista[]){
  363.      string titolo;
  364.      int scelta;
  365.      int i;
  366.      int contatore = 0;
  367.      
  368.      cout << "Quale libro vuoi prendere in prestito? ";
  369.      cin >> titolo;
  370.      for(i = 0; i<elementipresenti;i++)
  371.           if(strcmp(titolo, biblioteca[i].titolo)==0){
  372.                 contatore++;
  373.                 cout << "Libro " << titolo << " trovato nel nostro archivio" << endl;
  374.                 if(biblioteca[i].copiedisponibili>0){
  375.                      cout << "Sono disponibili " << biblioteca[i].copiedisponibili << " copie in archivio quindi puoi prendere in prestito il libro" << endl;
  376.                      biblioteca[i].copiedisponibili--;
  377.                 }//chiusura if
  378.                 else{
  379.                      do{
  380.                           cout << "Il libro e' nel nostro archivio ma tutte le copie disponibili sono in giro, mi spiace. Vuole prenotarlo?" << endl;
  381.                           cout << "1. Si'" << endl;
  382.                           cout << "2. No" << endl;
  383.                           cin >> scelta;
  384.                           switch(scelta){
  385.                                          case 1:
  386.                                               biblioteca[i].personeinattesa++;
  387.                                               prenota_libro(titolo);
  388.                                          case 2:
  389.                                               cout << "Ok, come desidera!" << endl;
  390.                                               break;
  391.                                          default:
  392.                                               cout << "Errore, devi inserire 1 o 2" << endl;                                    
  393.                           }//chiusura switch
  394.                      } while((scelta<1)&&(scelta>2));
  395.                 }//chiusura else
  396.           }//chiusura if principale
  397.      if(contatore==0)
  398.           cout << "Mi dispiace, ma il libro " << titolo << " che vuoi prendere in prestito non e' presente nel nostro archivio" << endl;
  399.      
  400.      fstream f(BIBLIOTECA,ios::app);
  401.      
  402.      if(!f.good()) {
  403.           cout << "Errore in apertura del file" << endl;
  404.           return 0;
  405.      }
  406.      
  407.      for(i = 0;i<elementipresenti;i++){
  408.           f << biblioteca[i].titolo << endl;
  409.           f << biblioteca[i].autore << endl;
  410.           f << biblioteca[i].editore << endl;
  411.           f << biblioteca[i].datapubblicazione << endl;
  412.           f << biblioteca[i].pagine << endl;
  413.           f << biblioteca[i].copiedisponibili << endl;
  414.           f << biblioteca[i].personeinattesa << endl;
  415.      }
  416.      
  417.      f.close();
  418. }
  419.  
  420.  
  421. void inserimento(){
  422.      string titolo;
  423.      string autore;
  424.      string editore;
  425.      string datapubblicazione;
  426.      int pagine;
  427.      int copiedisponibili;
  428.      
  429.      cout << "Quale e' il titolo del libro? ";
  430.      cin >> titolo;
  431.      cout << "Chi l'ha scritto questo libro? ";
  432.      cin >> autore;
  433.      cout << "E l'editore chi e'? ";
  434.      cin >> editore;
  435.      cout << "In che data e' stato pubblicato? ";
  436.      cin >> datapubblicazione;
  437.      cout << "Quante pagine ha? ";
  438.      cin >> pagine;
  439.      cout << "Quante copie disponibili ci sono? ";
  440.      cin >> copiedisponibili;
  441.      
  442.      fstream f(BIBLIOTECA, ios::app);
  443.      
  444.      if(!f.good()) {
  445.           cout << "Errore in apertura del file" << endl;
  446.           return 0;
  447.      }
  448.      
  449.      f << titolo << endl;
  450.      f << autore << endl;
  451.      f << editore << endl;
  452.      f << datapubblicazione << endl;
  453.      f << pagine << endl;
  454.      f << copiedisponibili << endl;
  455.      f << 0 << endl;
  456.      
  457.      cout << "\nLibro aggiunto correttamente all'archivio!" << endl;
  458.    
  459.      f.close();
  460. }
  461.  
  462. void eliminazione(int elementipresenti, vector <Libro> lista[]){
  463.      string titolo;
  464.      int i;
  465.      int k;
  466.      int contatore = 0;
  467.      
  468.      fstream f(BIBLIOTECA, ios::out);
  469.    
  470.      if(!f.good()) {
  471.           cout << "Errore in apertura del file" << endl;
  472.           return 0;
  473.      }
  474.      
  475.      cout << "Quale libro vuoi eliminare? ";
  476.      cin >> titolo;
  477.      for(i = 0; i<elementipresenti; i++)
  478.           if(strcmp(titolo, biblioteca[i].titolo)==0){
  479.                 cout << "Libro " << titolo << " trovato nel nostro archivio" << endl;
  480.                 contatore++;
  481.                 break;
  482.           }//chiusura if principale
  483.          
  484.      if(contatore==0)
  485.           cout << "Mi dispiace, ma il libro " << titolo << " che vuoi eliminare non e' presente nel nostro archivio" << endl;
  486.      else{
  487.           if(biblioteca[i].personeinattesa==0){
  488.                for(k = 0; k<elementipresenti; k++)
  489.                     if(k!=i){
  490.                          f << biblioteca[k].titolo << endl;
  491.                          f << biblioteca[k].autore << endl;
  492.                          f << biblioteca[k].editore << endl;
  493.                          f << biblioteca[k].datapubblicazione << endl;
  494.                          f << biblioteca[k].pagine << endl;
  495.                          f << biblioteca[k].copiedisponibili << endl;
  496.                          f << biblioteca[k].personeinattesa << endl;
  497.                     }
  498.                cout << "Libro eliminato correttamente dall'archivio!" << endl;
  499.           }
  500.           else
  501.                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;
  502.      }//chiusura else
  503.      
  504.      f.close();
  505. }
  506.  
  507. void stampa_biblioteca(int elementipresenti){
  508.     int i;
  509.    
  510.     cout << "--------------------" << endl;
  511.     for(i = 0; (i < MAX_ELEMENTS) && ( i < elementipresenti); i++){
  512.           cout << "Titolo:             " << biblioteca[i].titolo << endl;
  513.           cout << "Autore:             " << biblioteca[i].autore << endl;
  514.           cout << "Editore             " << biblioteca[i].editore << endl;
  515.           cout << "Data pubblicazione: " << biblioteca[i].datapubblicazione << endl;
  516.           cout << "Numero di pagine:   " << biblioteca[i].pagine << endl;
  517.           cout << "Copie disponibili:  " << biblioteca[i].copiedisponibili << endl;
  518.           cout << "Persone in attesa:  " << biblioteca[i].personeinattesa << endl;
  519.           cout << endl;
  520.     }
  521.     cout << "--------------------" << endl;
  522. }
  523.  
  524. void prenota_libro(string titolo){
  525.      string nomefile;
  526.      string nome;
  527.      string cognome;
  528.      
  529.      cout << "Inserisci il nome dell'utente: ";
  530.      cin >> nome;
  531.      cout << "Inserisci il cognome dell'utente: ";
  532.      cin >> cognome;
  533.  
  534.      Cliente cli(nome,cognome);
  535.      
  536.      nomefile = titolo + ".txt";
  537.      
  538.      fstream f(nomefile,ios::app);
  539.      
  540.      if(!f.good()) {
  541.           cout << "Errore in apertura del file" << endl;
  542.           return 0;
  543.      }
  544.      
  545.      f << cli.nome << "\n" << cli.cognome << endl;
  546.      
  547.      cout << "Libro prenotato correttamente" << endl;
  548.      
  549.      f.close();
  550. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement