Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define M 30
- typedef struct {
- char tratta[M];
- char partenza[M];
- char destinazione[M];
- char data[M];
- char orapartenza[M];
- char oraarrivo[M];
- char ritardo[M];
- } cor;
- typedef enum {date, partenza, capolinea, ritardo, rittot, fine} comando_e;
- void stampadate(int n, cor corsa[n])
- {
- char datap[M], dataf[M];
- int ding=0, dinm=0, dina=0, dfing=0, dfinm=0, dfina=0, dtmp=0, mtmp=0, atmp=0, datatmp=0, d1=0, d2=0, flagtrovato=0, i=0;
- printf("Inserisci data di partenza e di fine (in formato gg/mm/aaaa):\n");
- scanf("%s", datap);
- scanf("%s", dataf);
- sscanf(datap, "%d/%d/%d", &ding, &dinm, &dina);
- sscanf(dataf, "%d/%d/%d", &dfing, &dfinm, &dfina);
- d1=ding+(100*dinm)+(10000*dina); //converto le date con cui lavoro in formato intero aaaammgg, cioè di ordine di grandezza pari a 8
- d2=dfing+(100*dfinm)+(10000*dfina);
- for (i=0; i<n; i++)
- {
- sscanf(corsa[i].data, "%d/%d/%d", &atmp, &mtmp, &dtmp);
- datatmp=dtmp+(100*mtmp)+(10000*atmp);
- if (datatmp>=d1 && datatmp<=d2) //controllo per ogni tratta se la sua data è compresa fra quelle richieste
- {
- printf("%s\n", corsa[i].tratta);
- flagtrovato=1;
- }
- }
- if (flagtrovato==0)
- printf("Nessuna corsa trovata nell'intervallo di date richiesto.\n");
- return;
- }
- void stampapartenza(int n, cor corsa[n])
- {
- int i;
- char fermatain[M];
- printf("Inserisci la fermata iniziale delle corse richieste\n");
- scanf("%s", fermatain);
- for (i=0; i<n; i++)
- {
- if ((strcmp(fermatain, corsa[i].partenza))==0)
- {
- printf("%s\n", corsa[i].tratta);
- }
- }
- return;
- }
- void stampacapolinea(int n, cor corsa[n])
- {
- int i;
- char capol[M];
- printf("Inserisci il capolinea che ti interessa\n");
- scanf("%s", capol);
- for (i=0; i<n; i++)
- {
- if ((strcmp(capol, corsa[i].destinazione))==0)
- printf("%s\n", corsa[i].tratta);
- }
- return;
- }
- void stamparitardo (int n, cor corsa[n])
- {
- int i, ding=0, dinm=0, dina=0, dfing=0, dfinm=0, dfina=0, d1=0, d2=0, datatmp=0, atmp=0, gtmp=0, mtmp=0;
- char datap[M], dataf[M];
- printf("Inserisci l'intervallo di date nelle quali ti interessa vedere il ritardo delle corse\n");
- scanf("%s", datap);
- scanf("%s", dataf);
- sscanf(datap, "%d:%d:%d", &ding, &dinm, &dina);
- sscanf(dataf, "%d:%d:%d", &dfing, &dfinm, &dfina);
- d1=ding+(100*dinm)+(10000*dina);
- d2=dfing+(100*dfinm)+(10000*dfina);
- for (i=0; i<n; i++)
- {
- sscanf(corsa[i].data, "%d:%d:%d", &atmp, &mtmp, >mp);
- datatmp=gtmp+(100*mtmp)+(10000*atmp);
- if ((datatmp>=d1 && datatmp<=d2) && (corsa[i].ritardo!=0))
- printf("%s\n", corsa[i].tratta);
- else if (corsa[i].ritardo==0)
- printf("Il mezzo e' arrivato in orario.\n");
- }
- return;
- }
- void stamparittot(int n, cor corsa[n])
- {
- char trattatmp[M];
- int i=0, rtotale=0;
- printf("Inserisci il codice di tratta che ti interessa\n");
- scanf("%s", trattatmp);
- for(i=0; i<n; i++)
- {
- if (((strcmp(trattatmp, corsa[i].tratta))==0) && (corsa[i].ritardo!=0))
- {
- rtotale=atoi(corsa[i].ritardo)+rtotale;
- }
- }
- if (rtotale!=0)
- printf("Ritardo totale pari a %d;\n", rtotale);
- else printf("Ritardo totale nullo.\n");
- return;
- }
- int main()
- {
- FILE *fp;
- cor corsa[M];
- comando_e com;
- int n=0, flagc=0, flag=0, i=0;
- char input[M];
- if ((fp=fopen("log.txt","r"))==NULL)
- {
- printf("Errore apertura file.\n");
- return -1;
- }
- fscanf(fp, "%d", &n);
- for (i=0; i<n; i++)
- {
- fscanf(fp, "%s%s%s%s%s%s%s", corsa[i].tratta, corsa[i].partenza, corsa[i].destinazione, corsa[i].data, corsa[i].orapartenza, corsa[i].oraarrivo, corsa[i].ritardo);
- }
- fclose(fp);
- do {
- printf("Cosa vorresti fare? Digitare le parole fra virgolette per attivare le corrispondenti operazioni.\nPer elencare corse partite in un intervallo di date 'date';\nper elencare corse partite da una certa fermata 'partenza';\nper elencare le corse che fanno capolinea in una fermata 'capolinea';\nper elencare le corse che hanno incontrato ritardo in un intervallo di date 'ritardo';\nper visualizzare il ritardo totale delle corse su una tratta 'rittot';\nper uscire, digita 'fine'.\n");
- scanf("%s", input);
- if ((strcmp(input, "date"))==0)
- com=date;
- if ((strcmp(input, "partenza"))==0)
- com=partenza;
- if ((strcmp(input, "capolinea"))==0)
- com=capolinea;
- if ((strcmp(input, "ritardo"))==0)
- com=ritardo;
- if ((strcmp(input, "rittot"))==0)
- com=rittot;
- if ((strcmp(input, "fine"))==0)
- com=fine;
- switch (com)
- {
- case date:
- {
- stampadate(n, corsa);
- flagc=1; //utilizzo flagc per controllare se il comando richiesto è effettivamente presente nella lista di quelli concessi
- break;
- }
- case partenza:
- {
- stampapartenza(n, corsa);
- flagc=1;
- break;
- }
- case capolinea:
- {
- stampacapolinea(n, corsa);
- flagc=1;
- break;
- }
- case ritardo:
- {
- stamparitardo(n, corsa);
- flagc=1;
- break;
- }
- case rittot:
- {
- stamparittot(n, corsa);
- flagc=1;
- break;
- }
- case fine:
- {
- flagc=1;
- flag=1;
- }
- }
- if (flagc==0)
- {
- printf("Comando non riconosciuto dal sistema. Si prega di inserire un comando presente nella lista iniziale la prossima volta.\n");
- return -2;
- }
- }
- while(flag!=1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement