Advertisement
BiRabittoh

Aeromodellismo

Apr 22nd, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.77 KB | None | 0 0
  1. /* MARCO ANDRONACO
  2. Un gruppo di appassionati di aeromodellismo desidera effettuare una gara in cui esibire i modelli realizzati. A tale scopo, raccoglie per ogni partecipante
  3.     le seguenti informazioni:
  4. 1) Nome e cognome del partecipante
  5. 2) Categoria di partecipazione all'evento (due categorie possibili: aeromodellismo statico o dinamico)
  6. 3) L'elenco dei modelli che prendono parte alla gara (sono ammessi piu velivoli per partecipante)
  7. Le informazioni relative al modello includono un codice identificante, una tipologia (aereo/elicottero) Il peso in Kg e la cilindrata del motore (in cc)
  8. Per modellare il sistema viene utilizzata una lista di partecipanti e per ciascun partecipante l'elenco dei modelli e' memorizzato in una seconda lista ordinata
  9.     per codice identificativo.
  10. Il sistema deve permettere le operazioni di seguito descritte:
  11. 1) Iscrizione di un nuovo velivolo. Tale opzione deve prevedere l'iscrizione di un nuovo velivolo associato ad un partecipante. Se il partecipante e' gia'
  12.     iscritto il velivolo verra'  aggiunto all'elenco; se il partecipante non risulta iscritto va aggiunto prima il partecipante alla lista dei partecipanti
  13.     e quindi il velivolo all'elenco associato al partecipante.
  14. 2) Calcolo e visualizzazione delle percentuali di aerei e di elicotteri rispetto al totale di velivoli partecipanti
  15. 3) Visualizzazione di tutti i velivoli iscritti
  16. 4) La visualizzazione dell'elenco di tutti gli elicotteri con peso inferiore ad uno dato e cilindrata pari ad un valore dato
  17. 5) Cancellazione di un velivolo iscritto (se รจ l'unico di un dato partecipante viene cancellato anche il partecipante) fornendo in ingresso il codice identificativo
  18. */
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #define M 31
  24.  
  25. //TYPEDEF
  26. typedef struct s1{
  27.     int codice;
  28.     int tipo;
  29.     float peso;
  30.     int cilindrata;
  31. } Aereo;
  32.  
  33. typedef struct s2{
  34.     Aereo infoA;
  35.     struct s2 *next;
  36. } NodoAereo, * ListaAereo;
  37.  
  38. typedef struct s3{
  39.     char nome[M];
  40.     char cognome[M];
  41.     int categoria;
  42.     ListaAereo modelli;
  43. } Persona;
  44.  
  45. typedef struct s4{
  46.     Persona infoP;
  47.     struct s4 * next;
  48. } NodoPersona, *ListaPersona;
  49.  
  50. //FUNZIONI
  51. int menu(){
  52.     puts("1) Iscrizione di un nuovo velivolo.");
  53.     puts("2) Stampa le percentuali di aerei e di elicotteri rispetto al totale di velivoli");
  54.     puts("3) Stampa tutti i velivoli iscritti");
  55.     puts("4) Stampa gli elicotteri con peso inferiore ad uno dato e cilindrata pari ad un valore dato");
  56.     puts("5) Cancella un velivolo iscritto");
  57.     puts("0) Esci dal programma");
  58. }
  59.  
  60. int ricercaPersone(ListaPersona lis, char nome[], char cognome[]){
  61.     if (lis == NULL){
  62.         return 0;
  63.     }
  64.     int posizione = 1;
  65.     do{
  66.         if ((strcmp(lis->infoP.nome, nome) == 0) && (strcmp(lis->infoP.cognome, cognome) == 0)){
  67.             return posizione;
  68.         }
  69.         lis = lis->next;
  70.         posizione++;
  71.     } while (lis != NULL);
  72.     return 0;
  73. }
  74.  
  75. int inserisciPersona(ListaPersona * lis, char nome[], char cognome[], int categoria){
  76.     ListaPersona aux;
  77.     aux = malloc(sizeof(NodoPersona));
  78.     if (aux == NULL) {
  79.         puts("Errore nell'allocazione di memoria.");
  80.         exit(2);
  81.     }
  82.     strcpy(aux->infoP.nome, nome);
  83.     strcpy(aux->infoP.cognome, cognome);
  84.     aux->infoP.categoria = categoria;
  85.     aux->infoP.modelli = NULL;
  86.     aux->next = *lis;
  87.     *lis = aux;
  88. }
  89.  
  90. int inserisciVelivolo(ListaPersona * lis, int posizione, Aereo velivolo){
  91.     ListaPersona aux1 = *lis;
  92.     int i = 1;
  93.     //vado alla posizione richiesta della lista di persone
  94.     while (i < posizione) {
  95.         aux1 = aux1->next;
  96.         i++;
  97.     }
  98.     ListaAereo aux2 = aux1->infoP.modelli;
  99.  
  100.     //controllo se vi sono altri modelli in lista
  101.     if (aux2 == NULL){
  102.         aux2 = malloc(sizeof(Aereo));
  103.         aux2->infoA = velivolo;
  104.         aux2->next = NULL;
  105.         aux1->infoP.modelli = aux2;
  106.     }
  107.     else if (aux2->next == NULL) {
  108.         ListaAereo aux3;
  109.         aux3 = malloc(sizeof(NodoAereo));
  110.         aux3->infoA = velivolo;
  111.         if (velivolo.codice < aux2->infoA.codice){
  112.             aux3->next = aux2;
  113.             aux2 = aux3;
  114.             aux1->infoP.modelli = aux2;
  115.         }
  116.         else {
  117.             aux2->next = aux3;
  118.             aux3->next = NULL;
  119.         }
  120.     } else {
  121.         int fatto = 0;
  122.         //la lista e' ordinata per codice, quindi devo stare attento a inserire gli elementi in modo che siano gia' ordinati
  123.         do {
  124.             if (velivolo.codice < aux2->next->infoA.codice){
  125.                 ListaAereo aux3;
  126.                 aux3 = malloc(sizeof(Aereo));
  127.                 aux3->next = aux2->next;
  128.                 aux3->infoA = velivolo;
  129.                 aux2->next = aux3;
  130.                 fatto = 1;
  131.             }
  132.             aux2 = aux2->next;
  133.         } while (aux2 != NULL && fatto != 0);
  134.     }
  135.     return 1;
  136. }
  137.  
  138. int stampaTutto(ListaPersona lis){
  139.     if (lis == NULL) {
  140.         return 0;
  141.     }
  142.     do {
  143.         printf("________________________\n\nNome: %s\nCognome: %s\nCategoria: %d\n", lis->infoP.nome, lis->infoP.cognome, lis->infoP.categoria);
  144.         printf("Modelli presentati:\n");
  145.         do {
  146.             printf("- Codice: %d\n- Tipo: %d\n- Peso: %f\n- Cilindrata: %d\n---------\n", lis->infoP.modelli->infoA.codice, lis->infoP.modelli->infoA.tipo, lis->infoP.modelli->infoA.peso, lis->infoP.modelli->infoA.cilindrata);
  147.             lis->infoP.modelli = lis->infoP.modelli->next;
  148.         } while (lis->infoP.modelli != NULL);
  149.         printf("________________________\n");
  150.         lis = lis->next;
  151.     } while (lis != NULL && lis->infoP.modelli != NULL);
  152. }
  153.  
  154. //MAIN
  155. int main(void){
  156.     int scelta, x, y, z;
  157.     Persona persona;
  158.     Aereo velivolo;
  159.     ListaPersona lis = NULL;
  160.     do{
  161.         menu();
  162.         scanf("%d", &scelta);
  163.         switch (scelta){
  164.         case 0:
  165.             break;
  166.         case 1: //Iscrizione di un nuovo velivolo
  167.             puts("\nA nome di chi vuoi aggiungere il velivolo? <nome> <cognome>");
  168.             scanf("%s%s", persona.nome, persona.cognome);
  169.             x = ricercaPersone(lis, persona.nome, persona.cognome);
  170.            
  171.             if (x != 0){
  172.                 printf("\nHo trovato una corrispondenza in posizione %d. Procedo ad aggiungere il velivolo.\n", x);
  173.  
  174.             }
  175.             else {
  176.                 puts("Nessuna corrispondenza trovata. Procedo ad aggiungere la persona.");
  177.                 do {
  178.                     puts("In che categoria di automodellismo gareggia? (0 = statico, 1 = dinamico)");
  179.                     scanf("%d", &y);
  180.                 } while (y != 0 && y != 1);
  181.                 inserisciPersona(&lis, persona.nome, persona.cognome, y);
  182.                 printf("\nHo aggiunto %s %s alla lista dei partecipanti. Procedo ad aggiungere il velivolo.\n", persona.nome, persona.cognome);
  183.                 x = 1;
  184.             }
  185.  
  186.             puts("Inserisci in ordine codice, tipo (0 = aereo, 1 = elicottero), peso e cilindrata del velivolo da aggiungere.");
  187.             scanf("%d %d %f %d", &velivolo.codice, &velivolo.tipo, &velivolo.peso, &velivolo.cilindrata);
  188.             inserisciVelivolo(&lis, x, velivolo);
  189.             puts("Fatto.");
  190.             break;
  191.         case 2: //Stampa percentuali degli elicotteri rispetto al totale dei velivoli
  192.  
  193.             break;
  194.         case 3: //Visualizza tutti i velivoli iscritti
  195.             stampaTutto(lis);
  196.             break;
  197.  
  198.         case 4: //Stampa gli elicotteri con peso < x e cilindrata = y
  199.            
  200.             break;
  201.  
  202.         case 5:
  203.  
  204.             break;
  205.         default:
  206.             puts("Si prega di inserire un valore dell'elenco.");
  207.         }
  208.     } while (scelta);
  209.     puts("Arrivederci!");
  210.     return 0;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement