Salve ragazzi ho un problema con un esercizio.. la traccia è:

Si vuole simulare la gestione automatizzata di una biblioteca. Si suppone di avere un archivio di massimo 100 libri identificati da un titolo, nome dell’autore o autori massimo 5, da un codice identificativo e da un prezzo di prestito. Un libro può essere presente nell’archivio o in prestito. Permettere all’utente di: • Inserire un nuovo libro nell’archivio (automaticamente gli viene assegnato un codice). • Richiedere un libro tramite il codice (verificare se esso è presente o non è in prestito). • Cercare nell’archivio il libro più costoso.

Questo e ciò che ho fatto:


codice:
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>


#define max 100
/* Creazione di un array di struct libro contenente 5 campi*/


typedef struct{
char titolo[30];
char nome_autori[5][30];
int codice_identificativo;
int status; /* Status indica se il libro è presente(1) oppure è in prestito(2)*/
float costo;
} Libro;


typedef struct{
    Libro elementi[max];
    int num_libri;
} Lista;


int menu();
Lista Inserimento_Libro();
void Stampa_Elenco(Lista list);
void Libro_piu_costoso(Lista list);
int Cerca_tramite_titolo(Lista list, char titolo_trovare[]);
int Cerca_tramite_codice(Lista list);


int main ()
{


int scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/
Lista L;
int cod_ide;












while(scelta=menu()){
switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{




case 1 : /* Se l'utente preme tasto 1 si attiva questo case per inserire un nuovo libro nell'archivio */




system("CLS");
printf("*****INSERIMENTO NUOVO LIBRO*****\n\n");
L=Inserimento_Libro();
printf("\n");
Stampa_Elenco(L);
system("Pause");
break;




case 2 : /* Premendo il tasto 2 l'utente vuole richiedere un libro tramite il codice*/
system("CLS");
printf("*****RICERCA LIBRO TRAMITE CODICE*****\n\n");
printf("Inserisci il codice da cercare: ");
scanf("%d", &cod_ide);
cod_ide=Cerca_tramite_codice(L);
system("Pause");
break;




case 3: /* Si vuole cercare il libro più costoso nell'archivio*/
system("CLS");
printf("*****RICERCA LIBRO PIU COSTOSO IN ARCHIVIO*****\n\n");
Libro_piu_costoso(L);
system("Pause");
break;


case 0 :
printf("Hai deciso di uscire dalla libreria!!\nGrazie per aver usufruito del programma di gestione biblioteca.\nArrivederci.\n");
break;




} /* Fine switch */
}


return 0;
}


int menu()
{
int scelta;
printf(" **********************************************************************\n");
printf(" *     Benvenuto nel programma di gestione biblioteca                 *\n");
printf(" **********************************************************************\n");
printf(" *     Premere 1 per inserire un nuovo libro                          *\n");
printf(" *     Premere 2 per richiedere un libro tramite codice               *\n");
printf(" *     Premere 3 per cercare nell'archivio il libro piu' costoso      *\n");
printf(" *     Premere 0 per uscire                                           *\n");
printf(" **********************************************************************\n");
printf("\n");
printf("Inserisci la tua scelta: ");
scanf("%d",&scelta);
while(scelta<0 || scelta>3){
    system("CLS");/*Comando della libreria stdlib.h che serve per pulire lo schermo*/
    printf("\nERRORE:Il numero da lei inserito non corrisponde a nessun comando\nSi prega di riprovare: \n");/*Se l'utente sbaglia ad inserire il numero*/
    return scelta;
}
return scelta;
system("Pause");
}


Lista Inserimento_Libro(){
    Lista list;
    int i;
    printf("Quanti libri vuoi inserire?\n");
    scanf("%d",&list.num_libri);
    fflush(stdin);
    for(i=0; i<list.num_libri; i++){
            if(list.num_libri<0 || list.num_libri>100){
        system("CLS");
        printf("ERRORE:Numero di libri non supportato.\n");
        return list;
        }else{
            printf("Inserire titolo del libro:\n ");
            gets(list.elementi[i].titolo);
            printf("Inserire nome dell'autore(MAX 5):\n");
            gets(list.elementi[i].nome_autori);
            printf("Inserire il prezzo di prestito del libro: \n");
            scanf("%f",&list.elementi[i].costo);
            printf("Inserire 1 se il libro e' disponibile oppure 2 se e' in prestito:\n");
            scanf("%d",&list.elementi[i].status);
            srand(time(NULL));
            list.elementi[i].codice_identificativo=rand()%100+1;
            printf("\n");
            }
            fflush(stdin);
    }
    return list;
}


void Stampa_Elenco(Lista list){
int i;
for(i=0;i<list.num_libri;i++){
    if(list.num_libri<0 || list.num_libri>100){
    system("CLS");
    printf("ERRORE:Numero di libri non supportato.\n");
    return list;
    }else
    printf("\n");
    printf("Libro n.%d\n", i+1);
    printf("Titolo: %s\n",list.elementi[i].titolo);
    printf("Autore: %s\n",list.elementi[i].nome_autori);
    printf("Prezzo: %.2f\n",list.elementi[i].costo);
    printf("Grazie!! Il libro e' stato inserito nell'archivio correttamente\nIl suo codice e':%d\n",list.elementi[i].codice_identificativo);
}
}


/*E questo il problema la ricerca per codice dopo che mi chiede quanti libri vuoi inserire e mi stampa tutti i dati con i codici
  quando provo a ricercarli tramite la seconda scelta mi porta a qualsiasi codice inserisco i dati del primo libro


*/


int Cerca_tramite_codice(Lista list){
int i;
int cod_ide;
for(i=0;i<list.num_libri;i++){
    if(list.elementi[i].codice_identificativo=cod_ide){
        if(list.elementi[i].status==1){
    printf("Il libro e' presente nell'archivio ed e' disponibile.\n");
    list.elementi[i].status=2;
printf("Il Suddetto libro le e' appena stato ceduto in prestito, nome: %s.\nGrazie e arrivederci\n.",list.elementi[i].titolo);
break;
}
}
if(list.elementi[i].status=2){
printf("Il libro e' presente nell'archivio ma attualmente e' in prestito\n");
break;
}
}


return cod_ide;
}




void Libro_piu_costoso(Lista list){
int i;
Libro costoso=list.elementi[0];
int indice_costoso;
for(i=0;i<list.num_libri;i++){
    if(costoso.costo < list.elementi[i].costo){
        costoso=list.elementi[i];
        indice_costoso=i;
    }
}
printf("Il libro piu costoso in archivio e': \n");
printf("'%s', di %s con un costo di %.2f\n euro",costoso.titolo,costoso.nome_autori,costoso.costo);


}
il mio problema riguarda la ricerca per codice cioe una volta inserito il numero di libri ( per esempio 3) e tutti i loro dati ( cioe nome ,autore ,prezzo e status(presente o in prestito) tante volte quanti sono i libri da inserire) mi stampa fuori un resoconto di cio che ho inserito con in piu il proprio codice, ma quando provo a ricercare il suddetto libro tramite il codice generato mi porta solo i dati del primo libro (che ho specificato presente) il secondo(in prestito) e il terzo (presente) non mi da informazioni.... so che e un po contorto cio che ho detto ... spero di essere stato il piu chiaro possibile. Grazie mille