Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - programma per gestione biblioteca
Forum - C/C++ - programma per gestione biblioteca

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ilciolla (Normal User)
Newbie


Messaggi: 10
Iscritto: 24/02/2007

Segnala al moderatore
Postato alle 12:19
Sabato, 24/02/2007
edit by netarrow: cambiato il titolo, quello di prima era contro il regolamento

Ciao ragazzi sono nuovo e ho subito un bel problemino da porvi che magari per voi risultera banale....allora questo e un pogetto che devo realizzare:

Realizzare un programma C++ che offra funzioni di base per la gestione di una semplice biblioteca. In particolare si considerino i seguenti tre sottoproblemi:

1.      Gestione schedario libri — Funzione di base:
(a)    immissione nuovo libro. Per ogni libro vengono registrate le seguenti informazioni:
−       cognome e nome del/degli autore/i
−       titolo del libro
−       casa editrice
−       anno di pubblicazione
−       codice collocazione (codice unico alfanumerico)
−       argomenti (max. 3, di tipo stringa)
(b)   ricerca di un libro in base a:
−       codice collocazione
−       cognome autore
−       argomento
Se la ricerca ha esito positivo, viene visualizzata la scheda del libro trovato. Le ricerche relative agli ultimi due punti possono avvenire anche in base ad una sottostringa del cognome o dell'argomento da ricercare.
(a)    cancellazione o modifica libro (individuato in base a codice collocazione). È possibile modificare soltanto le informazioni relative agli argomenti. La cancellazione di un libro non è possibile se il libro si trova in prestito.
2.      Gestione schedario utenti — Funzione di base:
(a)    immissione nuovo utente. Per ogni utente vengono registrate le seguenti informazioni:
−       cognome e nome dell'utente
−       categoria di utente (ad esempio, normale, speciale, …)
−       recapito
−       codice utente (codice unico numerico)
−       indirizzo e-mail
(b)   ricerca di un utente in base a:
−       codice utente
−       cognome
Se la ricerca ha esito positivo, viene visualizzata la scheda dell'utente trovato. Le ricerche relative all'ultimo punto possono avvenire anche in base ad una sottostringa del cognome da ricercare.
(c)    cancellazione utente (individuato in base a codice utente). La cancellazione di un utente è possibile soltanto se l'utente non ha più libri in prestito.
3.      Gestione prestiti — Funzione di base:
(a)    prestito. Per ogni prestito effettuato vengono registrate le seguenti informazioni:
−       utente (codice utente)
−       libro (codice collocazione)
−       data prestito
Nel caso in cui si digiti il carattere '?' al posto del codice collocazione o del codice utente viene attivato, rispettivamente, il menù di ricerca libro (punto 1.b) o di ricerca utente (punto 2.b).
(b)   restituzione (= cancellazione prestito): libro e utente individuati in base a codice collocazione e codice utente.
(c)    ricerche:
−       libro in prestito? (dato codice libro, se il libro è in prestito determina codice utente e data del prestito; altrimenti comunica "libro disponibile")
−       prestiti attivi per un utente? (dato codice utente, determina codice libro e data prestito di tutti i libri in prestito all'utente)
−       prestiti scaduti (determina codice libro e codice utente relativi a prestiti che hanno superato il limite max. (di norma, 1 mese; eventualmente variabile in base al tipo di utente)).


Tutti i dati relativi a libri, utenti e prestiti vengono memorizzati su file. Il programma provvede a caricare i dati da file in memoria principale e viceversa su esplicita richiesta dell'operatore. L'interazione con l'operatore avviene tramite menù a più livelli. Il sistema provvede anche ad effettuare controlli di base sulla correttezza dei dati immessi (ad esempio, validità codici, validità delle date, ecc.). Nelle funzioni di ricerca qualora vengano individuati più oggetti soddisfacenti i criteri di ricerca, vengono mostrate, una alla volta, le schede di tutti gli oggetti individuati.

Vincoli di implementazione (obbligatori). Realizzare i tipi di dato libro e utente come classi. In particolare, definire utente come classe derivata dalla classe persona. Realizzare anche la nozione di data_del_giorno come classe. Realizzare la gestione di situazioni anomale tramite i meccanismi di gestione eccezioni del C++.


:d:d:d:d:d:d

allora io ho creato la classe utente che deriva dalla classe persona e i suoi relativi metodi, la classe libro e i suoi relativi metodi, ho creato due array di oggetti delle classi (es: elenco_utenti [1000]) dove inserisco gli utenti e un altro per i libri.
ora le mie domande sono:
1)come posso salvare l intero array all interno di un file , e poi come faccio per poterlo caricare ad ogni apertura del programma?
2)come facccio a gestire i prestiti ( ho pensato di fare una classe a parte con tre campi : cod_utente cod_liro e data)
ma proprio non so come fare per la data per inserirla e sapere cosi se i presiti sono scaduti..

