vuoi
o PayPal
tutte le volte che vuoi
TRACCIA
Sia dato in input un file di testo ElencoTreni.txt. Ciascuna riga del file è formata dai seguenti componenti : Codice
del treno, Città di partenza, Ora di partenza, Città di arrivo, Ora di arrivo, Prezzo.
Un esempio di riga è :
AB512 Milano 18:30 Torino 22:30 15.5
Si costruisca un programma in linguaggio C che utilizzi i seguenti moduli (con Treni un tipo di record):
void mostra(Treni treno) //Mostra a video un singolo record
void visualizza(FILE* puntatore) //Mostra a video tutti i record
void mostraPartenze(FILE* puntatore, char partenza[]) //Mostra a video i record con la partenza specificata
void mostraPrezzo(FILE* puntatore, float massimo, float minimo) //Mostra a video i record con il prezzo
compre fra minimo e massimo
Fornire inoltre un messaggio di errore nel caso in cui non ci sia alcun record da rappresentare.
SVOLGIMENTO
File main.c
#include <stdio.h>
#include <stdlib.h>
#include "datiglobali.h"
#include "funzioni.h"
int main()
{ FILE* puntatore;
int j=1; //Variabile usata per la selezione del menù
if ((puntatore=fopen("ElencoTreni.txt", "r"))==NULL) //Scrittura di controllo del file; se non è possibile aprire il
file, il programma da in output un errore
{ printf("Errore nell'apertura del file.\n");
system("pause");
}
else
{ while ((j>=1) && (j<=3))
{ system("cls"); //Pulisce lo schermo
printf("Cosa vuoi fare?\n1)Visualizza il file;\n2)Visualizza determinate
partenze;\n3)Visualizza treni in un dato range di prezzi;\n4)Uscita;\nSelezione: ");
scanf("%d", &j);
if (j==1)
{ system("cls");
rewind(puntatore); //Fa puntare il puntatore alla prima riga o primo
record del File o Array a cui punta visualizza(puntatore);
system("pause"); //Mette in pausa il programma . Serve per far
leggere i vari dati e poi continuare quando si vuole
}
else
{ if (j==2)
{ system("cls");
rewind(puntatore);
input();
mostraPartenze(puntatore, citta);
system("pause");
}
else
{ if (j==3)
{ system("cls");
rewind(puntatore);
mostraPrezzo(puntatore,
inserimento_massimo(),inserimento_minimo()); system("pause");
}
else
{ if ((j<=0) || (j>=5))
{ printf("Errore. Puoi inserire solo 1, 2, 3 o 4.\n");
j=1; //Perchè se è un valore diverso da 1 ,2 e 3 , il
programma esce system("pause");
}
}
}
}
}
fclose(puntatore);
}
return 0;
}
File datiglobali.h
typedef struct Treni
{ char Codice[6];
char Partenza[20];
char OraP[6];
char Arrivo[20];
char OraA[6];
float Prezzo;
}Treni; //Definisce il tipo Treni da applicare a Treno
Treni Treno;
char citta[20];
File funzioni.c
#include <stdio.h>
#include "datiglobali.h"
void mostra(Treni treno1)
{ printf("%s %s %s %s %s %.2f\n", treno1.Codice, treno1.Partenza, treno1.OraP, treno1.Arrivo, treno1.OraA,
treno1.Prezzo);
return;
}
void input()
{ printf("Inserisci la città di partenza : ");
scanf("%s", &citta);
printf("\n");
return;
}
float inserimento_minimo()
{ float minimo;
printf("Inserisci il minimo: ");
scanf("%f", &minimo);
printf("\n");
return minimo;
}
float inserimento_massimo()
{ float massimo;
printf("Inserisci il massimo: ");
scanf("%f", &massimo);
printf("\n");
return massimo;
}
void visualizza(FILE* alfa)
{ fscanf(alfa, "%s%s%s%s%s%f\n", &Treno.Codice, &Treno.Partenza, &Treno.OraP, &Treno.Arrivo,
&Treno.OraA, &Treno.Prezzo);
while (!feof(alfa))
{ mostra(Treno);
fscanf(alfa, "%s%s%s%s%s%f\n", &Treno.Codice, &Treno.Partenza, &Treno.OraP, &Treno.Arrivo,
&Treno.OraA, &Treno.Prezzo);
}
return;
}
void mostraPartenze(FILE* alfa, char partenza[])
{ int i=0;
fscanf(alfa, "%s%s%s%s%s%f\n", &Treno.Codice, &Treno.Partenza, &Treno.OraP, &Treno.Arrivo,
&Treno.OraA, &Treno.Prezzo);
while(!feof(alfa))
{ if (strcmp(Treno.Partenza, partenza)==0)
{ i=1;
mostra(Treno);
}
fscanf(alfa, "%s%s%s%s%s%f\n", &Treno.Codice, &Treno.Partenza, &Treno.OraP,
&Treno.Arrivo, &Treno.OraA, &Treno.Prezzo);
}
if (i==0)
{ printf("Non ci sono treni in partenza da quella città.\n");
}
return;
}
void mostraPrezzo(FILE* alfa, float massimo, float minimo)
{ int i=0;
fscanf(alfa, "%s%s%s%s%s%f\n", &Treno.Codice, &Treno.Partenza, &Treno.OraP, &Treno.Arrivo,
&Treno.OraA, &Treno.Prezzo);
while(!feof(alfa))
{ if ((Treno.Prezzo>=minimo) && (Treno.Prezzo<=massimo))
{ i=1;
mostra(Treno);
}
fscanf(alfa, "%s%s%s%s%s%f\n", &Treno.Codice, &Treno.Partenza, &Treno.OraP,
&Treno.Arrivo, &Treno.OraA, &Treno.Prezzo);
}
if (i==0)
{ printf("Non ci sono treni con un prezzo in quel range.\n");
}