Allora, il programma vuole che si aprano in lettura due file di testo: voli.txt e prenotazioni.txt.
voli.txt:
AA201 BLQ MAD 150 55.80
AA202 MPX AMS 110 79.00
AA203 MAD OPO 40 23.00
AA204 AES BLQ 170 94.67
AA205 STN CDG 80 47.50
AA205 BLQ MUN 100 120.20
BA001 ARN BRU 90 134.99
BA201 FCO ATH 125 78.00
CC222 MAD CDG 110 45.14
CA234 EIN OSL 70 80.20
FV897 RIX DUB 200 150.32
CD111 DME BLQ 190 105.30
GG000 BCN RAK 180 100.23
prenotazioni.txt:
AA201 Mark_Riesling A 2 111.6
AA205 Carl_Donahue R 1 123.5
CD111 Eric_Carter R 3 821.34
BA001 Alice_McKenzie A 4 539.96
AA203 Sarah_Lansbury A 1 23.00
FV897 Katie_Smith R 2 781.66
Letti i due file bisogna restituire il numero di righe se non ricordo male. La richiesta era poi di strutturare il programma con date procedure e funzioni.
Adesso metto il gestioneVoli.h:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define dimCodVolo 6
#define dimNome 21
#define dimCodCitta 4
typedef struct
{
char codiceVolo [dimCodVolo];
char cittaPartenza [dimCodCitta];
char cittaArrivo [dimCodCitta];
int durata;
float costo;
} Volo;
Volo* leggiVoli(char fileName[], int *dim);
void stampaVolo(Volo v);
typedef struct
{
char codiceVolo [dimCodVolo];
char nomeCliente [dimNome];
char tipo;
int numeroBiglietti;
float costoTotale;
} Prenotazione;
Prenotazione* leggiPrenotazioni(char fileName[], int *dim);
void stampaPrenotazione(Prenotazione p);
Adesso metto il gestioneVoli.c:
#include "gestioneVoli.h"
Volo* leggiVoli(char fileName[], int *dim)
{
int cont, i;
FILE*fp;
Volo*result;
Volo temp;
fp=fopen(fileName,"r");
if(fp==NULL)
{
printf("Errore nella lettura dell'offerta voli\n");
exit (1);
}
cont=0;
while (fscanf(fp,"%s %s %s %d %f",temp.codiceVolo,temp.cittaPartenza,temp.cittaArrivo,&(temp.durata),&(temp.costo))==5)
cont++;
rewind(fp);
result=(Volo*)malloc(cont*sizeof(Volo));
for(i=0;i<cont;i++)
fscanf(fp,"%s %s %s %d %f",result.codiceVolo,result.cittaPartenza,result.cittaArrivo,&(result.durata),&(result.costo));
fclose(fp);
*dim=cont;
return result;
}
void stampaVolo(Volo v)
{
printf("\nVolo - Codice Volo: %s\t Codice Partenza: %s\t Codice Arrivo: %s\t Durata: %d\t Costo: %f",v.codiceVolo,v.cittaPartenza,v.cittaArrivo,v.durata,v.costo);
}
Prenotazione* leggiPrenotazioni(char fileName[], int *dim)
{
int cont, i;
FILE*fp;
Prenotazione*result;
Prenotazione temp;
fp=fopen(fileName,"r");
if(fp==NULL)
{
printf("Errore nella lettura delle prenotazioni\n");
exit (1);
}
cont=0;
while(fscanf(fp,"%s %s %c %d %f",temp.codiceVolo,temp.nomeCliente,&(temp.tipo),&(temp.numeroBiglietti),&(temp.costoTotale))==5)
cont++;
rewind(fp);
result=(Prenotazione*)malloc(cont*sizeof(Prenotazione));
for(i=0;i<cont;i++)
fscanf(fp,"%s %s %c %d %f",result.codiceVolo,result.nomeCliente,&(result.tipo),&(result.numeroBiglietti),&(result.costoTotale));
fclose(fp);
*dim=cont;
return result;
}
void stampaPrenotazione(Prenotazione p)
{
printf("\nPrenotazione - Codice Volo: %s\t Nome Cliente: %s\t Tipo: %c\t Numero Biglietti: %d\t Costo Totale: %f", p.codiceVolo,p.nomeCliente,p.tipo,p.numeroBiglietti,p.costoTotale);
}
Ed infine il main.c:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "gestioneVoli.h"
int main (void)
{
FILE*fp;
Prenotazione*p;
Volo*v;
Volo*voliCercati;
int i, dimP, dimV, res, dimC;
//test esercizio 1
p=leggiPrenotazioni("prenotazioni.txt",&dimP);
for(i=0;i<dimP;i++)
stampaPrenotazione(p[i]);
v=leggiVoli("voli.txt",&dimV);
for(i=0;i<dimV;i++)
stampaVolo(v[i]);
return 0;
}
Grazie in anticipo.