Advertisement
VRonin

Rubrica

Jan 18th, 2012
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.66 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. struct Node
  7.  {
  8.    char Data[30]; /*la parola più lunga in italiano è di 29 lettere*/
  9.    int Number;
  10.    struct Node *Next;
  11.  };
  12.  
  13.  int length(struct Node* Head)
  14.  {
  15.     struct Node *cur_ptr;
  16.     int count=0;
  17.  
  18.     cur_ptr=Head;
  19.  
  20.     while(cur_ptr != NULL)
  21.     {
  22.        cur_ptr=cur_ptr->Next;
  23.        count++;
  24.     }
  25.     return count;
  26.  }
  27.  
  28. struct Node* addBeg(struct Node* Head, char* num, int tel)
  29.  {
  30.     struct Node *temp;
  31.     temp=(struct Node *)malloc(sizeof(struct Node));
  32.     strcpy(temp->Data,num);
  33.     temp->Number=tel;
  34.  
  35.     if (Head == NULL)
  36.     {
  37.        //List is Empty
  38.        Head=temp;
  39.        Head->Next=NULL;
  40.     }
  41.     else
  42.     {
  43.        temp->Next=Head;
  44.        Head=temp;
  45.     }
  46.     return Head;
  47.  }
  48.  
  49. struct Node* addEnd(struct Node *Head,char* num, int tel){
  50.     struct Node *temp1, *temp2;
  51.     if(Head == NULL)
  52.       return addBeg(Head,num,tel);
  53.     temp1=(struct Node *)malloc(sizeof(struct Node));
  54.     strcpy(temp1->Data,num);
  55.     temp1->Number=tel;
  56.  
  57.     temp2=Head;
  58.  
  59.  
  60.  
  61.        while(temp2->Next != NULL)
  62.        temp2=temp2->Next;
  63.  
  64.  
  65.        temp1->Next=NULL;
  66.        temp2->Next=temp1;
  67.     return Head;
  68.  }
  69.  
  70. struct Node* addAt(struct Node* Head, char* num, int tel, int loc)
  71.  {
  72.     int i;
  73.     struct Node *temp, *prev_ptr, *cur_ptr;
  74.  
  75.     cur_ptr=Head;
  76.  
  77.     if(loc > (length(Head)+1) || loc <= 0)
  78.     {
  79.        printf("\nImpossibile aggiungere l'elemento\n ");
  80.     }
  81.     else
  82.     {
  83.  
  84.         if (loc == 1)
  85.             return addBeg(Head,num,tel);
  86.         if (loc==length(Head)-1)
  87.             return addEnd(Head,num,tel);
  88.  
  89.         for(i=1;i<loc;i++)
  90.         {
  91.             prev_ptr=cur_ptr;
  92.             cur_ptr=cur_ptr->Next;
  93.         }
  94.  
  95.         temp=(struct Node *)malloc(sizeof(struct Node));
  96.         strcpy(temp->Data,num);
  97.         temp->Number=tel;
  98.         prev_ptr->Next=temp;
  99.         temp->Next=cur_ptr;
  100.     }
  101.     return Head;
  102.  }
  103.  
  104.  void display(struct Node * Head)
  105.  {
  106.     struct Node *cur_ptr;
  107.  
  108.     cur_ptr=Head;
  109.  
  110.     if(cur_ptr==NULL)
  111.     {
  112.        printf("\nLa rubrica è vuota");
  113.     }
  114.     else
  115.     {
  116.         printf("\nElementi nella Rubrica: ");
  117.         //traverse the entire linked list
  118.         while(cur_ptr!=NULL)
  119.         {
  120.             printf("\n%s - %d",cur_ptr->Data, cur_ptr->Number);
  121.             cur_ptr=cur_ptr->Next;
  122.         }
  123.         printf("\n");
  124.     }
  125.  }
  126.  
  127.  int SearchPos(struct Node* Head, char* num){
  128.      if (Head==NULL) return 1;
  129.      struct Node* cptr=Head;
  130.      int cont=1;
  131.      while (strcmp(cptr->Data,num)<0){
  132.         cptr=cptr->Next;
  133.         cont++;
  134.         if(cptr==NULL) break;
  135.      }
  136.      return cont;
  137.  }
  138.  
  139.  char* minuscolo (char* a){
  140.  int i;
  141.  for (i=0;i<strlen(a);i++)
  142.     {
  143.         if (*(a+i)>='A' && *(a+i)<='Z') *(a+i)+=32;
  144.     }
  145.  return a;}
  146.  
  147.  
  148.  
  149.  struct Node* Libera(struct Node* Head){
  150.      struct Node* temp;
  151.      while (Head!=NULL){
  152.          temp=Head->Next;
  153.          free(Head);
  154.          Head=temp;
  155.      }
  156.      return NULL;
  157.  }
  158.  
  159.  struct Node* TrovaContatto(struct Node* Head, char* num){
  160.      struct Node* cptr=Head;
  161.      while (strcmp(cptr->Data,num)!=0){
  162.         cptr=cptr->Next;
  163.         if (cptr==NULL) break;
  164.     }
  165.     return cptr;
  166.  }
  167.  
  168.  int main(){
  169.      char input[30];
  170.      int tel;
  171.      int scelta;
  172.      int continua=1;
  173.      struct Node* temp;
  174.      struct Node* Lista=NULL;
  175.      while(continua){
  176.          printf("\nCosa vuoi fare?\n1- Inserire un contatto\n2- Mostrare tutti i contatti\n3- Cercare un contatto\n0- Esci\n");
  177.          scanf("%d",&scelta); fflush(stdin);
  178.          switch (scelta){
  179.              case 0:
  180.                 continua=0;
  181.                 break;
  182.              case 1:
  183.                  printf("\nInserisci il nome: ");
  184.                  scanf("%s",input); fflush(stdin);
  185.                  minuscolo(input);
  186.                  printf("\nInserisci il numero: ");
  187.                  scanf("%d",&tel); fflush(stdin);
  188.                  Lista=addAt(Lista,input,tel,SearchPos(Lista,input));
  189.                  printf("\nContatto Aggiunto");
  190.                  break;
  191.             case 2:
  192.                 display(Lista);
  193.                 break;
  194.             case 3:
  195.                  printf("\nInserisci il nome da cercare: ");
  196.                  scanf("%s",input); fflush(stdin);
  197.                  temp=TrovaContatto(Lista,minuscolo(input));
  198.                  if (temp==NULL) printf("\nContatto non trovato");
  199.                  else printf("\nContatto trovato\n%s - %d",temp->Data, temp->Number);
  200.             default:
  201.                 break;
  202.         }
  203.         printf("\nPremere Invio per Continuare..."); getchar();
  204.      }
  205.      Lista=Libera(Lista);
  206.      return 0;
  207.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement