Progetto c ++

di il
14 risposte

Progetto c ++

Salve ho 20 anni è ho poca esperienza con il c++ (almeno penso)...
dovrei fare un progetto che ha in input due file di testo(info.txt)che contiene le informazioni (codicealbergo nomealbergo categoria camere prezzo)(es. H126 Venezia 2 21 48.50). il file è ordinato per numero di codice albergo.il secondo (prezzi.txt) contiene informazioni relativa all'aggiornamento dei prezzi e contiene il codicealbergo e il prezzo(es h126 52.00).
il programma fornisce in output due file di testo 2 file (oldinfo.txt) che è uguale a (info.txt) e info.txt che si ottiene aggiornando i prezzi del primo file di input. il programma deve gestirel'eventuale presenza in "prezzi.txt" di un codice albergo inesistente. infine il programmadeve visuallizzare sul monitor il contenuto dei due file di output visualizzando contemporaneamente una linea di ciascun file di output.
ora io ho fatto il programma ma si blocca . non riesco a capire dove è/sono gli errori chi mi aiuta??


/*
Name: AggiornamentoAlbergo
Author:
Date:
Description: Permette di aggiornare da dei file di testo i prezzi degli alberghi.
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h> //direttive

FILE *informazione;
FILE *prezzi;
FILE *infovecchie;
FILE *informazioniagg;

void fusione(FILE *informazione, FILE *prezzi, FILE *infovecchie);
int
main()
{
int statoA = 0, // variabile interna, controlla la fine del primo file
statoB = 0,
categoria, // input, quantità degli elementi del primo file
camere; // input, quantità degli elementi del secondo file

char codicealbergo[12], // input, nome degli elementi del primo file
nomealbergo[12]; // input, nome degli elementi del primo file

informazione = fopen("info.txt","r");
infovecchie = fopen("oldinfo.txt","w");

while ( (statoA = fgetc (informazione)) != EOF) // copiatura del file info nel file oldinfo
fputc(statoA,infovecchie);

fclose (informazione);
fclose (infovecchie);
fusione (informazione, prezzi, infovecchie);

system ("pause");
return (0);
}

void
fusione(FILE *informazione, FILE *prezzi, FILE *infovecchie)
{
char codiceA,
codiceB,nomeA,;
int categoriaA,
statoA,camereA, statoB;
float prezzoA,prezzoB;
informazione = fopen("info.txt","w");
infovecchie = fopen("oldinfo.txt","r");
prezzi = fopen ("prezzi.txt","r");

statoA =(fscanf(infovecchie,"%s%s%d%d%f",codiceA,nomeA,categoriaA,&camereA,&prezzoA));
statoB=(fprintf(prezzi,"%s%f",codiceB,&prezzoB));

while ( (statoB != EOF) && (statoB != EOF ))
{
if (codiceA==codiceB)
{
fprintf (informazione, "%s%s%d%d%f",codiceA,nomeA,categoriaA,camereA,prezzoB);
statoA=(fscanf(infovecchie,"%s%s%d%d%f",codiceA,nomeA,categoriaA,&camereA,&prezzoA));
statoB=(fprintf(prezzi,"%s%f",codiceB,&prezzoB));
}
else
printf("nota che il/i codice/i degli alberghi inseriti nel file prezzi.txt sono errato/i \n");

fclose (informazione);
fclose (prezzi);
fclose (infovecchie);
}
}

14 Risposte

  • Re: Progetto c ++

    Visto che è in C++ avresti dovuto farlo con le classi.
    Comunque visto che non hai usato le classi, credo sia conveniente usare i record, ho messo giù qualche linea di codice come esempio:
    ********************************************************************************************
    #include <stdio.h>
    #include <string.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("/home/overflow/Desktop/test/info.txt","r");
    FILE* prezzo = openfile("/home/overflow/Desktop/test/prezzi.txt","r");

    FILE* oinfo = openfile("/home/overflow/Desktop/test/oldinfo.txt","w");
    FILE* ninfo = openfile("/home/overflow/Desktop/test/newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_info(oinfo,albergo,len);

    readfile_prezzo(prezzo,albergo,len);
    writefile_info(ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);


    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo, int alb_len)
    {
    int i;
    for(i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo.nome,albergo.categoria,albergo[i].camere,albergo[i].prezzo);
    }
    *************************************************************************
  • Re: Progetto c ++

    Overflow ha scritto:


    visto che è in C++ avresti dovuto farlo con le classi.
    Comunque visto che non hai usato le classi, credo sia conveniente usare i record, ho messo giù qualche linea di codice come esempio:
    ********************************************************************************************
    #include <stdio.h>
    #include <string.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("/home/overflow/Desktop/test/info.txt","r");
    FILE* prezzo = openfile("/home/overflow/Desktop/test/prezzi.txt","r");

    FILE* oinfo = openfile("/home/overflow/Desktop/test/oldinfo.txt","w");
    FILE* ninfo = openfile("/home/overflow/Desktop/test/newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_info(oinfo,albergo,len);

    readfile_prezzo(prezzo,albergo,len);
    writefile_info(ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);


    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo, int alb_len)
    {
    int i;
    for(i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo.nome,albergo.categoria,albergo[i].camere,albergo[i].prezzo);
    }
    *************************************************************************







    no non dovrebbe andare cosi il programma ... dovrebbe controllare se il codice del file prezzi esiste nel file (oldinfo dovrebbe essere) e i risultati dovrebbebero essere:
    esempio
    H126 venezia 2 21 48.50€
    h126 venezia 2 21 48.50€ (aggiornamento)

    h127 milano 1 16 18.79€
    h127 milano 1 17 70.00€ (aggiornamento)

    h129 roma 5 11 220€
    h129 roma 5 11 230€ (aggiornamento)

    CMQ GRAZIE 1000 DELLA RISPOSTA SEI STATO L'UNICO TI RINGRAZIO
    MA HAI QUALCHE IDEA PER FARLO GRAZIE IN ANTICIPO.
  • Re: Progetto c ++

    Scusa forse ho capito male, rivediamo:
    ci sono due file, info.txt e prezzi.txt. Nel primo (info.txt) ci sono i dati relativi agli alberghi:
    codice nome categoria camere prezzo
    nel file prezzi.txt invece c'è l'aggiornamento:
    codice prezzo
    il programma dunque deve leggere il file info.txt e il file prezzo.txt e crearne uno nuovo con i prezzi aggiornati, cioè un nuovo file come info.txt solo che il prezzo di ogni albergo ora corrisponde a quello dato in prezzi.txt.
    Es.:
    info.txt
    h001 Venezia 2 45 60.00
    h002 roma 7 58 54.00
    h003 firenze 4 39 38.00

    prezzi.txt
    h001 55.00
    h002 41.00
    h003 44.00

    quindi il programma legge il primo e il secondo file e ne crea uno con i prezzi aggiornati(quelli di prezzi.txt)

    new_info.txt (generato dal programma)
    h001 Venezia 2 45 55.00
    h002 roma 7 58 41.00
    h003 firenze 4 39 44.00

    se in prezzi.txt c'è un codice che in info.txt non c'è ad esempio h125 45.00, cosa si deve fare?nell'esempio di prima c'era una printf che avvisava l'utente.
    io ho capito cosi, sbaglio??
    ho cercato di essere il più chiaro possibile!!.
  • Re: Progetto c ++

    Overflow ha scritto:


    scusa forse ho capito male, rivediamo:
    ci sono due file, info.txt e prezzi.txt. Nel primo (info.txt) ci sono i dati relativi agli alberghi:
    codice nome categoria camere prezzo
    nel file prezzi.txt invece c'è l'aggiornamento:
    codice prezzo
    il programma dunque deve leggere il file info.txt e il file prezzo.txt e crearne uno nuovo con i prezzi aggiornati, cioè un nuovo file come info.txt solo che il prezzo di ogni albergo ora corrisponde a quello dato in prezzi.txt.
    Es.:
    info.txt
    h001 Venezia 2 45 60.00
    h002 roma 7 58 54.00
    h003 firenze 4 39 38.00

    prezzi.txt
    h001 55.00
    h002 41.00
    h003 44.00

    quindi il programma legge il primo e il secondo file e ne crea uno con i prezzi aggiornati(quelli di prezzi.txt)

    new_info.txt (generato dal programma)
    h001 Venezia 2 45 55.00
    h002 roma 7 58 41.00
    h003 firenze 4 39 44.00

    se in prezzi.txt c'è un codice che in info.txt non c'è ad esempio h125 45.00, cosa si deve fare?nell'esempio di prima c'era una printf che avvisava l'utente.
    io ho capito cosi, sbaglio??
    ho cercato di essere il più chiaro possibile!!.
    allora e quasi esatto ci sono solo due inesattezze e cioe 1) il file di errore lo voglio mostrare sullo schermo ma la scrittura dura meno di un secondo ... so che devo inserire il system ("pause") ma dove lo metto e lo metto mi da sempre errore come devo fare??
    2) nel nuovo file deve apparire per ogni codice la vecchia riga con il suo nuovo prezzo e la stessa riga con il prezzo aggiornato non so se mi sono spiegato? se non sono stato chiaro riprovo a rispiegartelo.
    ti ringrazio
  • Re: Progetto c ++

    Cosi dovrebbe andare:
    *************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);

    readfile_prezzo(prezzo,ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    **********************************************************************
  • Re: Progetto c ++

    Overflow ha scritto:


    cosi dovrebbe andare:
    *************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);

    readfile_prezzo(prezzo,ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    **********************************************************************



    non per fare il quastafeste ma il programma non compie tutte le sue funzioni infatti il file old.info rimane vuoto. come è possibile??
  • Re: Progetto c ++

    Gia hai ragione mi ero scordato(forse perchè non ne vedo molto l'utilità), comunque non è difficile, ci saresti arrivato senz'altro.

    ******************************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);
    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_oldinfo(oinfo,albergo,len);
    readfile_prezzo(prezzo,ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len)
    {
    for(int i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo[i].nome,albergo[i].categoria,albergo[i].camere,albergo[i].prezzo);
    }

    ******************************************************************

    ho solo fatto una funzione che scrive sul file la struttura albergo, subito dopo aver letto il file info.txt.
  • Re: Progetto c ++

    Overflow ha scritto:


    gia hai ragione mi ero scordato(forse perchè non ne vedo molto l'utilità), comunque non è difficile, ci saresti arrivato senz'altro.

    ******************************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);
    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_oldinfo(oinfo,albergo,len);
    readfile_prezzo(prezzo,ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len)
    {
    for(int i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo[i].nome,albergo[i].categoria,albergo[i].camere,albergo[i].prezzo);
    }

    ******************************************************************

    ho solo fatto una funzione che scrive sul file la struttura albergo, subito dopo aver letto il file info.txt.

    Gia ci avevo pensato anche io ma quando lo mando il esecuzione esce la schermata nera è un messaggio di errore ci ero arrivato e solo che esce sto errore avrei voglia di maledetto programma.
  • Re: Progetto c ++

    Che messaggio di errore esce? a me non esce niente...
  • Re: Progetto c ++

    Overflow ha scritto:


    che messaggio di errore esce? a me non esce niente...
    scusa avevo schiacciato involontariamente un carattere nel nome dei file quindi non riconosceva il file ti ringrazio
  • Re: Progetto c ++

    pablo2009 ha scritto:


    Overflow ha scritto:


    gia hai ragione mi ero scordato(forse perchè non ne vedo molto l'utilità), comunque non è difficile, ci saresti arrivato senz'altro.

    ******************************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);
    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_oldinfo(oinfo,albergo,len);
    readfile_prezzo(prezzo,ninfo,albergo,len);

    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len)
    {
    for(int i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo[i].nome,albergo[i].categoria,albergo[i].camere,albergo[i].prezzo);
    }

    ******************************************************************

    ho solo fatto una funzione che scrive sul file la struttura albergo, subito dopo aver letto il file info.txt.

    Gia ci avevo pensato anche io ma quando lo mando il esecuzione esce la schermata nera è un messaggio di errore ci ero arrivato e solo che esce sto errore avrei voglia di maledetto programma.

    si puo apportare questa modifica???
    costruire un modulo che deve essere chiamato alla fine del programma principale che ha in input il file info.txt, e due numeri che indicano un intervallo di prezzi (per esempio 30.5 e 50.5)
    il modulo restituisce in output un file elenco.txt che contiene le informazzioni sugli alberghi il cuyi prezzo e compreso nell'intervallo dei valori indicati dagli argomenti attuali. il modulo mostra un numero che indica quati sono gli alberghi contenuti nel file elenco.txt
    il programma principale deve mostrare il contenuto del file elenco.txt
  • Re: Progetto c ++

    Allora tu vuoi che venga generato un nuovo file, della stessa struttura del file indo.txt. Solo che in questo file ci sono solo gli alberghi il cui prezzo è compreso tra determinati valori.
    Non ho capito il fatto del numero degli albergi.
    Spiega meglio.
  • Re: Progetto c ++

    Prova cosi:

    ***************************************************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);
    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len);
    int get_range_alberghi(float max_val,float min_val,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_oldinfo(oinfo,albergo,len);
    readfile_prezzo(prezzo,ninfo,albergo,len);

    int N_range_albergi = get_range_alberghi(50.2,30.4,albergo,len);
    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len)
    {
    for(int i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo[i].nome,albergo[i].categoria,albergo[i].camere,albergo[i].prezzo);
    }

    int get_range_alberghi(float max_val,float min_val,struct info* albergo, int alb_len)
    {
    FILE* fp = openfile("C:\\elenco.txt","w");
    int num=0;
    for(int i=0;i<alb_len;i++)
    {
    if(albergo[i].prezzo > min_val && albergo[i].prezzo < max_val)
    {
    writefile_info(fp,&albergo[i]);
    num++;
    }
    }
    closefile(fp);
    return ++num;
    }

    ************************************************************************************************
  • Re: Progetto c ++

    Overflow ha scritto:


    prova cosi:

    ***************************************************************************************
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    FILE* openfile(char* filename,const char* mode);
    void closefile(FILE* fp);
    int readfile_info(FILE* fp, struct info* albergo);
    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len);
    void writefile_info(FILE* fp,struct info* albergo);
    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len);
    int get_range_alberghi(float max_val,float min_val,struct info* albergo, int alb_len);

    struct info
    {
    char codice[256];
    char nome[256];
    int categoria;
    int camere;
    float prezzo;
    };

    int main()
    {
    struct info albergo[10]={0};

    FILE* informazioni = openfile("C:\\info.txt","r");
    FILE* prezzo = openfile("C:\\prezzi.txt","r");

    FILE* oinfo = openfile("C:\\oldinfo.txt","w");
    FILE* ninfo = openfile("C:\\newinfo.txt","w");

    int len = readfile_info(informazioni,albergo);
    writefile_oldinfo(oinfo,albergo,len);
    readfile_prezzo(prezzo,ninfo,albergo,len);

    int N_range_albergi = get_range_alberghi(50.2,30.4,albergo,len);
    closefile(informazioni);
    closefile(prezzo);
    closefile(oinfo);
    closefile(ninfo);

    system("pause");
    }

    FILE* openfile(char* filename,const char* mode)
    {
    FILE* fp;

    fp = fopen(filename,mode);
    return fp;
    }

    void closefile(FILE* fp)
    {
    fclose(fp);
    }

    int readfile_info(FILE* fp, struct info* albergo)
    {
    int i;

    for(i=0;!feof(fp) ;i++)
    fscanf(fp,"%s%s%d%d%f",albergo.codice,albergo.nome,&albergo.categoria,&albergo.camere,&albergo.prezzo);
    return i;
    }

    void readfile_prezzo(FILE* fp,FILE* out,struct info* albergo, int alb_len)
    {
    int i;
    bool find;
    char codice[256];
    float prezzo;

    while(!feof(fp))
    {
    fscanf(fp,"%s",codice);
    for(i=0, find=false;i<alb_len;i++)
    {

    if(strcmp(codice,albergo.codice)==0)
    {
    writefile_info(out,&albergo);
    fscanf(fp,"%f",&prezzo);
    albergo.prezzo = prezzo;
    writefile_info(out,&albergo);
    find=true;
    }
    }
    if(find==false)
    printf("Nel file prezzo.txt il codice %s non esiste",codice);
    }
    }

    void writefile_info(FILE* fp,struct info* albergo)
    {
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo->codice,albergo->nome,albergo->categoria,albergo->camere,albergo->prezzo);
    }

    void writefile_oldinfo(FILE* fp,struct info* albergo, int alb_len)
    {
    for(int i=0;i<alb_len;i++)
    fprintf(fp,"%s %s %d %d %3.2f\n",albergo.codice,albergo[i].nome,albergo[i].categoria,albergo[i].camere,albergo[i].prezzo);
    }

    int get_range_alberghi(float max_val,float min_val,struct info* albergo, int alb_len)
    {
    FILE* fp = openfile("C:\\elenco.txt","w");
    int num=0;
    for(int i=0;i<alb_len;i++)
    {
    if(albergo[i].prezzo > min_val && albergo[i].prezzo < max_val)
    {
    writefile_info(fp,&albergo[i]);
    num++;
    }
    }
    closefile(fp);
    return ++num;
    }

    ************************************************************************************************

    Sono disposto a ofrirti un compenso da concordare questo è il mio indirizzo contattami entro il 27 oppure contattami
Devi accedere o registrarti per scrivere nel forum
14 risposte