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

    [C] Funzione impossibile da implementare

    Salve a tutti, sono nuovo in questo forum. Ho una domanda da sottoporre a tutti voi. Ho sviluppato il progetto del database di un fantomatico Centro Sportivo, con le varie struct, menu, sottomenu e funzioni di manipolazione. Ora però mi manca da implementare questa funzione: "Al momento dell'ingresso, verificare che il socio entrante sia in regola con i pagamenti". L'unico indizio che mi ha dato il professore è questo: "basta fare la verifica della data in cui avviene l'ingresso,
    la data deve essere minore della data di scadenza della quota"
    Posto qui la porzione di codice della funzione che riguarda l'inserimento dell'ingresso:
    codice:
    void inserisci_ingresso()
    {    
        Ingressi e;
        Ingressi eTemp;
        FILE *fIng; //file corso
        FILE *fInd; //file indice del corso
        
        printf("Numero: ");
        scanf("%d", &e.numero);
        printf("Nome: ");
        scanf("%s", &e.nome);
        printf("Cognome: ");
        scanf("%s", &e.cognome);
        printf("Data: ");
        scanf("%s", &e.data_ingresso);
        printf("Ora di ingresso(HH:MM): ");
        scanf("%s", &e.ora_ingresso);
        printf("Ora di uscita(HH:MM): ");
        scanf("%s", &e.ora_uscita);
        e.cancellato = 0;
        
        int cont = 0;
        
        fIng = fopen(ingressoAperto,"r+b");
        
        fread(&eTemp,sizeof(Ingressi),1,fIng);
        
        while(eTemp.cancellato != 1)
        {
            fread(&eTemp,sizeof(Ingressi),1,fIng);
            cont++;
        }
        
        int posInIngresso = cont;
        
        fseek(fIng,cont * sizeof(Ingressi),0);
        fwrite(&e,sizeof(Ingressi),1,fIng);
        fclose(fIng);
        
        Indice x;
        Indice xTemp;
        
        strcpy(x.chiave,e.cognome);
        x.valore = e.numero;
        
        fInd = fopen(indiceAperto,"r+b");
        
        cont = 0;
        fread(&xTemp,sizeof(Indice),1,fInd);
        
        while(strcmp(xTemp.chiave,"VUOTO") != 0)
        {
            fread(&xTemp,sizeof(Indice),1,fInd);
            cont++;
        }
        
        fseek(fInd,cont * sizeof(Indice),0);
        fwrite(&x,sizeof(Indice),1,fInd);
        fclose(fInd);
        
        IndiceCodice y;
        IndiceCodice yTemp;
        
        y.chiave = e.numero;
        y.valore = posInIngresso;
        
        fInd = fopen(indiceCodiciAperto,"r+b");
        
        cont = 0;
        fread(&yTemp,sizeof(IndiceCodice),1,fInd);
        
        while(yTemp.chiave != -1)
        {
            fread(&yTemp,sizeof(IndiceCodice),1,fInd);
            cont++;
        }
        
        fseek(fInd,cont * sizeof(IndiceCodice),0);
        fwrite(&y,sizeof(IndiceCodice),1,fInd);
        fclose(fInd);
        
        IndiceCodice ind[max];
        fInd = fopen(indiceCodiciAperto,"rb");
        
        int i;
        for(i = 0; i < max; i++)
        {
            fread(&ind[i],sizeof(IndiceCodice),1,fInd);
        }
        
        fclose(fInd);
        
        OrdinaIndiceCodici(ind,max);
        
        fInd = fopen(indiceCodiciAperto,"wb");
        
        for(i = 0; i < max; i++)
        {
            fwrite(&ind[i],sizeof(IndiceCodice),1,fInd);
        }
        fclose(fInd);
        printf("Aggiornamento indici completato.\n");
    }

    Aiutatemi a implementarla se potete!! Io non so assolutamente come si fa...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come ti ho detto nell'altro forum Andrea, una volta ottenuto il codice del cliente, ottieni i suoi dati di pagamento e confronta la data di pagamento con quella dell'ingresso.

    Se non provi a scrivere qualcosa, aspettandoti il codice pronto, mi sa che non risolvi ....
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Come ti ho detto nell'altro forum Andrea, una volta ottenuto il codice del cliente, ottieni i suoi dati di pagamento e confronta la data di pagamento con quella dell'ingresso.

    Se non provi a scrivere qualcosa, aspettandoti il codice pronto, mi sa che non risolvi ....
    Posto ciò che ho scritto:

    void inserisci_ingresso()
    {
    char cognomeIscritto[20];
    char nomeFile[20];
    char nomeIndice[20];
    char nomeIndiceCod[20];

    char IscrizioniAperto[20];
    char indiceAperto_iscrizioni[20];
    char indiceCodiciAperto_iscrizioni[20];

    Indice_iscrizioni cognomeLetto;
    Ingressi e;
    Ingressi eTemp;
    Iscrizioni r;
    FILE *f;
    FILE *fIng; //file corso
    FILE *fInd; //file indice del corso

    strcpy(nomeIndice,nomeFile);
    strcat(nomeIndice,".txt");
    strcat(nomeFile,".dati");
    strcpy(nomeIndiceCod,nomeIndice);
    strcat(nomeIndiceCod,"i");

    printf("Inserire il cognome: ");
    scanf("%d", &cognomeIscritto);

    f = fopen(indiceAperto_iscrizioni, "r");
    fread(&cognomeIscritto,sizeof(Indice_iscrizioni),1 ,f);

    while(!feof(f) && strcmp(cognomeLetto.chiave,cognomeIscritto) != 0)
    {
    fread(&cognomeLetto,sizeof(Indice_iscrizioni),1,f) ;
    }
    fclose(f);

    if(feof(f))
    {
    return -1;
    }
    else
    {
    IndiceCodice_iscrizioni x;
    f = fopen(indiceCodiciAperto_iscrizioni,"r");
    int aCaso;
    int posizione = RicercaBin(indiceCodiciAperto_iscrizioni,max,cogno meLetto.valore,&aCaso);
    if(posizione > -1)
    {
    f = fopen(IscrizioniAperto,"r");
    fseek(f,posizione * sizeof(Iscrizioni),0);
    Iscrizioni r;
    fread(&r,sizeof(Iscrizioni),1,f);
    fclose(f);
    return posizione;
    }
    else
    {
    return -1;
    }
    }


    printf("Numero: ");
    scanf("%d", &e.numero);
    printf("Nome: ");
    scanf("%s", &e.nome);
    printf("Cognome: ");
    scanf("%s", &e.cognome);
    printf("Data: ");
    scanf("%s", &e.data_ingresso);
    printf("Ora di ingresso(HH:MM): ");
    scanf("%s", &e.ora_ingresso);
    printf("Ora di uscita(HH:MM): ");
    scanf("%s", &e.ora_uscita);
    e.cancellato = 0;

    int cont = 0;

    fIng = fopen(ingressoAperto,"r+b");

    fread(&eTemp,sizeof(Ingressi),1,fIng);

    while(eTemp.cancellato != 1)
    {
    fread(&eTemp,sizeof(Ingressi),1,fIng);
    cont++;
    }

    int posInIngresso = cont;

    fseek(fIng,cont * sizeof(Ingressi),0);
    fwrite(&e,sizeof(Ingressi),1,fIng);
    fclose(fIng);

    Indice x;
    Indice xTemp;

    strcpy(x.chiave,e.cognome);
    x.valore = e.numero;

    fInd = fopen(indiceAperto,"r+b");

    cont = 0;
    fread(&xTemp,sizeof(Indice),1,fInd);

    while(strcmp(xTemp.chiave,"VUOTO") != 0)
    {
    fread(&xTemp,sizeof(Indice),1,fInd);
    cont++;
    }

    fseek(fInd,cont * sizeof(Indice),0);
    fwrite(&x,sizeof(Indice),1,fInd);
    fclose(fInd);

    IndiceCodice y;
    IndiceCodice yTemp;

    y.chiave = e.numero;
    y.valore = posInIngresso;

    fInd = fopen(indiceCodiciAperto,"r+b");

    cont = 0;
    fread(&yTemp,sizeof(IndiceCodice),1,fInd);

    while(yTemp.chiave != -1)
    {
    fread(&yTemp,sizeof(IndiceCodice),1,fInd);
    cont++;
    }

    fseek(fInd,cont * sizeof(IndiceCodice),0);
    fwrite(&y,sizeof(IndiceCodice),1,fInd);
    fclose(fInd);

    IndiceCodice ind[max];
    fInd = fopen(indiceCodiciAperto,"rb");

    int i;
    for(i = 0; i < max; i++)
    {
    fread(&ind[i],sizeof(IndiceCodice),1,fInd);
    }

    fclose(fInd);

    OrdinaIndiceCodici(ind,max);

    fInd = fopen(indiceCodiciAperto,"wb");

    for(i = 0; i < max; i++)
    {
    fwrite(&ind[i],sizeof(IndiceCodice),1,fInd);
    }
    fclose(fInd);
    printf("Aggiornamento indici completato.\n");
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da AndreITPS Visualizza il messaggio
    Posto ciò che ho scritto
    Intendevo rispetto al codice che ti serve, non a tutto il programma (che non serve ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Non è tutto il programma è solo la funzione di inserimento dell'ingresso

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non so come dirtelo altrimenti, ma te lo scrivo per l'ultima volta ...

    Suggerire vero e proprio codice è impossibile dato che bisognerebbe conoscere a fondo tutte le strutture utilizzate, le soluzioni e gli algoritmi utilizzati (insomma, bisognerebbe aver pensato e scritto praticamente tutto il codice). E l'unico che lo può fare sei solo tu.

    Quello che si può suggerire sono i passi per risolvere il problema, ma la scrittura del codice da implementare la devi fare tu.

    Nuovamente i passi al momento della registrazione di un ingresso :

    1) chiedi il cognome e nome (o il codice, o l'identificativo) dell'utente

    2) fai una ricerca nei dati relativi alle iscrizioni (cerca nelle strutture dati utilizzate per le iscrizioni secondo cognome/nome o identificativo)

    3) estrai il valore relativo alla data di iscrizione e confrontalo con quella odierna

    4) visualizza i risultati
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.