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*/