Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Lavorare sui file.dat - Gestione autosalone

    Salve a tutti ragazzi. Ultimamente sto cercando di capire per bene come lavorare sui file con il C++. Sto usando l'ambiente di lavoro Borland C++ Builder 6 sotto Win XP. Sono incappato però in un punto cieco per me.

    Ho scritto un programmino per la gestione di un autosalone che scrive in un file ("car.dat") tutti i vari dati di ogni singola auto. Il programma al momento prevede l'inserimento di una nuova auto (una alla volta quindi) e la stampa di tutte le auto. Le operazione che vado a fare sul file "car.dat" sono la creazione ovviamente (e fin qui nessun problema, uso l'algoritmo per il controllo dell'esistenza del file evitando di farlo andare in errore), la scrittura e la lettura.

    PROBLEMA: la cosa strana che riscontro è che quando vado ad inserire un nuovo record nel mio file, la scrittura non avviene correttamente. Uso gli attributi ios::app per fare in modo che ogni scrittura venga effettuata in fondo al file ma ciò non avviene e non capisco il perchè. Di seguito vi posto il codice dell'intero programmino sperando che qualche anima pia mi aiuti nello scopo. In grassetto ho evidenziato la procedura che dovrebbe scrivere sul file ma che in realta non lo fà...

    Grazie anticipatamente a tutti!!

    codice:
    #include <stdio.h>
    #include <fstream.h>
    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    
    //Costante Nome File
    char NOMEF[]= "car.dat";
    
    class cSalone;
    class cAuto{
    	friend class cSalone;
    	private:
    		char targa[9];
    		short cil;
    		char alim;
    		float prezzo;
    		char marca[15];
    		char modello[15];
    		char isUsata;
    	public:
    		cAuto(){};
    		void caricaAuto();
    		void stampaAuto();
    };
    
    class cSalone{
    	private:
    		fstream fauto;
    	public:
    		cSalone();
    		void nuovaAuto();
    		void stampa();
    };
    
    cSalone S;
    
    void main(){
    char opt;
            do{
               clrscr();
               cout << "I - Inserisci una nuova auto" << endl;
               cout << "S - Stampa tutte le auto dell'autosalone" << endl;
               cout << "F - Esci dal programma"<<endl;
               opt = getche();
               cout << endl;
               opt = toupper(opt);
                       switch(opt){
                        case 'I':
                         S.nuovaAuto();
                         break;
                        case 'S':
                         S.stampa();
                         system("pause");
                         break;
                        default:
                         cout << "Hai scelto un opzione errata!!" << endl;
                         }
             }while(opt!= 'F');
    }
    
    
    cSalone::cSalone(){
    fauto.open(NOMEF,ios::in|ios::binary);
            if(!fauto){
             fauto.open(NOMEF,ios::out|ios::binary);
                    if (!fauto) cout << "errore";
            }
    fauto.close();
    }
    
    void cAuto::caricaAuto(){
    fflush(stdin);
    cout << "Inserisci la targa" << endl;
    fflush(stdin);
    gets(targa);
    cout << "Inserisci la cilindrata" << endl;
    fflush(stdin);
    cin >> cil;
    cout << "Inserisci l'alimentazione" << endl;
    fflush(stdin);
    cin >> alim;
    cout << "Inserisci il prezzo" << endl;
    fflush(stdin);
    cin >> prezzo;
    cout << "Inserisci la marca" << endl;
    fflush(stdin);
    gets(marca);
    cout << "Inserisci il modello" << endl;
    fflush(stdin);
    gets(modello);
    cout << "E' usata? (s/n)" << endl;
    fflush(stdin);
    cin >> isUsata;
    fflush(stdin);
    }
    
    void cAuto::stampaAuto(){
    cout << "TARGA: " << targa << endl;
    cout << "CILINDRATA: " << cil << endl;
    cout << "ALIMENTAZIONE: " << alim << endl;
    cout << "PREZZO: " << prezzo << endl;
    cout << "MARCA: " << marca << endl;
    cout << "MODELLO: " << modello << endl;
    cout << "USATA: " << isUsata << endl;
    }
    
    void cSalone::stampa(){
    cAuto A;
    fauto.open(NOMEF, ios::in|ios::binary);
            while(fauto.read((char*)&A,sizeof(cAuto))!=0){
            A.stampaAuto();
            }
    fauto.clear();
    fauto.close();
    }
    
    void cSalone::nuovaAuto(){
    cAuto A;
    A.caricaAuto();
    fauto.open(NOMEF, ios::app|ios::binary);
    fauto.write((char*)(&A), sizeof(cAuto));
    fauto.clear();
    fauto.close();
    }

  2. #2
    Se stai preparando un programma che poi viene utilizzato da un cliente (non quindi a scopo didattico) ti consiglio di salvare i dati in un database come sqlite o altro. Ciao ciao.

  3. #3
    Originariamente inviato da denis76
    Se stai preparando un programma che poi viene utilizzato da un cliente (non quindi a scopo didattico) ti consiglio di salvare i dati in un database come sqlite o altro. Ciao ciao.
    Si ovviamente lo farei con un database mica con i file .dat
    Il mio programmino è esclusivamente a scopo didattico

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.