Advertisement
Guest User

Untitled

a guest
Apr 21st, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. /*si realizzi un programma per la gestione dell'albo d'oro del capmpionato
  2. mondiale dei piloti di F1. Si consideri che tale albo contiene, per ciascun campionato,
  3. le seguenti informazioni:
  4. 1. anno di svolgimento (intero);
  5. 2. cognome del pilota che ha vinto il campionato
  6. 3. Team di appartenenza di tale piolota;
  7. 4. numero di gran premi vinti da tale pilota in quel campionato.
  8. Il programma deve avere le seguenti funzionalità:
  9. 1. inserimento dati relativi a un nuovo campionato;
  10. 2. cancellazione di una edizione;
  11. 3. visualizzazione di tutte le edizioni del campionato;
  12. 4. ricerca delle informazioni relative al campionato svoltosi in un dato anno;*/
  13.  
  14. #include<stdio.h>
  15. #include<stdlib.h>
  16. #include<string.h>
  17.  
  18.  
  19.  
  20. typedef struct albo {
  21. int anno;
  22. char cognome[21];
  23. char team[21];
  24. int vittorie;
  25. }albo;
  26.  
  27. typedef struct Nodo {
  28. albo info;
  29. struct Nodo*next;
  30. }lista;
  31.  
  32. lista*emptyList(){
  33. return NULL;
  34. }
  35.  
  36. int menu() {
  37. int comando;
  38. puts("Premi:");
  39. puts("1. Inserire dati pilota.");
  40. puts("2. Cancellazione di una edizione.");
  41. puts("3. Stampa campionati.");
  42. puts("4. Ricerca informazioni campionato.");
  43. puts("0. EXIT.");
  44. scanf("%d", &comando);
  45. return comando;
  46. }
  47.  
  48. lista* inserimento(lista *lis,albo val) {
  49. lista*prec, *curr,* new_node;
  50. prec = NULL;
  51. curr = lis;
  52. while (curr != NULL) {
  53. prec = curr;
  54. curr = curr->next;
  55. }
  56. new_node = malloc(sizeof(lista));
  57. if (new_node == NULL)
  58. {
  59. printf("Non \212 possibie allocare la memoria.\n");
  60. exit(10);
  61. }
  62. //inserimento in testa
  63. new_node->info = val;
  64. if (prec == NULL) {
  65. new_node->next = lis;
  66. lis = new_node;
  67. return lis;
  68. }
  69.  
  70. //inserimento sequenziale
  71. else
  72. {
  73. prec->next = new_node;
  74. new_node->next = curr;
  75. return lis;
  76. }
  77. }
  78.  
  79. lista* canc_elem(lista*lis, albo val) {
  80. lista*p, *prec;
  81. p = lis;
  82. prec = NULL;
  83. while (p != NULL) {
  84. if (val.anno == p->info.anno) {
  85. if (p == lis) {
  86. lis = lis->next;
  87. free(p);
  88. p = lis;
  89. }
  90. else {
  91. prec->next = p->next;
  92. free(p);
  93. p = prec->next;
  94. }
  95. }
  96. else {
  97. prec = p;
  98. p = p->next;
  99. }
  100. }
  101.  
  102. return lis;
  103. }
  104.  
  105. void stampa_campionato(lista*lis) {
  106.  
  107. while (lis != NULL) {
  108. printf("-------------------------------\n");
  109. printf("Campionato Anno:\t%d\n\n", lis->info.anno);
  110. printf("Pilota:\t%s\n", lis->info.cognome);
  111. printf("Team:\t%s\n", lis->info.team);
  112. printf("Vittorie GP:\t%d\n", lis->info.vittorie);
  113. printf("-------------------------------\n");
  114. lis = lis->next;
  115. }
  116. }
  117.  
  118. lista* ricerca(lista*lis,int val) {
  119. int i = 0;
  120. while (lis->next != NULL && val>lis->info.anno) {
  121. lis = lis->next;
  122. i++;
  123. }
  124. if (val == lis->info.anno ) {
  125. return lis;
  126. }
  127. else
  128. return NULL;
  129. }
  130.  
  131. void stmp_info_pil(lista*lis) {
  132. printf("-------------------------------\n");
  133. printf("Campionato Anno:\t%d\n\n", lis->info.anno);
  134. printf("Pilota:\t%s\n", lis->info.cognome);
  135. printf("Team:\t%s\n", lis->info.team);
  136. printf("Vittorie GP:\t%d\n", lis->info.vittorie);
  137. printf("-------------------------------\n");
  138. }
  139.  
  140.  
  141. int main(void) {
  142.  
  143. lista *lis,*ric;
  144. albo val;
  145. int posizione;
  146. int anno;
  147. int max;
  148.  
  149. lis = emptyList();
  150. int comando;
  151. do {
  152. comando=menu();
  153. switch (comando)
  154. {
  155. case 0:
  156. printf("Chiusura programma...\n");
  157. exit(0);
  158. break;
  159. case 1: //inserimento pilota
  160. printf("Mondiale anno:\t");
  161. scanf("%d", &val.anno);
  162. printf("Inserisci cognome pilota:\t");
  163. scanf("%s", &val.cognome);
  164. printf("Inserisci team di appartenenza:\t");
  165. scanf("%s", &val.team);
  166. printf("Inserisci numero di vittorie:\t");
  167. scanf("%d", &val.vittorie);
  168. printf("\n");
  169. lis=inserimento(lis, val);
  170. break;
  171. case 2: //eliminazione pilota
  172. printf("Inserire l'anno del campionato che si vuole eliminare:\n");
  173. scanf("%d", &val.anno);
  174. lis=canc_elem(lis, val);
  175. break;
  176. case 3: //stampa campionati
  177. if (lis == NULL)
  178. printf("Nessun campionato mondiale \212 stato inserito.\n");
  179. else
  180. stampa_campionato(lis);
  181. break;
  182. case 4: //stampa informazione di un determinato anno
  183. printf("Inserisci anno per ulteriori informazioni:\n");
  184. scanf("%d", &anno);
  185.  
  186. if (lis != NULL) {
  187. ric = ricerca(lis, anno);
  188. if (lis == NULL)
  189. printf("Non ci sono informazioni relative alll'anno %d.", anno);
  190. else
  191. stmp_info_pil(ric);
  192. }
  193. else
  194. printf("Lista vuota.\n");
  195. break;
  196.  
  197. }
  198. } while (comando != 0);
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement