Implementazione particolare funzione

Andrea Trench Manisi

Nuovo Utente
5
0
Ragazzi, chiedo aiuto per questa "particolare funzione". La traccia del mio progetto è questa:
Gestione di un centro sportivo.
Archivi da creare:
· Corsi
· soci
· Iscrizioni e relativi pagamenti
· Ingressi al centro (orario di entrata ed uscita del socio)
Al momento dell’ingresso al centro, occorre verificare se il socio è in regola coi pagamenti.

Ho creato gli archivi richiesti dalla traccia, ma non so assolutamente fare quel pezzo della traccia che ho messo in grassetto e corsivo. Necessito di un aiuto per implementarla, perchè non so assolutamente come farla!
Allego il codice di riferimento(file lab.zip)

Potete aiutarmi?? Grazie :cry::cry:
 

Allegati

  • lab.zip
    11.2 KB · Visualizzazioni: 17

Skills07

Head of Development
Staff Forum
Utente Èlite
35,283
11,433
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Ragazzi, chiedo aiuto per questa "particolare funzione". La traccia del mio progetto è questa:
Gestione di un centro sportivo.
Archivi da creare:
· Corsi
· soci
· Iscrizioni e relativi pagamenti
· Ingressi al centro (orario di entrata ed uscita del socio)
Al momento dell’ingresso al centro, occorre verificare se il socio è in regola coi pagamenti.

Ho creato gli archivi richiesti dalla traccia, ma non so assolutamente fare quel pezzo della traccia che ho messo in grassetto e corsivo. Necessito di un aiuto per implementarla, perchè non so assolutamente come farla!
Allego il codice di riferimento(file lab.zip)

Potete aiutarmi?? Grazie :cry::cry:


molto vago. in che linguaggio devi scrivere questo applicativo??
Righe di codice??

ragazzi è sbagliato aprire un thread chiedendo aiuto senza manco vedere una riga di codice da voi scritto.
Il forum è consultazione e aiuto, non fatemi il lavoro perchè non capisco.

Quindi rispondi al mio quesito sopra, mostrami un pò di codice e vediamo cosa si può fare :figo:
 

Andrea Trench Manisi

Nuovo Utente
5
0
molto vago. in che linguaggio devi scrivere questo applicativo??
Righe di codice??

ragazzi è sbagliato aprire un thread chiedendo aiuto senza manco vedere una riga di codice da voi scritto.
Il forum è consultazione e aiuto, non fatemi il lavoro perchè non capisco.

Questo è il codice

Quindi rispondi al mio quesito sopra, mostrami un pò di codice e vediamo cosa si può fare :figo:

Codice
Codice:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define max 20

struct Ingressi
{
   int numero;
   char nome[20];
   char cognome[20];
   char data_ingresso[20];
   char ora_ingresso[20];
   char ora_uscita[20];
   int cancellato;
};

struct Indice
{
   char chiave[30];
   int valore;
};

struct IndiceCodice
{
   int chiave;
   int valore;
};

int RicercaBin(char i[],int n,int searched,int *inIndice);
void OrdinaIndiceCodici(IndiceCodice in[],int n);
void crea_fileingressi();
void apri_fileingressi();
void inserisci_ingresso();
void visualizzaIngresso(Ingressi e);
void modifica_ingresso();
void elimina_ingresso();
int cerca_ingresso();
void leggi_fileingressi();

char ingressoAperto[20];
char indiceAperto[20];
char indiceCodiciAperto[20];

int main()
{
   int scelta;
   strcpy(ingressoAperto,"VUOTO");
   strcpy(indiceCodiciAperto,"VUOTO");
   
   do
   {
      system("CLS");
      
      printf("\t AREA INGRESSI AL CENTRO \t\n\n");
      
      printf("\t1- Crea nuovo file ingressi\n");
      printf("\t2- Apri file ingressi\n");
      printf("\t3- Inserisci ingresso\n");
      printf("\t4- Modifica ingresso\n");
      printf("\t5- Cancella ingresso\n");
      printf("\t6- Cerca ingresso\n");
      printf("\t7- Visualizza file ingressi\n");
      printf("\t8- Esci dal programma\n");
      
      printf("\nCosa vuoi fare? : ");
      scanf("%d", &scelta);
      
      int e1;
      switch(scelta)
      {
         case 1:
            crea_fileingressi();
            break;
         case 2:
            apri_fileingressi();
            break;
         case 3:
            inserisci_ingresso();
            break;
         case 4:
            modifica_ingresso();
            break;
         case 5:
            elimina_ingresso();
            break;
         case 6:
            
            e1 = cerca_ingresso();
            if(e1 == -1)
            {
               printf("\nIngresso non trovato\n");
            }
            break;
         case 7:
            leggi_fileingressi();
            break;
      }
      system("PAUSE");
   }while(scelta != 8);
   
   return 0;   
}

void OrdinaIndiceCodici(IndiceCodice in[],int n)
{
   IndiceCodice temp;
   int top;
   int scambio;
   int ultimoscambio;
   int i;
   top = 0;
   do
   {
      scambio = 0;
      for(i = n-1;i > top; i--)
      {
         if(in[i].chiave < in[i - 1].chiave)
         {
            temp = in[i];
            in[i] = in[i - 1];
            in[i - 1] = temp;
            
            scambio = 1;
            ultimoscambio = i;
         }
      }
      top = ultimoscambio;
   }while(scambio != 0);
}

int RicercaBin(char i[],int n,int cercato,int *inIndice)
{
   int left = 0;
   int mid;
   int right = n-1;
   FILE *indice;
   indice = fopen(i,"rb");
   do
   {
      mid = (left + right)/2;
      
      IndiceCodice x;
      fseek(indice,mid * sizeof(IndiceCodice),0);
      fread(&x,sizeof(IndiceCodice),1,indice);
      
      if(cercato == x.chiave)
      {
         //esci = 1;
         *inIndice = mid;
         fclose(indice);
         return x.valore; //restituisco la posizione nel file corso
      }
      else
      {
         if(cercato > x.chiave)
         {
            left = mid + 1;
         }
         else
         {
            right = mid - 1;
         }
      }
   
   }while(left <= right);
   *inIndice = -1;
   return -1;
}

void crea_fileingressi()
{
   system("CLS");
   FILE *f;
   char nomeFile[20];
   char nomeIndice[20];
   char nomeIndiceCod[20];
   
   printf("Inserire il nome del file: ");
   scanf("%s", &nomeFile);
   
   Ingressi e;
   
   strcpy(e.nome,"VUOTO");
   strcpy(e.cognome,"VUOTO");
   strcpy(e.data_ingresso,"VUOTO");
   strcpy(e.ora_ingresso,"VUOTO");
   strcpy(e.ora_uscita,"VUOTO");
   e.numero = -1;
   e.cancellato = 1;
   
   strcpy(nomeIndice,nomeFile);
   strcat(nomeIndice,".txt");
   strcpy(nomeIndiceCod,nomeIndice);
   strcat(nomeIndiceCod,"e");
   
   strcat(nomeFile,".date");
   
   f = fopen(nomeFile,"rb");
   
   if(f == NULL)
   {
      fclose(f);
      f = fopen(nomeFile,"wb");
      int i;
      for(i=0;i<max;i++)
      {
         fwrite(&e,sizeof(Ingressi),1,f);
      }
      fclose(f);
      printf("File scritto correttamente!\n");
      
      FILE *indice;
      Indice x;
      
      strcpy(x.chiave,"VUOTO");
      
      indice = fopen(nomeIndice,"wb");
      for(i=0;i<max;i++)
      {
         x.valore = i;
         fwrite(&x,sizeof(Indice),1,indice);
      }
      fclose(indice);
      printf("File indice del corso scritto correttamente\n");
      
      indice = fopen(nomeIndiceCod,"wb");
      IndiceCodice y;
      y.chiave = -1;
      y.valore = -1;
      for(i=0;i<max;i++)
      {
         fwrite(&y,sizeof(IndiceCodice),1,indice);
      }
      fclose(indice);
   }
   else
   {
      char s;
      printf("File già esistente. Vuoi sovrascriverlo? (s/n): ");
      scanf("%s", &s);
      if(s == 's' || s == 'S')
      {
         f = fopen(nomeFile,"wb");
         int i;
         for(i=0;i<max;i++)
         {
            fwrite(&e,sizeof(Ingressi),1,f);
         }
         fclose(f);
         printf("File scritto correttamente!\n");
         
         FILE *indice;
         Indice x;
         
         strcpy(x.chiave,"VUOTO");
         
         indice = fopen(nomeIndice,"wb");
         for(i=0;i<max;i++)
         {
            x.valore = i;
            fwrite(&x,sizeof(Indice),1,indice);
         }
         fclose(indice);
         printf("File indice del corso scritto correttamente\n");
         
         indice = fopen(nomeIndiceCod,"wb");
         IndiceCodice y;
         y.chiave = -1;
         y.valore = -1;
         for(i=0;i<max;i++)
         {
            fwrite(&y,sizeof(IndiceCodice),1,indice);
         }
         fclose(indice);
      }
   }
   printf("Operazione completata\n");
}

void apri_fileingressi()
{
   char nomeFile[20];
    char nomeIndice[20];
    char nomeIndiceCod[20];
    FILE *f;
    FILE *fI;
    do
    {
        /**/

        printf("Nome del file da aprire: ");
        scanf("%s", &nomeFile);

        strcpy(nomeIndice,nomeFile);
        strcat(nomeIndice,".txt");
        strcat(nomeFile,".date");
        strcpy(nomeIndiceCod,nomeIndice);
        strcat(nomeIndiceCod,"e");

        f = fopen(nomeFile,"r+b");
        if(f == NULL)
        {
            printf("Errore nell'apertura del file\n");
        }
        else
        {
            printf("File aperto correttamente!\n");
            strcpy(ingressoAperto,nomeFile);

            fI = fopen(nomeIndice,"r+b");
            if(fI == NULL)
            {
                printf("Errore nell'apertura dell'indice\n");
            }
            else
            {
                strcpy(indiceAperto,nomeIndice);
                printf("Indice Aperto correttamente!\n");
                fclose(fI);
            }


            fI = fopen(nomeIndiceCod,"r+b");
            if(fI == NULL)
            {
                printf("Errore nell'apertura dell'indice\n");
            }
            else
            {
                strcpy(indiceCodiciAperto,nomeIndiceCod);
                printf("Indice Aperto correttamente!\n");
                fclose(fI);
            }
        }
    }while(f == NULL || fI == NULL);
    fclose(f);
}

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");
}

void modifica_ingresso()
{
   char cognome[20];
   FILE *f;
   Indice cognLetto;
   
   printf("Cognome: ");
   scanf("%s", &cognome);
   
   f = fopen(indiceAperto,"r+b");
   fread(&cognLetto,sizeof(Indice),1,f);
   
   int posCogn = 0;
   while(!feof(f) && strcmp(cognLetto.chiave,cognome) != 0)
   {
      fread(&cognLetto,sizeof(Indice),1,f);
      posCogn++;
   }
   
   if(feof(f))
   {
      printf("\n\nIngresso non trovato\n\n");
      fclose(f);
   }
   else
   {
      Indice x;
      printf("Inserire nuovo cognome: ");
      scanf("%s", &x.chiave);
      x.valore = cognLetto.valore;
      
      fseek(f,posCogn * sizeof(Indice),0);
      fwrite(&x,sizeof(Indice),1,f);
      fclose(f);
      
      f = fopen(indiceCodiciAperto,"r+b");
      
      int nellIndice;
      int posizione = RicercaBin(indiceCodiciAperto,max,cognLetto.valore,&nellIndice);
      if(posizione > -1)
      {
         f = fopen(ingressoAperto,"r+b");
         fseek(f,posizione * sizeof(Ingressi),0);
         
         Ingressi e;
         fread(&e,sizeof(Ingressi),1,f);
         visualizzaIngresso(e);
         
         printf("\nInserire i nuovi dati: \n");
         strcpy(e.cognome, x.chiave);
         
         printf("\nNumero: ");
         scanf("%d", &e.numero);
         
         printf("\nNome: ");
         scanf("%s", &e.nome);
         
         printf("\nData ingresso: ");
         scanf("%s", &e.data_ingresso);
         
         printf("\nOra ingresso: ");
         scanf("%s", &e.ora_ingresso);
         
         printf("\nOra uscita: ");
         scanf("%s", &e.ora_uscita);
         
         e.numero = cognLetto.valore;
         e.cancellato = 0;
         
         fseek(f,posizione * sizeof(Ingressi),0);
         fwrite(&e,sizeof(Ingressi),1,f);
         fclose(f);
         
         printf("\n\nIngresso aggiornato con successo\n");
      }
      else
      {
         printf("\n\nIngresso NON trovato\n\n");
         fclose(f);
      }
   }
}

void elimina_ingresso()
{
   char cognome[20];
   FILE *f;
   Indice cognLetto;
   
   printf("Cognome: ");
   scanf("%s", &cognome);
   
   f = fopen(indiceAperto,"r+b");
   fread(&cognLetto,sizeof(Indice),1,f);
   
   int posCogn = 0;
   while(!feof(f) && strcmp(cognLetto.chiave,cognome) != 0)
   {
      fread(&cognLetto,sizeof(Indice),1,f);
      posCogn++;
   }
   
   if(feof(f))
   {
      printf("\n\nIngresso non trovato\n\n");
      fclose(f);
   }
   else
   {
      Indice x;
      strcpy(x.chiave,"VUOTO");
      x.valore = posCogn;
      
      fseek(f,posCogn * sizeof(Indice),0);
      fwrite(&x,sizeof(Indice),1,f);
      fclose(f);
      
      f = fopen(indiceCodiciAperto,"r+b");
      
      int nellIndice;
      int posizione = RicercaBin(indiceCodiciAperto,max,cognLetto.valore,&nellIndice);
      if(posizione > -1)
      {
         fseek(f,nellIndice * sizeof(IndiceCodice),0);
         IndiceCodice k;
         k.chiave = -1;
         k.valore = -1;
         fwrite(&k,sizeof(IndiceCodice),1,f);
         fclose(f);
         
         FILE *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);
         
         f = fopen(ingressoAperto,"r+b");
         fseek(f,posizione * sizeof(Ingressi),0);
         Ingressi e;
         
         strcpy(e.cognome,"VUOTO");
         strcpy(e.nome,"VUOTO");
         strcpy(e.data_ingresso,"VUOTO");
         strcpy(e.ora_ingresso,"VUOTO");
         strcpy(e.ora_uscita,"VUOTO");
         e.numero = -1;
         e.cancellato = 1;
         
         fwrite(&e,sizeof(Ingressi),1,f);
         fclose(f);
         
         printf("\nIngresso cancellato con successo\n");
      }
      else
      {
         printf("\n\nIngresso NON trovato\n\n");
         fclose(f);
      }
   }
}

void visualizzaIngresso(Ingressi e)
{
   printf("\n");
   printf("Numero: %d\n", e.numero);
   printf("Nome: %s\n", e.nome);
   printf("Cognome: %s\n", e.cognome);
   printf("Data ingresso: %s\n", e.data_ingresso);
   printf("Ora ingresso: %s\n", e.ora_ingresso);
   printf("Ora uscita: %s\n", e.ora_uscita);
   printf("\n");
}

int cerca_ingresso()
{
   char cognome[20];
   FILE *f;
   Indice cognomeLetto;
   
   printf("Cognome: ");
   scanf("%s", &cognome);
   
   f = fopen(indiceAperto,"rb");
   fread(&cognomeLetto,sizeof(Indice),1,f);
   
   while(!feof(f) && strcmp(cognomeLetto.chiave,cognome) != 0)
   {
      fread(&cognomeLetto,sizeof(Indice),1,f);
   }
   fclose(f);
   
   if(feof(f))
   {
      return -1;
   }
   else
   {
      IndiceCodice x;
      f = fopen(indiceCodiciAperto,"rb");
      
      int aCaso;
      int posizione = RicercaBin(indiceCodiciAperto,max,cognomeLetto.valore,&aCaso);
      if(posizione > -1)
      {
         f = fopen(ingressoAperto,"rb");
         fseek(f,posizione * sizeof(Ingressi),0);
         Ingressi e;
         fread(&e,sizeof(Ingressi),1,f);
         fclose(f);
         visualizzaIngresso(e);
         return posizione;
      }
      else
      {
         return -1;
      }
   }
}

void leggi_fileingressi()
{
   FILE *f;
   f = fopen(ingressoAperto,"rb");
   
   int i;
   Ingressi e;
   
   for(i=0;i<max;i++)
   {
      fread(&e,sizeof(Ingressi),1,f);
      if(e.cancellato != 1)
      {
         visualizzaIngresso(e);
      }
   }
}
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,283
11,433
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Codice
Codice:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define max 20

struct Ingressi
{
   int numero;
   char nome[20];
   char cognome[20];
   char data_ingresso[20];
   char ora_ingresso[20];
   char ora_uscita[20];
   int cancellato;
};

struct Indice
{
   char chiave[30];
   int valore;
};

struct IndiceCodice
{
   int chiave;
   int valore;
};

int RicercaBin(char i[],int n,int searched,int *inIndice);
void OrdinaIndiceCodici(IndiceCodice in[],int n);
void crea_fileingressi();
void apri_fileingressi();
void inserisci_ingresso();
void visualizzaIngresso(Ingressi e);
void modifica_ingresso();
void elimina_ingresso();
int cerca_ingresso();
void leggi_fileingressi();

char ingressoAperto[20];
char indiceAperto[20];
char indiceCodiciAperto[20];

int main()
{
   int scelta;
   strcpy(ingressoAperto,"VUOTO");
   strcpy(indiceCodiciAperto,"VUOTO");
   
   do
   {
      system("CLS");
      
      printf("\t AREA INGRESSI AL CENTRO \t\n\n");
      
      printf("\t1- Crea nuovo file ingressi\n");
      printf("\t2- Apri file ingressi\n");
      printf("\t3- Inserisci ingresso\n");
      printf("\t4- Modifica ingresso\n");
      printf("\t5- Cancella ingresso\n");
      printf("\t6- Cerca ingresso\n");
      printf("\t7- Visualizza file ingressi\n");
      printf("\t8- Esci dal programma\n");
      
      printf("\nCosa vuoi fare? : ");
      scanf("%d", &scelta);
      
      int e1;
      switch(scelta)
      {
         case 1:
            crea_fileingressi();
            break;
         case 2:
            apri_fileingressi();
            break;
         case 3:
            inserisci_ingresso();
            break;
         case 4:
            modifica_ingresso();
            break;
         case 5:
            elimina_ingresso();
            break;
         case 6:
            
            e1 = cerca_ingresso();
            if(e1 == -1)
            {
               printf("\nIngresso non trovato\n");
            }
            break;
         case 7:
            leggi_fileingressi();
            break;
      }
      system("PAUSE");
   }while(scelta != 8);
   
   return 0;   
}

void OrdinaIndiceCodici(IndiceCodice in[],int n)
{
   IndiceCodice temp;
   int top;
   int scambio;
   int ultimoscambio;
   int i;
   top = 0;
   do
   {
      scambio = 0;
      for(i = n-1;i > top; i--)
      {
         if(in[i].chiave < in[i - 1].chiave)
         {
            temp = in[i];
            in[i] = in[i - 1];
            in[i - 1] = temp;
            
            scambio = 1;
            ultimoscambio = i;
         }
      }
      top = ultimoscambio;
   }while(scambio != 0);
}

int RicercaBin(char i[],int n,int cercato,int *inIndice)
{
   int left = 0;
   int mid;
   int right = n-1;
   FILE *indice;
   indice = fopen(i,"rb");
   do
   {
      mid = (left + right)/2;
      
      IndiceCodice x;
      fseek(indice,mid * sizeof(IndiceCodice),0);
      fread(&x,sizeof(IndiceCodice),1,indice);
      
      if(cercato == x.chiave)
      {
         //esci = 1;
         *inIndice = mid;
         fclose(indice);
         return x.valore; //restituisco la posizione nel file corso
      }
      else
      {
         if(cercato > x.chiave)
         {
            left = mid + 1;
         }
         else
         {
            right = mid - 1;
         }
      }
   
   }while(left <= right);
   *inIndice = -1;
   return -1;
}

void crea_fileingressi()
{
   system("CLS");
   FILE *f;
   char nomeFile[20];
   char nomeIndice[20];
   char nomeIndiceCod[20];
   
   printf("Inserire il nome del file: ");
   scanf("%s", &nomeFile);
   
   Ingressi e;
   
   strcpy(e.nome,"VUOTO");
   strcpy(e.cognome,"VUOTO");
   strcpy(e.data_ingresso,"VUOTO");
   strcpy(e.ora_ingresso,"VUOTO");
   strcpy(e.ora_uscita,"VUOTO");
   e.numero = -1;
   e.cancellato = 1;
   
   strcpy(nomeIndice,nomeFile);
   strcat(nomeIndice,".txt");
   strcpy(nomeIndiceCod,nomeIndice);
   strcat(nomeIndiceCod,"e");
   
   strcat(nomeFile,".date");
   
   f = fopen(nomeFile,"rb");
   
   if(f == NULL)
   {
      fclose(f);
      f = fopen(nomeFile,"wb");
      int i;
      for(i=0;i<max;i++)
      {
         fwrite(&e,sizeof(Ingressi),1,f);
      }
      fclose(f);
      printf("File scritto correttamente!\n");
      
      FILE *indice;
      Indice x;
      
      strcpy(x.chiave,"VUOTO");
      
      indice = fopen(nomeIndice,"wb");
      for(i=0;i<max;i++)
      {
         x.valore = i;
         fwrite(&x,sizeof(Indice),1,indice);
      }
      fclose(indice);
      printf("File indice del corso scritto correttamente\n");
      
      indice = fopen(nomeIndiceCod,"wb");
      IndiceCodice y;
      y.chiave = -1;
      y.valore = -1;
      for(i=0;i<max;i++)
      {
         fwrite(&y,sizeof(IndiceCodice),1,indice);
      }
      fclose(indice);
   }
   else
   {
      char s;
      printf("File già esistente. Vuoi sovrascriverlo? (s/n): ");
      scanf("%s", &s);
      if(s == 's' || s == 'S')
      {
         f = fopen(nomeFile,"wb");
         int i;
         for(i=0;i<max;i++)
         {
            fwrite(&e,sizeof(Ingressi),1,f);
         }
         fclose(f);
         printf("File scritto correttamente!\n");
         
         FILE *indice;
         Indice x;
         
         strcpy(x.chiave,"VUOTO");
         
         indice = fopen(nomeIndice,"wb");
         for(i=0;i<max;i++)
         {
            x.valore = i;
            fwrite(&x,sizeof(Indice),1,indice);
         }
         fclose(indice);
         printf("File indice del corso scritto correttamente\n");
         
         indice = fopen(nomeIndiceCod,"wb");
         IndiceCodice y;
         y.chiave = -1;
         y.valore = -1;
         for(i=0;i<max;i++)
         {
            fwrite(&y,sizeof(IndiceCodice),1,indice);
         }
         fclose(indice);
      }
   }
   printf("Operazione completata\n");
}

void apri_fileingressi()
{
   char nomeFile[20];
    char nomeIndice[20];
    char nomeIndiceCod[20];
    FILE *f;
    FILE *fI;
    do
    {
        /**/

        printf("Nome del file da aprire: ");
        scanf("%s", &nomeFile);

        strcpy(nomeIndice,nomeFile);
        strcat(nomeIndice,".txt");
        strcat(nomeFile,".date");
        strcpy(nomeIndiceCod,nomeIndice);
        strcat(nomeIndiceCod,"e");

        f = fopen(nomeFile,"r+b");
        if(f == NULL)
        {
            printf("Errore nell'apertura del file\n");
        }
        else
        {
            printf("File aperto correttamente!\n");
            strcpy(ingressoAperto,nomeFile);

            fI = fopen(nomeIndice,"r+b");
            if(fI == NULL)
            {
                printf("Errore nell'apertura dell'indice\n");
            }
            else
            {
                strcpy(indiceAperto,nomeIndice);
                printf("Indice Aperto correttamente!\n");
                fclose(fI);
            }


            fI = fopen(nomeIndiceCod,"r+b");
            if(fI == NULL)
            {
                printf("Errore nell'apertura dell'indice\n");
            }
            else
            {
                strcpy(indiceCodiciAperto,nomeIndiceCod);
                printf("Indice Aperto correttamente!\n");
                fclose(fI);
            }
        }
    }while(f == NULL || fI == NULL);
    fclose(f);
}

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");
}

void modifica_ingresso()
{
   char cognome[20];
   FILE *f;
   Indice cognLetto;
   
   printf("Cognome: ");
   scanf("%s", &cognome);
   
   f = fopen(indiceAperto,"r+b");
   fread(&cognLetto,sizeof(Indice),1,f);
   
   int posCogn = 0;
   while(!feof(f) && strcmp(cognLetto.chiave,cognome) != 0)
   {
      fread(&cognLetto,sizeof(Indice),1,f);
      posCogn++;
   }
   
   if(feof(f))
   {
      printf("\n\nIngresso non trovato\n\n");
      fclose(f);
   }
   else
   {
      Indice x;
      printf("Inserire nuovo cognome: ");
      scanf("%s", &x.chiave);
      x.valore = cognLetto.valore;
      
      fseek(f,posCogn * sizeof(Indice),0);
      fwrite(&x,sizeof(Indice),1,f);
      fclose(f);
      
      f = fopen(indiceCodiciAperto,"r+b");
      
      int nellIndice;
      int posizione = RicercaBin(indiceCodiciAperto,max,cognLetto.valore,&nellIndice);
      if(posizione > -1)
      {
         f = fopen(ingressoAperto,"r+b");
         fseek(f,posizione * sizeof(Ingressi),0);
         
         Ingressi e;
         fread(&e,sizeof(Ingressi),1,f);
         visualizzaIngresso(e);
         
         printf("\nInserire i nuovi dati: \n");
         strcpy(e.cognome, x.chiave);
         
         printf("\nNumero: ");
         scanf("%d", &e.numero);
         
         printf("\nNome: ");
         scanf("%s", &e.nome);
         
         printf("\nData ingresso: ");
         scanf("%s", &e.data_ingresso);
         
         printf("\nOra ingresso: ");
         scanf("%s", &e.ora_ingresso);
         
         printf("\nOra uscita: ");
         scanf("%s", &e.ora_uscita);
         
         e.numero = cognLetto.valore;
         e.cancellato = 0;
         
         fseek(f,posizione * sizeof(Ingressi),0);
         fwrite(&e,sizeof(Ingressi),1,f);
         fclose(f);
         
         printf("\n\nIngresso aggiornato con successo\n");
      }
      else
      {
         printf("\n\nIngresso NON trovato\n\n");
         fclose(f);
      }
   }
}

void elimina_ingresso()
{
   char cognome[20];
   FILE *f;
   Indice cognLetto;
   
   printf("Cognome: ");
   scanf("%s", &cognome);
   
   f = fopen(indiceAperto,"r+b");
   fread(&cognLetto,sizeof(Indice),1,f);
   
   int posCogn = 0;
   while(!feof(f) && strcmp(cognLetto.chiave,cognome) != 0)
   {
      fread(&cognLetto,sizeof(Indice),1,f);
      posCogn++;
   }
   
   if(feof(f))
   {
      printf("\n\nIngresso non trovato\n\n");
      fclose(f);
   }
   else
   {
      Indice x;
      strcpy(x.chiave,"VUOTO");
      x.valore = posCogn;
      
      fseek(f,posCogn * sizeof(Indice),0);
      fwrite(&x,sizeof(Indice),1,f);
      fclose(f);
      
      f = fopen(indiceCodiciAperto,"r+b");
      
      int nellIndice;
      int posizione = RicercaBin(indiceCodiciAperto,max,cognLetto.valore,&nellIndice);
      if(posizione > -1)
      {
         fseek(f,nellIndice * sizeof(IndiceCodice),0);
         IndiceCodice k;
         k.chiave = -1;
         k.valore = -1;
         fwrite(&k,sizeof(IndiceCodice),1,f);
         fclose(f);
         
         FILE *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);
         
         f = fopen(ingressoAperto,"r+b");
         fseek(f,posizione * sizeof(Ingressi),0);
         Ingressi e;
         
         strcpy(e.cognome,"VUOTO");
         strcpy(e.nome,"VUOTO");
         strcpy(e.data_ingresso,"VUOTO");
         strcpy(e.ora_ingresso,"VUOTO");
         strcpy(e.ora_uscita,"VUOTO");
         e.numero = -1;
         e.cancellato = 1;
         
         fwrite(&e,sizeof(Ingressi),1,f);
         fclose(f);
         
         printf("\nIngresso cancellato con successo\n");
      }
      else
      {
         printf("\n\nIngresso NON trovato\n\n");
         fclose(f);
      }
   }
}

void visualizzaIngresso(Ingressi e)
{
   printf("\n");
   printf("Numero: %d\n", e.numero);
   printf("Nome: %s\n", e.nome);
   printf("Cognome: %s\n", e.cognome);
   printf("Data ingresso: %s\n", e.data_ingresso);
   printf("Ora ingresso: %s\n", e.ora_ingresso);
   printf("Ora uscita: %s\n", e.ora_uscita);
   printf("\n");
}

int cerca_ingresso()
{
   char cognome[20];
   FILE *f;
   Indice cognomeLetto;
   
   printf("Cognome: ");
   scanf("%s", &cognome);
   
   f = fopen(indiceAperto,"rb");
   fread(&cognomeLetto,sizeof(Indice),1,f);
   
   while(!feof(f) && strcmp(cognomeLetto.chiave,cognome) != 0)
   {
      fread(&cognomeLetto,sizeof(Indice),1,f);
   }
   fclose(f);
   
   if(feof(f))
   {
      return -1;
   }
   else
   {
      IndiceCodice x;
      f = fopen(indiceCodiciAperto,"rb");
      
      int aCaso;
      int posizione = RicercaBin(indiceCodiciAperto,max,cognomeLetto.valore,&aCaso);
      if(posizione > -1)
      {
         f = fopen(ingressoAperto,"rb");
         fseek(f,posizione * sizeof(Ingressi),0);
         Ingressi e;
         fread(&e,sizeof(Ingressi),1,f);
         fclose(f);
         visualizzaIngresso(e);
         return posizione;
      }
      else
      {
         return -1;
      }
   }
}

void leggi_fileingressi()
{
   FILE *f;
   f = fopen(ingressoAperto,"rb");
   
   int i;
   Ingressi e;
   
   for(i=0;i<max;i++)
   {
      fread(&e,sizeof(Ingressi),1,f);
      if(e.cancellato != 1)
      {
         visualizzaIngresso(e);
      }
   }
}



ok hai postato del codice ma continui a non dare dettagli.
I file che leggi cosa sono?
Perchè leggi dei file?

E poi x la tua funzione sicuramente tu all'ingresso saprai chi sta entrando(cioè il nome del socio).
Prendendo questo nome dovrai controllare nei tuoi file o che se questo tizio ha pagato tutte le quote di iscrizione al club
 

Andrea Trench Manisi

Nuovo Utente
5
0
ok hai postato del codice ma continui a non dare dettagli.
I file che leggi cosa sono?
Perchè leggi dei file?

E poi x la tua funzione sicuramente tu all'ingresso saprai chi sta entrando(cioè il nome del socio).
Prendendo questo nome dovrai controllare nei tuoi file o che se questo tizio ha pagato tutte le quote di iscrizione al club

Leggo dei file perchè li sopra memorizzo i dati. Nello specifico il file .date memorizza tutti i dati come da struct Ingressi, mentre gli altri due sono file indice degl ingressi (come i sommari dei libri) e contengono il cognome del socio che fa l'ingresso e un numero.

Io a livello teorico so come si potrebbe fare ma in pratica no.....
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,283
11,433
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Leggo dei file perchè li sopra memorizzo i dati. Nello specifico il file .date memorizza tutti i dati come da struct Ingressi, mentre gli altri due sono file indice degl ingressi (come i sommari dei libri) e contengono il cognome del socio che fa l'ingresso e un numero.

Io a livello teorico so come si potrebbe fare ma in pratica no.....

in pratica devi prendere il nome del socio e leggere tutti i dati che sono a suo nome tra cui i pagamenti e se i pagamenti sono regolarizzati allora può entrare.
Sostanzialmente devi fare una funzione che restituisce un valore boolean true o false
 

Andrea Trench Manisi

Nuovo Utente
5
0
in pratica devi prendere il nome del socio e leggere tutti i dati che sono a suo nome tra cui i pagamenti e se i pagamenti sono regolarizzati allora può entrare.
Sostanzialmente devi fare una funzione che restituisce un valore boolean true o false

Ti è possibile spiegarmi meglio, magari trasformandomi quel codice che ho pubblicato??
in modo da capire concretamente come fare?
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,283
11,433
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
Ti è possibile spiegarmi meglio, magari trasformandomi quel codice che ho pubblicato??
in modo da capire concretamente come fare?

ti scrivo dello pseudocodice perchè non uso C ma uso Java

fai una roba di questo tipo:
Codice:
public boolean AccessoSocio(String nomesocio){

fai la lettura del tuo file 
gli passi come parametro il nomesocio(che è colui che sta entrando)
tramite il nome verifichi il pagamento
if(importodapagare = 0) {
return true;
}
else 
return false;
 

Andrea Trench Manisi

Nuovo Utente
5
0
ti scrivo dello pseudocodice perchè non uso C ma uso Java

fai una roba di questo tipo:
Codice:
public boolean AccessoSocio(String nomesocio){

fai la lettura del tuo file 
gli passi come parametro il nomesocio(che è colui che sta entrando)
tramite il nome verifichi il pagamento
if(importodapagare = 0) {
return true;
}
else 
return false;

Ok ma in che senso lo "passo per parametro"??
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Personalmente (non sò se è cosi anche nel codice, troppo lungo da leggere senza commenti) farei un'array di strutture contenenti i nominativi dei soci. Ogni nominativo è composto da una struttura con tutti i vari dati (entrate, uscite, ecc) e un boolean per indicare se i pagamenti sono in regola o no. Come diceva skills, cerchi nelle varie posizioni dell'array il nominativo (che passi come parametro) e da li ricavi lo stato del pagamento. Spero di essere stato chiaro (come no :asd:)

P.S: I commenti! :giudice:
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili