Newsgroup: it.comp.lang.c++
Titolo: Disperate, cerchiamo programma gestione biblioteca c++

Ciao a tutti,
stiamo cercando il codice per la gestione di una biblioteca in c++.
Il nostro prof lo vuole per la fine del mese di aprile. Non ce la faremo mai
da sole.
Qualcuno ci aiuti. Saremo super riconoscenti!!!!
Ciao Giorgia e Alessandra

 Ciao Giorgia e Alessandra
??????
avete piu' di 10 giorni, non e' difficile, dovreste farcela.
Tommy

 ha scritto nel messaggio
news:b7mggu$ido$1...@hercules.btinternet.com...


 si fanno????
care ragazze,
questo e' un NG su c++ e non un aiuto x fare i compiti. Se siete indietro,
rimboccatevi le maniche e
lavorate a pasqua!
Auguri
PS1: mai sentito parlare di accesso casuale al file ?

 Dacci qualche dritta. Please!
Il tuo codice e' C++ ma procedurale.
Usi structs (che sono classi, ma le usi come C-Structs) invece di classi.
Usi char[] invece di std::string.
Per finire hai TUTTO il programma in main(). Di solito si spezza in varie
funzioni (procedurale) oppure in varie classi  e metodi (object-oriented).
Quello che fa il tuo codice (penso) e' chiedere i dati di un nuovo socio che
si vuole inserire e poi scrivere i dati nel file...
Io come ti ho detto invece terrei tutto in memoria:
Avrei una lista di soci che puoi implementare con un std::vector, std::list
etc...
Quando inserisci un nuovo socio aggiungerei un socio alla lista.
Quando cancelli un socio lo cancellerei dalla lista.
Etc...
In fine quando vuoi scrivere tutto su un file, con un bel ciclo li scrivi
TUTTI.
Quando successivamente li vuoi leggere tutti, con un bel ciclo li leggi
tutti e ripopoli la lista con tutti i suoi soci.
Come ti ho detto non e' un metodo professionale, ma d'altro canto non potete
usare un database e gestire un file binario come fosse un database e' fatica
sprecata.
Ecco un esempio molto criticabile, ma d'altra parte ho cercato di mantenerlo
semplice:
<CODE>
#include<iostream>
#include<string>
#include<list>
using namespace std;
class CSocio{
public:
    CSocio(string nome, string cognome, string indirizzo):
      m_nome(nome),m_cognome(cognome),m_indirizzo(indirizzo)
    {
        // Constructor:
    }
    string GetFullName(){return m_nome+" "+m_cognome;}
private:
    string m_nome;
    string m_cognome;
    string m_indirizzo;
};
list<CSocio> Soci;
int main()
{
    Soci.push_back(CSocio("Mario","Rossi","via Gialli 9"));
    Soci.push_back(CSocio("Gianni","Verdi","via Blu 13"));
    Soci.push_back(CSocio("Anna","Neri","via Porpora 7"));
    list<CSocio>::iterator p=Soci.begin();
    while(p!=Soci.end()){
        cout << p->GetFullName() << endl;
        ++p;
    }
    return 0;
}
</CODE>
Ho una classe CSocio con solo nome, cognome ed indirizzo, ma si fa presto ad
aggiungere cose....
Il Costruttore prende questi 3 campi e forma ed inizializza l'istanza
dell'oggetto.
Il metodo CSocio::GetFullName() ritorna nome+cognome con i due separati da
spazio.
Poi ho una:
list<CSocio> Soci;
Questa e' una lista di CSocio, ovvero tanti Soci. Per questo la chiamo Soci
(ma esistono nomi mooolto migliori!).
Ora questa lista e' globale. In generale cerca di non avere mai cose
globali. L'ho fatto solo perche', se pur sbagliato, e' un modo per rendere
piu' semplice il tutto quando vai avanti a svilupparlo.
Nota inoltre che sarebbe meglio forse avere un lista di puntatori a oggetti
della classe socio.... Ma non volevo renderti le cose complesse!
Con :
Soci.push_back(CSocio("Mario","Rossi","via Gialli 9"));
Aggiungo un socio alla lista. Ovviamente se decidi di avere una lista di
puntatori non puoi usare l'indirizzo ritornato dal costruttore in quanto
tale oggetto e' destinato a morire.... dovresti usare new (e poi delete).
Dopo aver aggiunto 3 soci ho:
list<CSocio>::iterator p=Soci.begin();
while(p!=Soci.end()){
   cout << p->GetFullName() << endl;
   ++p;
}
Bene, scorro la lista e stamp il full-name di tutti i soci.
Come ti puoi immaginare l'output e':
<OUTPUT>
Mario Rossi
Gianni Verdi
Anna Neri
</OUTPUT>
Un ciclo simile potresti usarlo per stampare (serializzare) tutti i soci su
di un file, ad esempio quando premi salva.
Quando rifai partire il programma potresti leggere tutto il file da disco e
per ogni socio che leggi fare una :
Soci.push_back()
e aggiungere il socio alla lista.
Una volta modificata la lista (aggiungere soci, togliere soci, modificare
soci), premi salva e risalva tutto il file da capo etc....
Questo e' cio' che ti consiglio di fare.
A mio avviso vi stavate muovendo nella direzione sbagliata.
Per finrie ricordo che il metodo che ti consiglio, tenere tutto a memoria e
poi salvare tutto fa schifo, non e' professionale, ma a mio avviso e' il
piu' semplice e sempre a mio avviso al professore basta ed avanza (non
basterebbe ad un reale cliente).
A presto,
Tommy

 PS1: mai sentito parlare di accesso casuale al file ?
Hai programmato in QBasic? VB?
E' da quei tempi che non sento parlare di "accesso casuale".
Ad ogni modo capisco perfettamente cosa stai suggerendo alle due ragazze che
hanno la tua stessa firma....
Tuttavia credo che quella che consigli che sia la strada piu' lunga e piu'
difficile.
Ovviamente la soluzione che propongo io, come ho spiegato, non e' per nulla
reale o professionale, ma almeno e' semplice.
Quella che proponi tu e' piu' complicata e comunque sempre non molto
professionale (visto che in realta' si usa un database) quindi non vedo
perche' scegliere tale strada.
La cosa migliore forse sarebbe contattare il prof. e sentire se richiede
espressamente una delle due strade. Se entrambe vanno bene allora quella
consigliata da me, a mio avviso, richiede la meta' del tempo ed e' pure piu'
semplice.
Tommy

 FaiSistemaPerBibliotecaPerMeMentreIoMangioLeUovaDiPasqua();
Una cosa curiosa che non ricordo: questa funzione, non avrebbe il nome
troncato xche' troppo lungo ?
Ciao
Gio (nome cambiato in Mr.gio x motivi di (c) :)

 Gio (nome cambiato in Mr.gio x motivi di (c) :)
Ho notato!
Tommy