vi prego rispondete e di vitale importanza vi ringrazio tutti

Ultima modifica effettuata da netarrow il 25/02/2007 alle 14:01
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 13:52
Domenica, 25/02/2007
Per il primo problema leggi qui(salvare/caricare array):

http://www.pierotofy.it/pages/extras/forum/2/11566-esporta ...

Dove ho messo questo esempietto:

Codice sorgente - presumibilmente C++

  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7. int v[3];
  8. ofstream off("back.txt");
  9. v[0] = 3;
  10. v[1] = 5;
  11. v[2] = 7;
  12. off.write(reinterpret_cast<const char *>(&v), sizeof (v));
  13. off.close();
  14.  
  15.  
  16. int importati[3];
  17. ifstream iff("back.txt");
  18. iff.read(reinterpret_cast<char *>(&importati), sizeof (importati));
  19. iff.close();
  20.  
  21. cout << importati[0] << " " << importati[1] << " " << importati[2] << endl;
  22. }



Per il resto basta che disegni la realtà, fatti qualche diagramma UML magari prima di scrivere il codice.

Ah, visto che sei nuovo leggi il regolamento :k:

Ultima modifica effettuata da netarrow il 25/02/2007 alle 14:02



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote
Avatar
ilciolla (Normal User)
Newbie


Messaggi: 10
Iscritto: 24/02/2007

Segnala al moderatore
Postato alle 12:48
Martedì, 27/02/2007
ok il piu lo ho fatto diciamo quasi tutto solo che venerdi questo devo cnsegnare e non riesco agestire i prestiti ma non l funzioni quelle si, quello che mi manca e la classe data con la quale devo riuscire paticamente ad inserire la data di oggi e sapere da quanto tempo i libri sono in prestito.....tu hai qualche consiglio ti prego sono agli sgoccioli grazie in anticipo....

void prestiti::prestito()
{      
        int i;
        char ute;
        char lib;
        cout<<"Inserire il codice utente della persona a  cui viene prestato il libro...."<<endl;
        cin>>ute;
        if(ute=='?')
        utente.ricercau();
        

       else

        elenco_prestiti.code_utente=ute;
        
        cout<<"inserisci ora il codice del libro che l utente vuole in prestito....."<<endl;
        cin>>lib;
        
        if(lib=='?')
        
        libro.ricercal();          
        
        else
        
        elenco_prestiti.code_libro=lib;
        cout<<"ora andremo ad inserire la data del prestito....";// CONTROLLARE
    
    
}  
    
    
    
void prestiti::restituzione()    
{  
    int codu;
    char codl;
    int i=0,j=0,k=0;
    
    
                   cout<<"inserire perfavoreilcodice del libro...";
                   cin>>codl;
                   cout<<"ok inserisci allora il codice utente..."<<endl;        
                   cin>>codu;
                  
                   while((elenco_prestiti.code_utente==codu) && (elenco_prestiti.code_libro==codl))
                     {
                         i++;         }
                    
                   elenco_prestiti.code_utente=0;
                   elenco_prestiti.code_libro=0;
                   elenco_prestiti.giorno="";                        // CONTROLLARE
                   while(elenco_utenti[j].codice==codu)
                     {   j++;   }
                  
                    if (elenco_utenti[j].prestiti > 0)
                      
                       elenco_utenti[j].prestiti=elenco_utenti[j].prestiti-1;
                  
                   while(elenco_libri[k].codice==codl)
    
                      {  k++;   }
                    
                    elenco_libri[k].prestito=false;
    
    }    

void prestiti::ricerche()
{
       int scelta,i,j,k;
       char codl;
      
       cout<<"Che operazione vuoi effetuare?"<<endl;
       cout<<" 1. sapere se un libro e disponibile...."<<endl;
       cout<<" 2. dato codice tente sapere tutti i libri che egli ha in prestito..."<<endl;
       cout<<" 3. sapere i prestiti scaduti...."<<endl;
       cin>>scelta;
       switch(scelta){  
                        
                         case 1:{    
                                      cout<<"Dimmi il codice del libro....."<<endl;
                                      cin>>codl;
                                      while(elenco_libri.codice==codl)
                                      {   i++; }
                                      
                                      if (elenco_libri.prestito==false)
                                          cout<<"Il libro e disponibile perche nessun utente lo ha in prestito";
                                          
                                          else
                                                    while (elenco_prestiti[j].code_libro==codl)
                                                    {    j++;    }
                              
                                                cout<<"il libro e in prestito all'utente numero"<<elenco_prestiti[j].code_utente<<"dal giorno"<<giorno;      //CONTROLLARE DATA  
                                               cout<<"la scheda relativa all'utente che ha in prestitoil libro e la seguente...:"<<endl;
                                              
                                               while(elenco_utenti[k].codice==elenco_prestiti[j].code_utente)
                                               {   k++;  }
                                              
                                               cout<<elenco_utenti.cognome<<endl;
                                               cout<<elenco_utenti.recapito<<endl;
                                               cout<<elenco_utenti.mail<<endl;
                                               cout<<elenco_utenti.codice<<endl;
                                               cout<<elenco_utenti.prestiti<<endl;
                                              
                             }  


qui e la funzione prestiti dove sono arrivato sino ad ora mi blocco sulla variabile GIORNO nella quale dovrebe esserci la data del prestito che pensavo di mettere string che dici?

PM Quote
Avatar
corey891 (Normal User)
Rookie


Messaggi: 27
Iscritto: 27/08/2006

Segnala al moderatore
Postato alle 15:17
Venerdì, 09/03/2007
veramente io lo farei con gli archivi. crei un record dove metti i dati che ti interessando, li inserisci in input e fai un menù (nel main) dove puoi scegliere le funzioni da usare (con un case break)

PM Quote
Avatar
gianlu666 (Normal User)
Newbie


Messaggi: 5
Iscritto: 06/01/2010

Segnala al moderatore
Postato alle 13:40
Mercoledì, 06/01/2010
Ciao!
Sono nuovo iscritto del forum.
Mi è stato assegnato lo stesso progetto e non ho conoscienze specifiche in merito a classi oggetti e gestione degli stessi.
Puoi mandarmi un PM, se possibile vorrei avere i file del programma da te creato in allegato?
Mi sarebbero davvero di grandissimo aiuto!
Ti ringrazio anticipatamente!
Devo consegnare il tutto entro una settimana.
Ciao!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:10
Mercoledì, 06/01/2010
Però, un forum di programmazione non è un posto dove trovi i compiti fatti e tanti saluti.

Posta il tuo specifico problema, con il codice che hai scritto e ti viene dato un aiuto ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 14:47
Mercoledì, 06/01/2010
Testo quotato

Postato originariamente da gianlu666:
Mi è stato assegnato lo stesso progetto e non ho conoscienze specifiche in merito a classi oggetti e gestione degli stessi.



il progetto magari ti è stato assegnato proprio per darti le conoscienze specifiche in merito a classi, oggetti e gestione degli stessi :D



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote
Avatar
gianlu666 (Normal User)
Newbie


Messaggi: 5
Iscritto: 06/01/2010

Segnala al moderatore
Postato alle 17:56
Mercoledì, 06/01/2010
Testo quotato

Postato originariamente da netarrow:

Testo quotato

Postato originariamente da gianlu666:
Mi è stato assegnato lo stesso progetto e non ho conoscienze specifiche in merito a classi oggetti e gestione degli stessi.



il progetto magari ti è stato assegnato proprio per darti le conoscienze specifiche in merito a classi, oggetti e gestione degli stessi :D



So in linea di massima come procedere.
Devo inizializzare la classe libro con all'interno tutte le info necessarie (autore titolo data), per avere la possibilità di aggiungere i libri come oggetti.
Devo inizzializzare una classe utenti, per inizializzare tutti coloro i quali hanno accesso ai prestiti, con le relative informazioni (nome cognome telefono mail).
Per collegare i libri all'utente che li ha in prestito pensavo di munire ogni libro di un codice. Resta il fatto che se un utente ha più libri in prestito dovrei cambiare il formato della classe utente per aggiungere più numeri corrispondenti ai libri (se un utente nno ha libri in prestito pensavo di utilizzare lo 0 che non verrà assegnato a nessun libro). Se un libro è in prestito deve poter essere collegato ad un solo utente. Mi viene richiesto di memorizzare la lista libri ed utenti in un file, tale da poter esssere riaperto successivamente(per aggiungere nuovi prestiti, eliminare libri dalla lista). Ora, so in teoria come si fa a salvare su file in output, ma come faccio a fare riconoscere al programma che quello che è stato salvato all'apertura precedente dell'eseguibile su file formato txt è una lista di oggetti? Per eliminare gli oggetti devo imparare la teoria su costruttori e distruttori?


Non voglio il compito fatto e butterò in nottata giù qualcosa, ma sono consapevole di non essere all'altezza di quanto richiesto!

Grazie!

PM Quote
Avatar
gianlu666 (Normal User)
Newbie


Messaggi: 5
Iscritto: 06/01/2010

Segnala al moderatore
Postato alle 23:01
Mercoledì, 06/01/2010
Topic:
Write a program, which will be store a list of your personal books. Every book has a title, an author name and the year of issue. Of course, you may add new books and delete old ones. The program should remember, which books are lended and who borrows every book from you. (Every friend you lend books to, has the name, surname, email and phone number).

Topic:
Scrivere un programma, che memorizzerà un elenco dei tuoi libri. Ogni libro ha un titolo, autore e anno di emissione. Deve essere possibile aggiungere nuovi libri e cancellare quelli vecchi. Il programma deve ricordare quali libri sono in prestito e a chi. (Ogni amico al quale si prestano libri, ha nome, cognome, email e numero di telefono).

Essendo che il progetto va presentato in lingua inglese è la lingua che viene utilizzata anche nel codice.
Ho definito le classi book e friend, e l'apertura e chiusura dei file nei quali le informazioni vanno memorizzate alla chiusura del programma. Spero che i metodi implementati Setparameterfriend e Setparameterbook consentano, qualora richiamati nel main di inizializzare un nuovo oggetto all'interno della classe rispettiva.

Nell'ordine credo di affrontare il problema come segue:
studio dei costruttori e distruttori (nel caso in cui non fossero richiesti li serviranno per l'esame a fine corso)
aggiunta nella classe book e friend di un int tra i parametri caratteristici.
int=0 => il libro è disponibile
int=j => lo stesso parametro è assegnato a friend e book, dunque book(string _title,string _author,string _yearofissue,int _j) è in prestito a friend(string _namesurname,string _email,string _phone,int _j)

Si accettano consigli sul prossimo passo.
Non ho idea di come fare ad eliminare un libro dalla lista se i distruttori non funzionano in tal senso.
Nel caso si volesse visualizzare la lista dei libri con relativo friend connesso o disponibilità, mi serve il numero di libri ed un ciclo di for che mi consenta di visualizzarli tutti, ma ai libri voglio assegnare un indice diverso da 0 solo se sono in prestito e mi serve un if/else per distinguere il caso O dagli altri oppure posso inizializzare cosi friend(string _disponibile,string _,string _,int _0).

Codice sorgente - presumibilmente C#

  1. // project.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string>
  7. #include <fstream>
  8. #include <iomanip>
  9. using namespace std;
  10. class Book
  11. {
  12. private:
  13. string title;
  14. string author;
  15. string yearofissue;
  16. public:
  17. Book(string _title,string _author,string _yearofissue);
  18. void Setparameterbook(string _author,string _title,string _yearofissue);
  19. };
  20. Book::Book(string _title,string _author,string _yearofissue){
  21. author=_author ;
  22. title=_title ;
  23. yearofissue=_yearofissue ;
  24. }
  25. void Book::Setparameterbook(string _author,string _title,string _yearofissue){
  26. author=_author ;
  27. title=_title ;
  28. yearofissue=_yearofissue ;
  29. }
  30. class Friend
  31. {
  32. private:
  33. string namesurname;
  34. string email;
  35. string phone;
  36. public:
  37. Friend(string _namesurname,string _email,string _phone);
  38. void Setparameterfriend(string _namesurname,string _email,string _phone);
  39. };
  40. Friend::Friend(string _namesurname,string _email,string _phone){
  41. namesurname=_namesurname ;
  42. email=_email ;
  43. phone=_phone ;
  44. }
  45. void Friend::Setparameterfriend(string _namesurname,string _email,string _phone){
  46. namesurname=_namesurname ;
  47. email=_email ;
  48. phone=_phone ;
  49. }
  50. int _tmain(int argc, _TCHAR* argv[])
  51. {
  52.   ifstream ins;         // input stream
  53.   ofstream outs;        // output stream
  54. // open files, exit program if fail
  55.   ins.open("indata.dat");
  56.   if (ins.fail())
  57.     {
  58.       cout << "Can't open indata.dat" <<endl;
  59.       return 1; //exit with code 1 for failure
  60.     }
  61.   outs.open("results.dat");
  62.   if (outs.fail())
  63.     {
  64.       cout << "Can't open results.dat" << endl;
  65.       return 1; //exit with code 1 for failure
  66.     }
  67.  
  68.  
  69. ins.close();     // Close all files
  70.   outs.close();
  71. outs <<2;
  72. system ("pause");
  73. return 0;
  74. }



Non mi dite che non mi sto impegnando!

Ultima modifica effettuata da netarrow il 06/01/2010 alle 23:56
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo