Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define M 30
  5. typedef struct {
  6. char tratta[M];
  7. char partenza[M];
  8. char destinazione[M];
  9. char data[M];
  10. char orapartenza[M];
  11. char oraarrivo[M];
  12. char ritardo[M];
  13. } cor;
  14. typedef enum {date, partenza, capolinea, ritardo, rittot, fine} comando_e;
  15. void stampadate(int n, cor corsa[n])
  16. {
  17. char datap[M], dataf[M];
  18. 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;
  19. printf("Inserisci data di partenza e di fine (in formato gg/mm/aaaa):\n");
  20. scanf("%s", datap);
  21. scanf("%s", dataf);
  22. sscanf(datap, "%d/%d/%d", &ding, &dinm, &dina);
  23. sscanf(dataf, "%d/%d/%d", &dfing, &dfinm, &dfina);
  24. d1=ding+(100*dinm)+(10000*dina); //converto le date con cui lavoro in formato intero aaaammgg, cioè di ordine di grandezza pari a 8
  25. d2=dfing+(100*dfinm)+(10000*dfina);
  26. for (i=0; i<n; i++)
  27. {
  28. sscanf(corsa[i].data, "%d/%d/%d", &atmp, &mtmp, &dtmp);
  29. datatmp=dtmp+(100*mtmp)+(10000*atmp);
  30. if (datatmp>=d1 && datatmp<=d2) //controllo per ogni tratta se la sua data è compresa fra quelle richieste
  31. {
  32. printf("%s\n", corsa[i].tratta);
  33. flagtrovato=1;
  34. }
  35. }
  36. if (flagtrovato==0)
  37. printf("Nessuna corsa trovata nell'intervallo di date richiesto.\n");
  38. return;
  39. }
  40. void stampapartenza(int n, cor corsa[n])
  41. {
  42. int i;
  43. char fermatain[M];
  44. printf("Inserisci la fermata iniziale delle corse richieste\n");
  45. scanf("%s", fermatain);
  46. for (i=0; i<n; i++)
  47. {
  48. if ((strcmp(fermatain, corsa[i].partenza))==0)
  49. {
  50. printf("%s\n", corsa[i].tratta);
  51. }
  52. }
  53. return;
  54. }
  55. void stampacapolinea(int n, cor corsa[n])
  56. {
  57. int i;
  58. char capol[M];
  59. printf("Inserisci il capolinea che ti interessa\n");
  60. scanf("%s", capol);
  61. for (i=0; i<n; i++)
  62. {
  63. if ((strcmp(capol, corsa[i].destinazione))==0)
  64. printf("%s\n", corsa[i].tratta);
  65. }
  66. return;
  67. }
  68. void stamparitardo (int n, cor corsa[n])
  69. {
  70. 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;
  71. char datap[M], dataf[M];
  72. printf("Inserisci l'intervallo di date nelle quali ti interessa vedere il ritardo delle corse\n");
  73. scanf("%s", datap);
  74. scanf("%s", dataf);
  75. sscanf(datap, "%d:%d:%d", &ding, &dinm, &dina);
  76. sscanf(dataf, "%d:%d:%d", &dfing, &dfinm, &dfina);
  77. d1=ding+(100*dinm)+(10000*dina);
  78. d2=dfing+(100*dfinm)+(10000*dfina);
  79. for (i=0; i<n; i++)
  80. {
  81. sscanf(corsa[i].data, "%d:%d:%d", &atmp, &mtmp, &gtmp);
  82. datatmp=gtmp+(100*mtmp)+(10000*atmp);
  83. if ((datatmp>=d1 && datatmp<=d2) && (corsa[i].ritardo!=0))
  84. printf("%s\n", corsa[i].tratta);
  85. else if (corsa[i].ritardo==0)
  86. printf("Il mezzo e' arrivato in orario.\n");
  87. }
  88. return;
  89. }
  90. void stamparittot(int n, cor corsa[n])
  91. {
  92. char trattatmp[M];
  93. int i=0, rtotale=0;
  94. printf("Inserisci il codice di tratta che ti interessa\n");
  95. scanf("%s", trattatmp);
  96. for(i=0; i<n; i++)
  97. {
  98. if (((strcmp(trattatmp, corsa[i].tratta))==0) && (corsa[i].ritardo!=0))
  99. {
  100. rtotale=atoi(corsa[i].ritardo)+rtotale;
  101. }
  102. }
  103. if (rtotale!=0)
  104. printf("Ritardo totale pari a %d;\n", rtotale);
  105. else printf("Ritardo totale nullo.\n");
  106. return;
  107. }
  108. int main()
  109. {
  110. FILE *fp;
  111. cor corsa[M];
  112. comando_e com;
  113. int n=0, flagc=0, flag=0, i=0;
  114. char input[M];
  115. if ((fp=fopen("log.txt","r"))==NULL)
  116. {
  117. printf("Errore apertura file.\n");
  118. return -1;
  119. }
  120. fscanf(fp, "%d", &n);
  121. for (i=0; i<n; i++)
  122. {
  123. 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);
  124. }
  125. fclose(fp);
  126. do {
  127. 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");
  128. scanf("%s", input);
  129. if ((strcmp(input, "date"))==0)
  130. com=date;
  131. if ((strcmp(input, "partenza"))==0)
  132. com=partenza;
  133. if ((strcmp(input, "capolinea"))==0)
  134. com=capolinea;
  135. if ((strcmp(input, "ritardo"))==0)
  136. com=ritardo;
  137. if ((strcmp(input, "rittot"))==0)
  138. com=rittot;
  139. if ((strcmp(input, "fine"))==0)
  140. com=fine;
  141. switch (com)
  142. {
  143. case date:
  144. {
  145. stampadate(n, corsa);
  146. flagc=1; //utilizzo flagc per controllare se il comando richiesto è effettivamente presente nella lista di quelli concessi
  147. break;
  148. }
  149. case partenza:
  150. {
  151. stampapartenza(n, corsa);
  152. flagc=1;
  153. break;
  154. }
  155. case capolinea:
  156. {
  157. stampacapolinea(n, corsa);
  158. flagc=1;
  159. break;
  160. }
  161. case ritardo:
  162. {
  163. stamparitardo(n, corsa);
  164. flagc=1;
  165. break;
  166. }
  167. case rittot:
  168. {
  169. stamparittot(n, corsa);
  170. flagc=1;
  171. break;
  172. }
  173. case fine:
  174. {
  175. flagc=1;
  176. flag=1;
  177. }
  178. }
  179. if (flagc==0)
  180. {
  181. printf("Comando non riconosciuto dal sistema. Si prega di inserire un comando presente nella lista iniziale la prossima volta.\n");
  182. return -2;
  183. }
  184. }
  185. while(flag!=1);
  186. return 0;
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement