SHARE
TWEET

Untitled

a guest Apr 21st, 2017 51 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top