Advertisement
VRonin

Porto

Jan 22nd, 2012
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.52 KB | None | 0 0
  1. /*
  2. avendo 2 bankine
  3. 1)Nuova nave
  4. 2)nave esce dal porto
  5. 3)Numero navi attraccate
  6. 4)Cercare nave in base al codice
  7. 5)Stampa navi attraccate
  8. 6)Esci
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #define NUMERO_BANCHINE 2
  15.  
  16. struct Nave{
  17. char NomeCapitano[40];
  18. int Codice;
  19. int TariffaMinima;
  20. };
  21.  
  22. struct Nodo{
  23. struct Nave Data;
  24. struct Nodo* next;
  25. };
  26.  
  27. struct Banchina{
  28. char Nome[40];
  29. int NumeroNavi;
  30. struct Nodo* ElencoNavi;
  31. };
  32.  
  33. /*char* Normalizza(char* a){
  34.     int i;
  35.     if (a==NULL) return NULL;
  36.     if (*a>='a' && *a<='z') a-=32;
  37.     for (i=1;i<strlen(a);i++){
  38.         if (*(a+i)>='A' && *(a+i)<='Z') a+=32;
  39.     }
  40.     return a;
  41. }*/
  42.  
  43. struct Nodo* Push(struct Nodo* Head, char* nom, int code, int tarif){
  44.     struct Nodo* temp;
  45.     temp= (struct Nodo*) malloc(sizeof(struct Nodo));
  46.     strcpy(temp->Data.NomeCapitano, nom);
  47.     temp->Data.Codice=code;
  48.     temp->Data.TariffaMinima=tarif;
  49.     temp->next=Head;
  50.     return temp;
  51. }
  52.  
  53. struct Nodo* Pop(struct Nodo* Head, int pos){
  54.     if (Head==NULL) return NULL;
  55.     int i;
  56.     struct Nodo* curr=Head;
  57.     struct Nodo* prev;
  58.     if (pos==0){
  59.         curr=Head->next;
  60.         free(Head);
  61.         return curr;
  62.     }
  63.     for (i=0;i<pos;i++){
  64.         prev=curr;
  65.         curr=curr->next;
  66.         if (curr==NULL && i+1<pos) return Head;
  67.     }
  68.     prev->next=curr->next;
  69.     free(curr);
  70.     return Head;
  71. }
  72.  
  73. struct Nodo* Libera (struct Nodo* Head){
  74.     struct Nodo* curr=Head;
  75.     while (Head!=NULL){
  76.         curr=Head->next;
  77.         free(Head);
  78.         Head=curr;
  79.     }
  80.     return NULL;
  81. }
  82.  
  83. int Dimensione(struct Nodo* Head){
  84.     struct Nodo* curr=Head;
  85.     int result=0;
  86.     while (curr!=NULL){
  87.         result++;
  88.         curr=curr->next;
  89.     }
  90.     return result;
  91. }
  92.  
  93. int TrovaNave(struct Nodo* a, int code){
  94.     struct Nodo* curr=a;
  95.     int result=0;
  96.     if (a==NULL) return -1;
  97.     while (curr->Data.Codice!=code){
  98.         curr=curr->next;
  99.         result++;
  100.         if (curr==NULL) return -1;
  101.     }
  102.     return result;
  103. }
  104.  
  105. void Display(struct Banchina* a, int n){
  106.     int i,j;
  107.     struct Nodo* li;
  108.     for (i=0;i<n;i++){
  109.         j=0;
  110.         li=(a+i)->ElencoNavi;
  111.         printf("\nBanchina %s\nNumero Navi Atraccate: %d\nNavi in questa banchina:", (a+i)->Nome, (a+i)->NumeroNavi);
  112.         if (li==NULL) printf("\nNon ci sono navi in questa banchina.");
  113.         while(li!=NULL){
  114.             printf("\n%d) Capitano: %s\nCodice: %d\nTariffa Minima: %d\n-----------------------------",j+1,li->Data.NomeCapitano,li->Data.Codice,li->Data.TariffaMinima);
  115.             j++;
  116.             li=li->next;
  117.         }
  118.         printf("\n-----------------------------------------------\n");
  119.     }
  120. }
  121.  
  122. int CodiceDupplicato (struct Banchina* a, int n, int cod){
  123.     if (a==NULL) return 0;
  124.     int i;
  125.     struct Nodo* li;
  126.     for (i=0;i<n;i++){
  127.         li=(a+i)->ElencoNavi;
  128.         while(li!=NULL){
  129.             if (li->Data.Codice==cod) return 1;
  130.             li=li->next;
  131.         }
  132.     }
  133.     return 0;
  134. }
  135.  
  136. struct Nave* CercaNave (struct Banchina* a, int n, int cod){
  137.     if (a==NULL) return NULL;
  138.     int i;
  139.     struct Nodo* li;
  140.     for(i=0;i<n;i++){
  141.         li=(a+i)->ElencoNavi;
  142.         while(li!=NULL){
  143.             if (li->Data.Codice==cod) return &(li->Data);
  144.             li=li->next;
  145.         }
  146.     }
  147.     return NULL;
  148. }
  149.  
  150. int main(){
  151.     struct Banchina Porto[NUMERO_BANCHINE];
  152.     int a,i,scelta,codice,tariffa;
  153.     struct Nave* temp;
  154.     char nome[40];
  155.     for (i=0;i<NUMERO_BANCHINE;i++){
  156.         printf("\nInserisci il nome della %d^a banchina: ",i+1);
  157.         scanf("%s",(Porto+i)->Nome); fflush(stdin);
  158.         //strcpy((Porto+i)->Nome, Normalizza((Porto+i)->Nome));
  159.         (Porto+i)->NumeroNavi=0;
  160.         (Porto+i)->ElencoNavi=NULL;
  161.     }
  162.     while(1){
  163.         do{
  164.             printf("\nCosa vuoi fare?\n1- Aggiungi Nave\n2- Rimuovi Nave\n3- Visualizza numero navi attraccate\n4- Cerca Nave\n5- Visualizza Situazione Attuale\n0- Esci\n");
  165.             scanf("%d",&scelta); fflush(stdin);
  166.         }while(scelta<0 || scelta>5);
  167.         if (scelta==0) break;
  168.         switch (scelta){
  169.             case 1:
  170.                 do{
  171.                     printf("\nIn quale banchina? ");
  172.                     scanf("%d",&i); fflush(stdin);
  173.                     a=i;
  174.                 }while(i<=0 || i>NUMERO_BANCHINE);
  175.                 printf("\nInserisci il nome del capitano: ");
  176.                 scanf("%s",nome); fflush(stdin);
  177.                 do{
  178.                 printf("\nInserisci il codice della nave: ");
  179.                 scanf("%d",&codice); fflush(stdin);
  180.                 }while(CodiceDupplicato(Porto,NUMERO_BANCHINE,codice));
  181.                 printf("\nInserisci la tariffa minima della nave: ");
  182.                 scanf("%d",&tariffa); fflush(stdin);
  183.                 (Porto+i-1)->ElencoNavi=Push((Porto+i-1)->ElencoNavi, nome, codice, tariffa);
  184.                 (Porto+i-1)->NumeroNavi=Dimensione((Porto+i-1)->ElencoNavi);
  185.                 break;
  186.             case 2:
  187.                 printf("\nInserisci codice nave in partenza: ");
  188.                 scanf("%d",&codice); fflush(stdin);
  189.                 tariffa=-1;
  190.                 for (i=0;i<NUMERO_BANCHINE && tariffa==-1;i++){
  191.                     tariffa=TrovaNave((Porto+i)->ElencoNavi,codice);
  192.                     if (tariffa!=-1){
  193.                         Pop((Porto+i)->ElencoNavi, tariffa);
  194.                         printf("\nNave Rimossa\n");
  195.                     }
  196.                 }
  197.                 if (tariffa==-1) printf("\nNave non trovata!\n");
  198.                 else (Porto+i)->NumeroNavi=Dimensione((Porto+i)->ElencoNavi);
  199.                 break;
  200.             case 3:
  201.                 tariffa=0;
  202.                 for (i=0;i<NUMERO_BANCHINE;i++){
  203.                     tariffa+=(Porto+i)->NumeroNavi;
  204.                 }
  205.                 printf("\nNumero navi attraccate: %d\n",tariffa);
  206.                 break;
  207.             case 4:
  208.                 printf("\nInserisci il codice della nave: ");
  209.                 scanf("%d",&codice); fflush(stdin);
  210.                 temp=CercaNave(Porto,NUMERO_BANCHINE,codice);
  211.                 if (temp==NULL) printf("\nNessuna nave corrispondente al codice inserito\n");
  212.                 else printf("Dettagli nave:\nNome Capitano: %s\nCodice: %d\nTariffa Minima: %d\n",temp->NomeCapitano,temp->Codice,temp->TariffaMinima);
  213.                 break;
  214.             case 5:
  215.                 Display(Porto,2);
  216.                 break;
  217.         }
  218.     }
  219.     for (i=0;i<NUMERO_BANCHINE;i++){
  220.         Porto[i].ElencoNavi=Libera(Porto[i].ElencoNavi);
  221.     }
  222.     return 0;
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement