|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 2189
|
[c++]mi aiutate a fare un programma per mio padre?
ciao,da 1 anno (scolastico)studio c++,ma la prof nn ci ha spiegato uan cosa secondo me importantissima....
sono pratico nel uso dei vettori e delle stringhe,conosco vari tipi di ricerca ,gli if ecc ...lecose basilari... pero' ho sempre lavorato sulla ram! nn sono in grado di memorizzare idati sul hd es: faccio una rubrica,inserisco i nomi,come chiudo il prog perdo i dati,io voglio che restino memorizzati sul hd.... mio padre gestisce dei condomini,lo vorrei aiutare nel tenere i conti e le varie spese ,se mi potete cortesemente spiegare il procedimento per memorizzare i file inizio a fare una bella bozza....poi a sorgente completa ve la passo e la condividiamo che ve ne pare? ciao michele
__________________
Asrock X79 extreme 11 || Intel I7 4960X || 32GB Vengeance 2400Mhz || R9 280x || Thermaltake 1200 || Obsidian 900D || 840 Evo Cerco collaboratori per blog informatica |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se la quantità di dati che devi conservare non è eccessiva, diciamo tra i 500 megabyte e un gigabyte, puoi usare un logger.
Dico 500-1000 megabyte pensando ad un sistema desktop non recentissimo ma il limite teorico è semplicemente la quantità di memoria disponibile al programma. Un logger tiene i dati nella memoria del programma e realizza la persistenza registrando gli eventi che causano una mutazione dei dati conservati. Che detto così magari sembra chissà che, ma è facilissimo da fare, manutenere ed estendere. Non è l'unica alternativa (anzi, è sicuramente la meno tradizionale) ma ha parecchi vantaggi. Se l'idea di sollazza e mi dici quali dati devono essere conservati, ti dico come si fa.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 2189
|
grazie mille!
allora,ho un condominio e devo: 1-memorizzare i dati dei condomini-cf recapito telefonico ecc.-(lo faccio con le stringhe e poi uso lo strcat?) 2-tenere conto delle spesa mensile(avendo la possibilita' di vedere il mese di maggio le spese per la pulizia ,luce acqua ecc..e cosi per gli altri mesi) e di quella annuale... 3-dividere la spesa tramite i millesimi per singoli condomini(ce la fo) 4-poter tenere conto di quanto a pagato ogni condomino(per vedere se è in defict o eccesso) 5-tenere conto degli impiegati del condominio con relativi dati anagrafici,paga mensile e giorni di lavoro(portiere -giardiniere ecc...) grazie ps come mi ritorna tra le mani il c++(a scuola me lo danno free) inizio a mettermi sotto...e questione di giorni
__________________
Asrock X79 extreme 11 || Intel I7 4960X || 32GB Vengeance 2400Mhz || R9 280x || Thermaltake 1200 || Obsidian 900D || 840 Evo Cerco collaboratori per blog informatica |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per i file in C++ questa guida non è male per partire: http://www.daniweb.com/forums/thread6542.html
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 2189
|
mi sa che con il vostro aiuto come torno a scuola il 10 in programmazione nn me lo toglie nessuno
__________________
Asrock X79 extreme 11 || Intel I7 4960X || 32GB Vengeance 2400Mhz || R9 280x || Thermaltake 1200 || Obsidian 900D || 840 Evo Cerco collaboratori per blog informatica |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il logger funziona in questo modo.
Supponiamo che i dati da conservare siano degli oggetti Condomino così fatti: class Condomino +long getId(); +string getNome(); +string getCognome(); +string getTelefono(); +string getCodiceFiscale(); Le operazioni che coinvolgono la persistenza dei Condomini, cioè la conservazione dei dati dei condomini tra un'esecuzione e l'altra dell'applicazione, sono solo tre. 1. crea un nuovo condomino 2. elimina un condomino 3. modifica i dati di un condomino Quando nel programma si verifica uno di questi eventi noi prendiamo e scriviamo sul file di log, che è un file di testo, una stringa di identificazione dell'evento seguita da tutti i dati necessari per ricostruirlo. Stabiliamo che le stringhe di identificazione siano: CREA CONDOMINO ELIMINA CONDOMINO MODIFICA CONDOMINO Per poter essere ricostruibile, l'evento "crea un nuovo condomino" richiede che il file di log riporti i dati del condomino creato. I dati necessari alla creazione di un condomino sono: a) una intero long come identificatore univoco b) una stringa per il nome c) una stringa per il cognome d) una stringa per il recapito telefonico e) una stringa per il codice fiscale Supponiamo che il programma crei, dietro richiesta dell'utente, questo Condomino: id = 0 nome = mario cognome = rossi telefono = 123456 codice fiscale = blabla Il logger scriverà sul file: CREA CONDOMINO 0 mario rossi 123456 blabla L'eliminazione di un condomino può essere registrata sul file di log con l'identificatore ELIMINA CONDOMINO seguito dall'identificatore univoco del condomino eliminato: ELIMINA CONDOMINO 0 La mutazione dei dati di un condomino sarà invece registrata come la creazione ma con un'intestazione diversa: MODIFICA CONDOMINO 0 mario rossi 789012 blabla Alla fine della fiera, il contenuto del file di log somiglierà a questo: Codice:
CREA CONDOMINO 0 mario rossi 123456 blabla CREA CONDOMINO 1 gianni verdi 123333 blibli CREA CONDOMINO 2 pietro neri 44444 frufru ELIMINA CONDOMINO 2 CREA CONDOMINO 3 franco gialli 222222 gnagna MODIFICA CONDOMINO 1 gianni verdi 678888 blabla ... ...eccetera per ogni linea X nel file di log se X è CREA CONDOMINO 1. la linea seguente è l'identificatore 2. la linea seguente è il nome 3. la linea seguente è il cognome 4. la linea seguente è il telefono 5. la linea seguente è il codice fiscale 6. prendi i dati letti, crea un condomino e infilalo nella memoria del programma +se X è ELIMINA CONDOMINO 1. la linea seguente è l'identificatore del condomino da eliminare 2. cerca nella memoria il condomino che abbia quell'identificatore ed eliminalo +se X è MODIFICA CONDOMINO 1. la linea seguente è l'id del condomino modificato 2. la linea seguente è il nuovo nome 3. la linea seguente è il nuovo cognome 4. la linea seguente è il nuovo telefono 5. la linea seguente è il nuovo codice fiscale 6. cerca nella memoria il condomino di identificatore id, eliminalo e rimpiazzalo con un nuovo condomino oppure cambia i suoi dati Applichi lo stesso principio a tutte le altre modifiche e sei a posto. E che posto. Il logger, richiedendo la presenza di una controparte in memoria per l'uso dei dati da parte del programma, ciuccia una valanga di memoria. In cambio ti offre un motore di persistenza transazionale, cioè puoi isolare un gruppo di modifiche ed eliminarle in caso di errore, molto rapido nell'accesso ai dati, essendo conservati nella memoria volatile e, sopratutto, reversibile: il file di log non è altro che una pila delle transizioni che hanno portato il programma dal stato iniziale, vuoto, allo stato attuale. Eliminando l'ultima transizione registrata fai un passo indietro nel tempo. Nel campo delle applicazioni desktop si tratta di un valore assoluto. L'utente può compiere sui suoi dati le più distratte nefandezze ed avere comunque la garanzia che, in ogni istante, quella nefandezza sarà annullabile.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 2189
|
grazie,molto utile,credo di avere capito tutto,ma...:
non mi fare sembrare lollo, ma questo Quote:
io uso scrivere cosi: Quote:
,la ricerca binaria...cose che si fanno a scuola,purtroppo i prof non sono arrivati a finire e spero che con il vostro aiuto(da quello che ho capito siete programmatori)possa riuscire nel mio intento dimenticavo,il log in che cartella si va a posizionare?
__________________
Asrock X79 extreme 11 || Intel I7 4960X || 32GB Vengeance 2400Mhz || R9 280x || Thermaltake 1200 || Obsidian 900D || 840 Evo Cerco collaboratori per blog informatica |
||
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il file di testo che contiene le righe sputate dal logger lo puoi mettere dove ti pare ma sarebbe meglio metterlo nella cartella del tuo programma (magari in una sub directory "data").
Condomino è una classe. In C++, lingua che fortunatamente non uso, è una cosa che potrebbe somigliare a: Codice:
...in Condomino.h
class Condomino {
private:
long id;
string nome;
string cognome;
...eccetera
public:
long getId();
string getNome();
string getCognome();
...eccetera
};
...in Condomino.cpp
#include "Condomino.h"
long Condomino::getId() { return id; }
string Condomino::getNome() { return nome; }
string Condomino::getCognome() { return cognome; }
...eccetera
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 2189
|
ma perchè in cpp mi hanno insegnato a scriverlo cosi?
__________________
Asrock X79 extreme 11 || Intel I7 4960X || 32GB Vengeance 2400Mhz || R9 280x || Thermaltake 1200 || Obsidian 900D || 840 Evo Cerco collaboratori per blog informatica |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 1077
|
Secondo me è pazzesco fare un software del genere nel modo che ti stanno consigliando. Devi usare un database e se proprio ti serve memorizzare lo stato del programma usi la serializzazione.
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 1077
|
Mi sembra complicarsi inutilmente le cose.
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Naturalmente è una questione di gusti. Per i professionisti del settore di necessità (se qualcosa va storto dire "ho usato un database come tutti" potrebbe salvarvi la ghirba).
Io credo che al più 300 linee di codice valgano lo sforzo se rapportate al risultato della formula Database = SQL del produttore + DDL + dispiegamento + amministrazione. Non sono il solo. http://blogs.sun.com/jag/date/20061020
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
nemmeno io riesco a capire per quale motivo gli stai consigliando di registrare tutte le operazioni che modificano lo stato del programma anziché solo lo stato del programma così com'è... facendo come dici tu, se ho capito bene, il log non smetterebbe mai di crescere; e poi non gli hai dato alcuna informazione specifica su come fare I/O su files in C++, che è sostanzialmente quello che lui voleva sapere. trovo strano che non lo sappia visto che ha incluso iostream (e pure male
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 1077
|
Quote:
Io al nostro amico che è ancora all'inizio e che ha voglia di imparare consiglio di studiarsi prima le basi di OOP, poi i vari metodi per memorizzare in maniera permanente delle informazioni (serializzazione in primis). A quel punto sceglierà da solo l'opzione che gli sembra più semplice. |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jun 2006
Messaggi: 1077
|
Esagerata forse, ma siccome penso che lo scopo fondamentale che lo ha spinto a fare questo post sia imparare qualcosa di utile e non fare un programma che possa utilizzare suo padre.
|
|
|
|
|
|
#19 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
però l'idea della serializzazione è ottima: io consiglierei a mikisx di trasferirsi su Java, perché se sa usare vettori e strutture varie diventa solo una questione di ObjectOutputStream.writeObject e successivamente di ObjectInputStream.readObject. |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:50.




















