Liste semplici

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Liste semplici

    In

    if (ricerca == 1) {

    cosa è ricerca?? NON esiste ... ma perché non controlli quello che scrivi? Eppure il compilatore ti dà gli errori chiaramente!

    E poi tutte queste funzioni RimuoviNodo RimuoviLibri esattamente che devono fare?
  • Re: Liste semplici

    oregon ha scritto:


    In

    if (ricerca == 1) {

    cosa è ricerca?? NON esiste ... ma perché non controlli quello che scrivi? Eppure il compilatore ti dà gli errori chiaramente!

    E poi tutte queste funzioni RimuoviNodo RimuoviLibri esattamente che devono fare?
    volevo scrivere se il libro è presente nella lista allora eliminalo...perche una volta che si richiede il libro poi lo devo eliminare perchè è in prestito da chi l'ha richiesto
  • Re: Liste semplici

    Ma ricerca dov'è nel codice ??

    Perché alcune funzioni sono static?

    A che serve

    static void freeNodo(struct libri *nodo)

    ?? Basta

    void freeNodo(struct libri *nodo)
  • Re: Liste semplici

    oregon ha scritto:


    Ma ricerca dov'è nel codice ??

    Perché alcune funzioni sono static?

    A che serve

    static void freeNodo(struct libri *nodo)

    ?? Basta

    void freeNodo(struct libri *nodo)
    aspetta ti carico il codice:
    
    #ifndef funzioni_h
    #define funzioni_h
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 20;
    
    struct libri{
        char titolo[50];
        char autore[20];
        int cod_id;
        struct libri *next;
    };
    
    typedef struct libri* List;
    
    int menu(void);
    void gestioneErrore(void);
    void ricerca (struct libri *l);
    List initList(char titolo[50],char autore[20],int cod_id);
    struct libri *leggiFile(FILE *fp, struct libri *lista);
    void scriviLista(struct libri *lista);
    void scriviFile(FILE *fp, struct libri *lista);
    struct libri *inserisciLista(struct libri *nodo, struct libri *lista);
    struct libri *nuovoNodo(char *titolo, char *autore, int cod_id);
    void stampaLista(struct libri *top);
    List insertTail(List L, char titolo[50], char autore[20], int cod_id);
    static struct libri *rimuoviNodo(struct libri *lista, struct libri *nodo);
    struct libri *rimuoviLibro(struct libri *lista);
    void freeLista(struct libri *lista);
    static void freeNodo(struct libri *nodo);
    
    
    void ricerca (struct libri *l){
      int trovato = 0 ;
        char titolo[50];
        char nome[256];
        char matricola[9];
        char cognome[256];
        printf("\nInsersici il titolo del codice da cercare:");
        scanf("%49s", &titolo[50]);
    
    while (l != NULL && trovato != 1) {
        if(strcmp(l->titolo, &titolo[50])==0) {
    printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
            printf("\nInserisci nome: ");
            scanf("%255s", nome);
            printf("\nInserisci cognome: ");
            scanf("%255s", cognome);
            printf("\nInserisci matricola: ");
            scanf("%9s", matricola);
            printf("\nOperazione effettuata con successo\n");
            trovato=1;
       }
        l = l->next;
      }
    
        if(trovato != 1)
            printf("\nIl libro cercato non e' presente nell'archivio ed il libro non e' disponibile\n");
       }
    
    List insertTail(List L, char titolo[50], char autore[20] ,int cod_id) {
        if (L != NULL) {
            L->next = insertTail(L->next, titolo, autore, cod_id);
        }
        else{
            L = initList(titolo,autore,cod_id);
        }
        return L;
    }
    
    List initList(char titolo[50] ,char autore[20] ,int cod_id) {
        List L = (List)malloc(sizeof(struct libri));
        strcpy(L->titolo, titolo);
        strcpy(L->autore, autore);
        L->cod_id= cod_id;
        L->next = NULL;
        return L;
    }
    
    struct libri *rimuoviLibri(struct libri *lista)
    {
      if (lista==NULL) return lista;
     if (ricerca == 1) {
      lista = rimuoviNodo(lista, lista);
       lista = rimuoviLibri(lista);
      } else lista->next = rimuoviLibri(lista->next);
      
      return lista;
    }
    
    
    static struct libri *rimuoviNodo(struct libri *lista, struct libri *nodo) {
      struct libri *tmp;
      
      if (lista == nodo) {
        tmp = lista->next;
        freeNodo(lista);
        return tmp;
      }
        else lista->next = rimuoviNodo(lista->next,nodo);
        return lista;
    }
    
    
    void freeLista(struct libri *lista)
    {
      if (lista != NULL) {
        freeLista(lista->next);
        freeNodo(lista);
      }
    }
    
    static void freeNodo(struct libri *nodo)
    {
      free((void *) nodo);
    }
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "funzioni.h"
    
    int main() {
        int scelta;
        FILE *fp;
        struct libri *lista=NULL;
        char titolo[50];
        char autore[20];
        int id = 0;
        int n ;
    
    fp = fopen("Libri.txt","r");
    if (fp == NULL) gestioneErrore();
    lista = leggiFile(fp, lista);
    fclose(fp);
    
    while((scelta = menu())){
    switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
    {
    
        case 1: /*stampa lista*/
      
                scriviLista(lista);
            
            break;
       
        case 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/
            
                    ricerca(lista);
                    lista = rimuoviLibri(lista,titolo);
            break;
     
        case 3: /* Case costruito per restituire un libro tramite codice*/
            printf("Quanti libri vuoi restituire?: ");
            scanf("%d", &n);
            for (int i=0; i<n; i++) {
                 printf("Inserire titolo \n");
                 scanf("%49s", titolo);
                 printf("Inserire autore' \n");
                 scanf("%19s", autore);
                 printf("Inserire codice' \n");
                 scanf("%d", &id);
                 printf("\nLibro restituito con successo\n");
    
            lista = insertTail(lista, titolo, autore, id);
            }
            break;
       
        case 4: /*esegui richiesta*/
           
            break ;
    
        case 5: /*Se l'utente vuole uscire dalla biblioteca*/
            
            printf("Grazie per aver scelto il servizio di gestione& della biblioteca, torna a trovarci!\n");
            
            return 0;
           
            break;
    default: /*Se l'utente sbaglia ad inserire il numero*/
            
            printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
           
            break;
         
    
           } /*Fine switch*/
       } /*Fine do*/
    
        return 0;
    
    } /*Fine main*/
    
  • Re: Liste semplici

    Ma ricerca non è una variabile dunque (come hai scritto tu) ma una funzione! E come la devi scrivere quando la chiami?

    E poi

    if(strcmp(l->titolo, &titolo[50])==0) {

    NON è corretto ma

    if(strcmp(l->titolo, titolo)==0) {

    E nella ricerca di un libro a cosa serve inserire nome, cognome, matricola ... di chi ? E che ci fai ??
  • Re: Liste semplici

    oregon ha scritto:


    Ma ricerca non è una variabile dunque (come hai scritto tu) ma una funzione! E come la devi scrivere quando la chiami?

    E poi

    if(strcmp(l->titolo, &titolo[50])==0) {

    NON è corretto ma

    if(strcmp(l->titolo, titolo)==0) {

    E nella ricerca di un libro a cosa serve inserire nome, cognome, matricola ... di chi ? E che ci fai ??
    si è vero grazie ma si ricerca è una funzione ma quindi posso scrivere ricerca(lista)
  • Re: Liste semplici

    oregon ha scritto:


    Ma ricerca non è una variabile dunque (come hai scritto tu) ma una funzione! E come la devi scrivere quando la chiami?

    E poi

    if(strcmp(l->titolo, &titolo[50])==0) {

    NON è corretto ma

    if(strcmp(l->titolo, titolo)==0) {

    E nella ricerca di un libro a cosa serve inserire nome, cognome, matricola ... di chi ? E che ci fai ??
    dello studente perche quando richiedo un libro se è disponibile allora lo prendo in prestito inserendo matricola nome e cognome
  • Re: Liste semplici

    saraciao ha scritto:


    dello studente perche quando richiedo un libro se è disponibile allora lo prendo in prestito inserendo matricola nome e cognome
    Ma nella funzione di questi dati NON TE NE FAI NULLA. Quindi non ha senso chiederli. E comunque una funzione che si chiama ricerca fa solo una ricerca e non deve accettare dati da tastiera.
  • Re: Liste semplici

    oregon ha scritto:


    saraciao ha scritto:


    dello studente perche quando richiedo un libro se è disponibile allora lo prendo in prestito inserendo matricola nome e cognome
    Ma nella funzione di questi dati NON TE NE FAI NULLA. Quindi non ha senso chiederli. E comunque una funzione che si chiama ricerca fa solo una ricerca e non deve accettare dati da tastiera.
    vabbè oltre a quello mi puoi aiutare con l'eliminazione
  • Re: Liste semplici

    È esattamente quello che sto facendo ma vabbè
  • Re: Liste semplici

    oregon ha scritto:


    È esattamente quello che sto facendo ma vabbè
    ah allora scusa..per l'eliminazione posso fare cosí
    
    struct libri *rimuoviLib(struct libri *lista, char titolo, char autore, int cod_id)
    {
      struct libri *prev, *succ, *l;
    
        l = lista;
      
      prev = NULL;
        while(lista!=NULL) {
            if (lista->titolo != titolo & lista->autore != autore & lista->cod_id != cod_id) {
                succ = lista->next;
          if (prev != NULL) {
        prev->next = succ;
          }
          else {
        l = succ;
          }
                freeNodo(lista);
          lista = succ;
        }
        else {
            prev = lista;
            lista = lista->next;
        }
      }
    
      return l;
    }
    però mi elimina solo il titolo..perche?
    
    
Devi accedere o registrarti per scrivere nel forum
25 risposte