Advertisement
CleverCode

Rubrica

Jul 22nd, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.24 KB | None | 0 0
  1. /*
  2. Si realizzi un programma in linguaggio C in grado di gestire una rubrica di nomi e numeri
  3. telefonici. La rubrica deve contenere fino a 100 voci diverse. Ciascuna voce è composta da
  4. un nome (max 40 caratteri) e da un numero di telefono (max 20 caratteri).
  5. Il programma deve fornire all’utente un menù di scelta, con le seguenti voci:
  6. 1) Aggiungi nuova voce in rubrica
  7. 2) Ricerca esatta per nome
  8. 3) Ricerca approssimata per nome
  9. 4) Stampa completa rubrica
  10. 0) Esci dal programma
  11. Una volta che l’utente ha scelto l’operazione desiderata (1-4), il programma acquisirà i
  12. dati necessari dall’utente ed eseguirà il comando. Nota: nella rubrica non possono esistere
  13. due voci con lo stesso nome.
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19.  
  20. int main(int argc, char *argv[]) {
  21.    
  22.     const int MAX = 100;
  23.     const int LUNN = 40;
  24.     const int LUNT = 20;
  25.    
  26.     char nome[MAX][LUNN+1];
  27.     char tel[MAX][LUNT+1];
  28.     int N;
  29.  
  30.     int comando;
  31.     char riga[200];
  32.     char sn[LUNN+1];
  33.     char st[LUNT+1];
  34.     int i, duplicato, trovato, pos;
  35.    
  36.     /* INIZIALIZZAZIONI */
  37.    
  38.     N = 0;
  39.     do{
  40.         /* STAMPA DEL MENU */
  41.        
  42.         puts("1) Aggiungi nuova voce in rubrica");
  43.         puts("2) Ricerca esatta per nome");
  44.         puts("3) Ricerca approssimata per nome");
  45.         puts("4) Stampa completa rubrica");
  46.         puts("0) Esci dal programma");
  47.        
  48.         /* LETTURA DEL COMANDO */
  49.        
  50.         printf("Inserisci il comando: ");
  51.         gets(riga);
  52.         comando = atoi(riga);
  53.        
  54.         /* ESECUZIONE DEL COMANDO */
  55.         switch ( comando ){
  56.             case 1:
  57.             /* Acquisisci i dati */
  58.                 printf("Inserisci il nome da aggiungere: ") ;
  59.                 gets(sn) ;
  60.                 printf("Inserisci il numero di telefono corrispondente: ") ;
  61.                 gets(st) ;
  62.  
  63.                 /* Verifica se i dati sono validi */
  64.                 if ( N == MAX ){
  65.                     puts("ERRORE: rubrica piena") ;
  66.                     break ;
  67.                 }
  68.                 duplicato = 0 ;
  69.                 for ( i = 0 ; i < N ; i++ )
  70.                     if ( strcmp(sn, nome[i]) == 0 )
  71.                         duplicato = 1 ;
  72.                    
  73.                     if ( duplicato == 1 ){
  74.                         puts("ERRORE: nome duplicato") ;
  75.                         break ;
  76.                     }
  77.                    
  78.                     /* Aggiungi il nome in rubrica */
  79.                     strcpy( nome[N], sn ) ;
  80.                     strcpy( tel[N], st ) ;
  81.                     N++ ;
  82.                     break ;
  83.                    
  84.             case 2: /* ricerca esatta */
  85.                 printf("Inserisci il nome da ricercare: ") ;
  86.                 gets(sn) ;
  87.                
  88.                 trovato = 0 ;
  89.                 for ( i = 0 ; i < N && trovato == 0 ; i++ ){
  90.                     if ( strcmp( sn, nome[i] ) == 0 ){
  91.                         trovato = 1 ;
  92.                         pos = i ;
  93.                     }
  94.                 }
  95.                
  96.                 if ( trovato == 1 ){
  97.                     printf("Il telefono di %s e’: %s\n",
  98.                     sn, tel[pos] ) ;
  99.                 }
  100.                 else
  101.                 {
  102.                     printf("Nessun %s e’ presente in rubrica\n", sn) ;
  103.                 }
  104.                
  105.                 break ;
  106.             case 3: /* ricerca approssimata */
  107.                 printf("Inserisci una parte del nome da ricercare: ") ;
  108.                 gets(sn) ;
  109.                
  110.                 trovato = 0 ;
  111.                 for ( i = 0 ; i < N ; i++ ){
  112.                     if ( strstr( nome[i], sn ) != NULL ){
  113.                         printf("%s: %s\n", nome[i], tel[i]) ;
  114.                         trovato = 1 ;
  115.                     }
  116.                 }
  117.        
  118.             case 4:
  119.                 printf("CONTENUTO DELLA RUBRICA (%d VOCI)\n", N) ;
  120.                 for ( i = 0 ; i < N ; i++ )
  121.                     printf("%s: %s\n", nome[i], tel[i] ) ;
  122.                 break ;
  123.             case 0:
  124.                 puts("Arrivederci") ;
  125.                 break ;
  126.                
  127.             default:
  128.                 printf("ERRORE NEL PROGRAMMA (comando=%d)\n", comando) ;
  129.             }
  130.     }
  131.    
  132.     while ( comando != 0 ) ;
  133.    
  134.     exit(0) ;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement