ragazzi ho un problema..questo è un programma per la gestione dei voli:
dopo aver creato piu di un volo se uso la funzione modifica mi modifica sempre il primo volo, se uso al funzione elimina mi elimina sempre l'ultimo....come posso fare???
ecco il codice:
/* Direttive Include */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Definizione tipo delle variabili */
typedef struct
{int codice_volo;
char partenza[20];
char destinazione[20];
int ora_partenza;
int minuti_partenza;
int data_partenza;
int mese_partenza;
int ora_arrivo;
int minuti_arrivo;
int data_arrivo;
int mese_arrivo;
int classe1_disp;
int classe1_sold;
int coach_disp;
int coach_sold;
} voli_t;
/* Eventuali Costanti */
#define max_voli 25 /* Massimo di voli memorizzabili */
/* Dichiarazione funzioni */
/* Mostra il menu di scelta e restituisce la funzione scelta */
int menu (int voliattuali);
/* Visualizza i voli attualmente registrati */
void visualizza (int voliesistenti, voli_t voli[]);
/* Registra un nuovo volo */
void registra (int *posto, voli_t voli[]);
/* Modifica una registrazione */
void modifica (int voliesistenti, voli_t voli[]);
/* Elimina una registrazione */
void elimina (int *voliesistenti, voli_t voli[]);
/* Main */
int main (void)
{
/* Variabili */
voli_t database[max_voli]; /* Input/Output - Vettore che contiene tutte le informazioni sui voli */
FILE *file_voli; /* Input/Output - File che contiene tutti i dati */
int operazione = 0; /* Input - Operazione da eseguire */
int voli_attuali = 0; /* Di programma - Valori attualmente memorizzati nel vettore */
int read_status = 1; /* Di programma - Controlla la riuscita del fread */
int counter = 0; /* Variabile contatore */
/* Apertura del file, lettura dei valori */
printf ("Caricamento...\n");
file_voli = fopen ("voli","rb");
if (file_voli == NULL) /* Se il file non esiste avvisa l'utente, il file sarà creato in seguito */
printf ("File di database non trovato, nessun dato caricabile.\n");
if (file_voli != NULL) /* Se il file esiste, carica i dati nel database */
{
do
{
read_status = fread (&database[counter], sizeof (voli_t), 1, file_voli);
++counter;
}
while (read_status == 1);
voli_attuali = counter - 1; /* I voli caricati saranno pari al contatore - 1 */
printf ("Voli caricati: %d \n\n\n", voli_attuali);
fclose (file_voli); /* Chiude il file in modo che possa essere riaperto in scrittura in seguito */
}
/* Esecuzione del programma vero e proprio */
do
{
operazione = menu(voli_attuali); /* Mostra il menu */
switch (operazione)
{
case 1: /* Visualizza i voli registrati */
visualizza (voli_attuali, database);
break;
case 2: /* Registra un nuovo volo */
registra (&voli_attuali, database);
break;
case 3: /* Modifica un valore registrato */
modifica (voli_attuali, database);
break;
case 4: /* Elimina un volo */
elimina (&voli_attuali, database);
break;
}
}
while (operazione != 5);
counter = 0; /* Riazzera il contatore */
file_voli = fopen ("voli","wb"); /* Apre il file in scrittura */
printf ("\n\nSalvataggio informazioni in corso...\n");
while (counter < voli_attuali)
{
fwrite (&database[counter], sizeof (voli_t), 1, file_voli); /* Scrive sul file la tabella dei voli */
++counter;
}
printf ("Salvataggio dati effettuato con successo.\n");
printf ("Voli salvati: %d \n", counter);
fclose (file_voli);
/* Fine del programma */
system ("pause");
return (0);
}
/* Definizione funzioni */
/* Mostra il menu di scelta e restituisce la funzione scelta */
int menu (int voliattuali)
{
int funzione; /* Operazione scelta */
printf ("\n\n============================================ ==\n");
printf ("|| GESTORE VOLI ||\n");
printf ("==============================================\n ");
printf ("Voli attualmente memorizzati: %d \n", voliattuali);
printf ("(1) Visualizzare la lista dei voli registrati.\n");
printf ("(2) Registrare un nuovo volo.\n");
printf ("(3) Modificare una registrazione.\n");
printf ("(4) Eliminare una registrazione.\n");
printf ("(5) Salvare tutto e uscire dal programma.\n");
printf ("Selezionare una funzione: ");
scanf ("%d", &funzione);
return (funzione);
}
/* Visualizza i voli attualmente registrati */
void visualizza (int voliesistenti, voli_t voli[])
{
int counter = 0; /* Contatore */
if (voliesistenti == 0)
printf ("Nessun volo salvato.\n");
while (counter < voliesistenti)
{
printf ("\n\nVolo numero %d - Codice %d\n", counter+1, voli[counter].codice_volo);
printf ("Partenza da %s alle ore %d:%d del %d/%d \n", voli[counter].partenza, voli[counter].ora_partenza, voli[counter].minuti_partenza, voli[counter].data_partenza, voli[counter].mese_partenza);
printf ("Arrivo a %s alle ore %d:%d del %d/%d\n", voli[counter].destinazione, voli[counter].ora_arrivo, voli[counter].minuti_arrivo, voli[counter].data_arrivo, voli[counter].mese_arrivo);
printf ("Prima classe: %d disponibili e %d liberi\n", voli[counter].classe1_disp, voli[counter].classe1_sold);
printf ("Turistica: %d disponibili e %d liberi\n", voli[counter].coach_disp, voli[counter].coach_sold);
++counter;
}
}
/* Registra un nuovo volo */
void registra (int *posto, voli_t voli[])
{
printf ("\nCodice del volo: ");
scanf ("%d", &voli[*posto].codice_volo);
printf ("Citta' di partenza: ");
scanf ("%s", voli[*posto].partenza);
printf ("Orario della partenza:\nOre: ");
scanf ("%d", &voli[*posto].ora_partenza);
printf ("Minuti: ");
scanf ("%d", &voli[*posto].minuti_partenza);
printf ("Data della partenza:\nGiorno: ");
scanf ("%d", &voli[*posto].data_partenza);
printf ("Mese: ");
scanf ("%d", &voli[*posto].mese_partenza);
printf ("Citta' di destinazione: ");
scanf ("%s", voli[*posto].destinazione);
printf ("Orario di arrivo:\nOre: ");
scanf ("%d", &voli[*posto].ora_arrivo);
printf ("Minuti: ");
scanf ("%d", &voli[*posto].minuti_arrivo);
printf ("Data di arrivo:\nGiorno: ");
scanf ("%d", &voli[*posto].data_arrivo);
printf ("Mese: ");
scanf ("%d", &voli[*posto].mese_arrivo);
printf ("Posti disponibili in prima classe: ");
scanf ("%d", &voli[*posto].classe1_disp);
printf ("Posti venduti in prima classe: ");
scanf ("%d", &voli[*posto].classe1_sold);
printf ("Posti disponibili in classe turistica: ");
scanf ("%d", &voli[*posto].coach_disp);
printf ("Posti venduti in classe turistica: ");
scanf ("%d", &voli[*posto].coach_sold);
printf ("\nVolo registrato con successo.\n");
*posto += 1; /* Incrementa di uno il numero di voli attuali e vi registra il nuovo dato */
}
siccome il codice supera i caratteri consentiti continuo nel prossimo post....