Advertisement
BiRabittoh

Emeroteca

May 2nd, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. //STRUTTURE
  7. /*
  8. Rivista:
  9.  1. Titolo (titolo) implementato con una stringa, senza caratteri bianchi, che può contenere al più 63 caratteri utili;
  10.  2. Codice ISBN (codice) implementato con una stringa, senza caratteri bianchi, che può contenere al più 15 caratteri utili;
  11.  3. Codice Scaffale (scaffale) implementato con una stringa, senza caratteri bianchi, che può contenere al più 15 caratteri utili;
  12.  4. Numero di pagine, implementato come intero
  13.  */
  14.  
  15.  typedef struct s_rivista {
  16.     char titolo_rivista[64];
  17.     char codice_ISBN[16];
  18.     char codice_scaffale[16];
  19.     int  numero_pagine;
  20.  }t_rivista;
  21.  
  22.  typedef struct s_nodo_rivista{
  23.     t_rivista info;
  24.     struct s_nodo_rivista *next;
  25.  }t_nodo_rivista;
  26.   typedef struct s_nodo_rivista *Lista;
  27.  
  28.  /*
  29.   Scaffale:
  30.    1. Codice Scaffale (scaffale) implementato con una stringa, senza caratteri bianchi, che può contenere al più 15 caratteri utili;
  31.    2. Numero di riviste presenti;
  32.    3. Elenco delle riviste, implementato mediante una lista ordinata.
  33.  */
  34.  
  35.  typedef struct s_scaffale{
  36.     char codice_scaffale[16];
  37.     int  numero_riviste;
  38.     Lista l;
  39.  }t_scaffale;
  40.  
  41.  
  42.  typedef struct s_nodo_scaffale{
  43.     t_scaffale info;
  44.     struct s_nodo_scaffale *next;
  45.  }t_nodo_scaffale;
  46.  typedef struct  s_nodo_scaffale *Lista2;
  47.  
  48.  //PROTOTIPI DELLE FUNZIONI
  49.  
  50. Lista inserimento_rivista(Lista * lis,t_rivista riv);
  51.  int salva_rivista(FILE *fp,Lista lis);
  52.  int ricercaCodice(Lista lis,char *codice_ISBN);
  53.  int cancellazione_rivista(Lista *lis,char* codice_ISBN);
  54.  void copiaDati(Lista lis1, Lista2 * lis2);
  55.  int ricercaScaffale(Lista lis, char codice_scaffale[]);
  56.  
  57.  //FUNZIONI DI STAMPA
  58.  void stampaLista(Lista lis);
  59.  void stampaLista2(Lista2 lis2);
  60.  
  61.  
  62.  int main(void){
  63.     //DICHIARAZIONI DELLE VARIABILI
  64.     int opzione;
  65.     t_rivista riv;
  66.     Lista lis = NULL;
  67.     Lista2 scaffali = NULL;
  68.     FILE * fp;
  69.     int res;
  70.     //Menù
  71.     do{
  72.         printf("1.Inserisci i dati relativi alla rivista\n");
  73.         printf("2.Per salvare i dati relativi alla riviste i un file di testo\n");
  74.         printf("3.Per cancellare una rivista\n");
  75.         printf("7.Per stampare l'intero contenuto dell'intera struttura dati\n");
  76.         printf("0.Esci dal programma.\n");
  77.         scanf("%d",&opzione);
  78.         switch(opzione){
  79.             case 1:
  80.                 printf("Inserisci il titolo della rivista:\n");
  81.                 scanf("%s",riv.titolo_rivista);
  82.                 printf("Inserisci il codice ISBN della rivista:\n");
  83.                 scanf("%s",riv.codice_ISBN);
  84.                 printf("Inserisci il codice dello scaffale della rivista:\n");
  85.                 scanf("%s",riv.codice_scaffale);
  86.                 printf("Inserisci il numero di pagine della rivista:\n");
  87.                 scanf("%d",&riv.numero_pagine);
  88.                 inserimento_rivista(&lis,riv);
  89.               break;
  90.             case 2:
  91.                 fp = fopen("output.txt", "w");
  92.                 salva_rivista(fp,lis);
  93.                 printf("Salvataggio avvenuto con successo.\n");
  94.               break;
  95.             case 3:
  96.                 printf("Inserisci il codice ISBN:\n");
  97.                 scanf("%s",riv.codice_ISBN);
  98.                 res = cancellazione_rivista(&lis,riv.codice_ISBN);
  99.                 if(res){
  100.                     printf("Cancellazione effettuata con successo.\n");
  101.                 } else {
  102.                     puts("Codice non trovato! :C");
  103.                 }
  104.               break;
  105.             case 4:
  106.             copiaDati(lis, &scaffali);
  107.               break;
  108.             case 5:
  109.               break;
  110.             case 6:
  111.               break;
  112.             case 7:
  113.             stampaLista(lis);
  114.             printf("Stampa avvenuta con successo\n");
  115.               break;     
  116.             case 0:
  117.                 printf("Arrivederci.\n");
  118.                 return 0;
  119.               default:
  120.                 printf("Inserire una delle opzioni presenti.\n");
  121.          }
  122.        
  123.      }
  124.      while(opzione!=0);
  125.  }
  126.  
  127.  
  128.  
  129.  Lista inserimento_rivista(Lista * lis,t_rivista riv){
  130.     Lista aux;
  131.     aux=(Lista)malloc(sizeof(t_nodo_rivista));
  132.     if(aux==NULL)
  133.         exit(0);
  134.     aux->info=riv;
  135.     aux->next=*lis;
  136.     *lis=aux;
  137.     return aux;
  138. }
  139.  
  140.  
  141.   int salva_rivista(FILE *fp,Lista lis){
  142.     int i=0;
  143.     if(fp == NULL){
  144.         return -1;
  145.       }
  146.     while(lis!=NULL){
  147.         fprintf(fp, "%s %s %s %d\n" ,lis->info.titolo_rivista,lis->info.codice_ISBN,lis->info.codice_scaffale, lis->info.numero_pagine);
  148.         lis=lis->next;
  149.         i++;
  150.       }
  151.     return i;  
  152.   }
  153.  
  154.  
  155.  
  156. int ricercaCodice(Lista lis, char codice_ISBN[]){
  157.     int i = 1, trovato = 0;
  158.     while(lis!=NULL){
  159.         if(strcmp(codice_ISBN,lis->info.codice_ISBN) == 0){
  160.             trovato = 1;
  161.             break;
  162.          }
  163.         lis=lis->next;
  164.         i++;
  165.      }
  166.      if(trovato){
  167.         return i;
  168.      } else
  169.         return 0;
  170.  
  171.  }
  172.  
  173.   int cancellazione_rivista(Lista *lis,char codice_ISBN[]){
  174.     Lista attuale = *lis;
  175.     Lista precedente = *lis;
  176.       int n = ricercaCodice(*lis,codice_ISBN);
  177.       int k = 0;
  178.       if(n==0)
  179.       return 0;
  180.       while(k < n) {
  181.         precedente = attuale;
  182.         attuale = attuale->next;
  183.         k++;
  184.       }
  185.      
  186.       precedente->next = attuale->next;
  187.       free(attuale);
  188.       return 1;
  189.   }
  190.  
  191.  int ricercaScaffale(Lista lis, char codice_scaffale[]){
  192.     int i = 1, trovato = 0;
  193.     while(lis!=NULL){
  194.         if(strcmp(codice_scaffale,lis->info.codice_scaffale) == 0){
  195.             trovato = 1;
  196.             break;
  197.          }
  198.         lis=lis->next;
  199.         i++;
  200.      }
  201.      if(trovato){
  202.         return i;
  203.      } else
  204.         return 0;
  205.  
  206.  }
  207.  
  208.  
  209.  
  210.  void stampaLista(Lista lis){
  211.     while(lis!=NULL){
  212.         printf("%s %s %s %d\n",lis->info.titolo_rivista,lis->info.codice_ISBN,lis->info.codice_scaffale,lis->info.numero_pagine);
  213.         lis=lis->next;
  214.      }
  215.  }
  216.  
  217.  
  218.  
  219.  void stampaLista2(Lista2 lis2){
  220.     while(lis2!=NULL){
  221.         printf("%s %d",lis2->info2.codice_scaffale,lis2->info2.numero_riviste);
  222.         stampaLista(lis2->info2.l);
  223.         lis2=lis2->prossimo;
  224.      }
  225.    
  226.  }
  227.  
  228.  void copiaDati(Lista lis1, Lista2 * lis2){
  229.      lis2 = NULL;
  230.      Lista2 aux = NULL;
  231.      int numero = 0;
  232.      while(ricercaScaffale(lis1->info.codice_scaffale)){
  233.         numero++;
  234.         lis1 = lis1->next;
  235.      }
  236.      
  237.      aux = (Lista2)malloc(sizeof(t_nodo_scaffale));
  238.      //controllo malloc
  239.      aux->next = *lis2;
  240.      aux->info.l = NULL;
  241.      
  242.      /*
  243.       * char codice_scaffale[16];
  244.     int  numero_riviste;
  245.     Lista l;
  246.     * /
  247.      
  248.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement