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:
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 millecodice:#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); }![]()

Rispondi quotando
