Advertisement
Guest User

Untitled

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