Aiuto programma esercitazione strutture e funzioni

di il
59 risposte

59 Risposte - Pagina 4

  • Re: Aiuto programma esercitazione strutture e funzioni

    oregon ha scritto:


    Vuoi dire che non visualizzi neanche il menu?
    no mi esce solo segmentation fault

    il codice è questo:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define ID 50
    #define DIM 500
    #define LUNG_NOME 20
    #define LUNG_COGNOME 30
    #define LUNG_MAX_ARCHIVIO 300
    #define LISTA_MAX_LIBRI 10
    
    
    typedef struct {
    char nome[LUNG_NOME];
    char cognome[LUNG_COGNOME];
    char nazionalita[DIM];
    } autore;
    
    typedef struct {
    autore articolo;
    int quantita;
    } libri_quantita;
    
    typedef struct {
    char ISBN[13];
    char titolo[DIM];
    autore lista_autori;
    libri_quantita lista[LISTA_MAX_LIBRI];
    int num_libri;
    } libro;
    
    
    typedef struct {
        char nome[LUNG_NOME];
        char cognome[LUNG_COGNOME];
        char codice_cliente[ID];
        libro lista_libri[10];
    } cliente;
    
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
        int progressivo;
        int totale;
    } archivio_clienti;
    
    
    int compila_cliente(cliente *_cliente);
    int inserisci_cliente(cliente _nuovo_cliente, archivio_clienti *_arc_clienti);
    int inserisci_libro(libro _nuovo_libro, archivio_clienti *_arc_clienti);
    int check_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int compila_libri(libro *nuovo_libro);
    int inserisci_tesseramento(cliente _nuovo_tesseramento, archivio_clienti *_arc_clienti);
    int mostra_tesseramento_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int mostra_libri(archivio_clienti arc_clienti);
    
    /*
    *
    */
    
    int main(int argc, char** argv) {
        int scelta;
        int i;
        archivio_clienti arc_CLIENTI;
        cliente nuovo_cliente;
        libro inserisci_libro;
        libro nuovo_libro;
        archivio_clienti arc_libri;
        autore nome_autore;
       arc_CLIENTI.progressivo = 0;         
       
       
        do {
            system("clear");
            printf("****BIBLIOTECA****\n\n");
            printf("1. Inserisci nuovo libro\n");
            printf("2. Tessera cliente\n");
            printf("3. Prestito di un libro\n");
            printf("4. Visualizza prestiti di un cliente\n");
            printf("5. Visualizza libri\n");
            printf("0. Esci\n\n");
           
            printf("\tScelta: ");
            scanf("%d", &scelta);
           
            switch (scelta) {
                case 1:
                 system("clear");
                 printf("ISBN: ");
                    scanf("%s", nuovo_cliente.codice_cliente);
                    if (check_cliente(nuovo_cliente.codice_cliente, arc_CLIENTI) == 1) {
                        compila_libri(&nuovo_libro);
                        if (inserisci_cliente(nuovo_cliente, &arc_CLIENTI) == 1)
                            printf("Errore: archivio pieno!\n");
                    } else
                        printf("Cliente gia' presente\n");
                   
                    getchar();
                    getchar();
                    break;
       
                    case 2:
                    system("clear");
                    printf("Codice cliente: ");
                    scanf("%s", nuovo_cliente.codice_cliente);
                    
                    
                    switch (scelta) {
    
                            case 1:
                                system("clear");
                                compila_cliente(&nuovo_cliente);
                                strcpy(nuovo_cliente.codice_cliente, inserisci_libro.ISBN);
                                inserisci_cliente(nuovo_cliente, &arc_CLIENTI);
                                compila_libri(&nuovo_libro);
                                
                                getchar();
                                getchar();
                               
                                break;
    
                                case 5:
                    system("clear");
                    mostra_libri(arc_CLIENTI);
                    getchar();
                    getchar();
                              break;
                              
                            default:
                                printf("Scegli un'opzione valida\n");
                               
                        }
                 
                    
                   
            case 0:
                printf("Arrivederci, alla prossima ;)\n");
                break;
               
                default:
                   printf("Carattere errato: Inserire carattere valido.\n");
    
                   }
        } while (scelta != 0);
       
        return 0;
    }
    
    int compila_cliente(cliente *_cliente) {
        printf("Nome: ");
        scanf("%s", _cliente->nome);
        printf("Cognome: ");
        scanf("%s", _cliente->cognome);
    }
    
    int compila_libri(libro *nuovo_libro) {
        int i;
        printf("Libri:\n\n");
        printf("Titolo: ");
        scanf("%s", nuovo_libro->titolo);
            
        printf("Autore:\n\n");
        printf("Nome: ");
        scanf("%s", nuovo_libro->titolo);
        printf("Cognome: ");
        scanf("%s", nuovo_libro->titolo);
        printf("nazionalita': ");
        scanf("%s", nuovo_libro->titolo);
       for (i = 0; i < nuovo_libro->num_libri; i++) {
            printf("Articolo n %d\n", i + 1);
            printf("Nome: ");
            scanf("%s", nuovo_libro->lista[i].articolo.nome);
            printf("Quantita': ");
            scanf("%d", &nuovo_libro->lista[i].quantita);
        }
       
        }
    
    int mostra_libri(archivio_clienti arc_clienti) {
        int i;
        printf("Lista libri\n\n");
        for (i = 0; i < arc_clienti.progressivo; i++) {
            printf("%s\n", arc_clienti.clienti[i].codice_cliente);
            printf("%s\n", arc_clienti.clienti[i].nome);
            printf("%s\n\n", arc_clienti.clienti[i].cognome);
        }
    }
    
    int inserisci_cliente(cliente _nuovo_cliente, archivio_clienti *_arc_clienti) {
        if (_arc_clienti->progressivo < LUNG_MAX_ARCHIVIO) {
            _arc_clienti->clienti[_arc_clienti->progressivo] = _nuovo_cliente;
            _arc_clienti->progressivo++;
            return 0;
        } else
            return 1;
    }
    
    int check_cliente(char _codice_cliente[], archivio_clienti _arc_clienti) {
        int i = 0;
        while (i < _arc_clienti.progressivo && strcmp(_codice_cliente, _arc_clienti.clienti[i].codice_cliente) != 0)
            i++;
        if (i < _arc_clienti.progressivo)
            return 0;
        else
            return 1;
    }
  • Re: Aiuto programma esercitazione strutture e funzioni

    Superi lo spazio disponibile nello stack ... usa questi valori

    #define ID 20
    #define DIM 50
    #define LUNG_NOME 20
    #define LUNG_COGNOME 30
    #define LUNG_MAX_ARCHIVIO 30
    #define LISTA_MAX_LIBRI 10
  • Re: Aiuto programma esercitazione strutture e funzioni

    Quando superi lo spazio va in segmentation fault ?
    non lo sapevo...non me lo sarei mai immaginato

    ho scritto il codice un pò meglio, però non riesco a scorrere gli array per mostrarli in archivio, prima non mi mostrava nulla:
    mi potete aiutare ?
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define ID 20
    #define DIM 50
    #define LUNG_NOME 20
    #define LUNG_COGNOME 30
    #define LUNG_MAX_ARCHIVIO 30
    #define LISTA_MAX_ARCHIVIO_LIBRI 10
    
    typedef struct {
    char nome[LUNG_NOME];
    char cognome[LUNG_COGNOME];
    char nazionalita[DIM];
    } autore;
    
    typedef struct {
    char ISBN[13];
    autore lista_autori;
    } libro;
    
    typedef struct {
        char nome[LUNG_NOME];
        char cognome[LUNG_COGNOME];
        char codice_cliente[ID];
        libro lista_libri[10];
    } cliente;
    
    typedef struct {
        cliente clienti[LUNG_MAX_ARCHIVIO];
        int totale;
    } archivio_clienti;
    
    typedef struct {
        libro libri[LISTA_MAX_ARCHIVIO_LIBRI];
            int progressivo;
    } archivio_libri;
    
    
    int compila_libri(libro *_libro);
    int inserisci_libro(libro _nuovo_libro, archivio_libri *_arc_libri);
    int check_libri(char _codice_isbn[], archivio_libri _arc_libri);
    int inserisci_tesseramento(cliente _nuovo_tesseramento, archivio_clienti *_arc_clienti);
    int mostra_tesseramento_cliente(char _codice_cliente[], archivio_clienti _arc_clienti);
    int mostra_libri(archivio_libri arc_libri);
    
    /*
    *
    */
    
    int main(int argc, char** argv) {
        int scelta;
        int i;
        archivio_clienti arc_CLIENTI;
        archivio_libri arc_LIBRI;
        cliente nuovo_cliente;
        libro nuovo_libro;
        archivio_clienti arc_libri;
        autore nome_autore;
       arc_LIBRI.progressivo = 0;         
       
       
        do {
            system("clear");
            printf("****BIBLIOTECA****\n\n");
            printf("1. Inserisci nuovo libro\n");
            printf("2. Tessera cliente\n");
            printf("3. Prestito di un libro\n");
            printf("4. Visualizza prestiti di un cliente\n");
            printf("5. Visualizza libri\n");
            printf("0. Esci\n\n");
           
            printf("\tScelta: ");
            scanf("%d", &scelta);
           
            switch (scelta) {
                case 1:
                 system("clear");
                 printf("ISBN: ");
                    scanf("%s", nuovo_libro.ISBN);
                    if (check_libri(nuovo_libro.ISBN, arc_LIBRI) == 1) {
                        compila_libri(&nuovo_libro);
                        if (inserisci_libro(nuovo_libro, &arc_LIBRI) == 1)
                            printf("Errore: archivio pieno!\n");
                    } else
                        printf("Cliente gia' presente\n");
                   
                    getchar();
                    getchar();
                    break;
       
                    case 2:
                    system("clear");
                    printf("Codice fiscale del cliente: ");
                    scanf("%s", nuovo_cliente.codice_cliente);
                    
                    
                    case 5:
                    system("clear");
                    mostra_libri(arc_LIBRI);
                    getchar();
                    getchar();
                    break;
                
                   
            case 0:
                printf("Arrivederci, alla prossima ;)\n");
                break;
               
                default:
                   printf("Carattere errato: Inserire carattere valido.\n");
    
                   }
        } while (scelta != 0);
       
        return 0;
    }
    
    int compila_libri(libro *_libro) {
        int i;
        printf("Nome: ");
        scanf("%s", _libro->nome);
        printf("Cognome: ");
        scanf("%s", _libro->cognome);
        printf("Nazionalita': ");
        scanf("%s", _libro->nazionalita);
    }
    
    
    int inserisci_libro(libro _nuovo_libro, archivio_libri *_arc_libri) {
        if (_arc_libri->progressivo < LUNG_MAX_ARCHIVIO) {
            _arc_libri->libri[_arc_libri->progressivo] = _nuovo_libro;
            _arc_libri->progressivo++;
            return 0;
        } else
            return 1;
    }
    
    
    int mostra_libri(archivio_libri arc_libri) {
        int i;
        printf("Lista libri: \n");
        for (i = 0; i < arc_libri.progressivo; i++) {
            printf("%s\n", arc_libri.libri[i].nazionalita);
            printf("%s\n", arc_libri.libri[i].autori);
            printf("%s\n\n", arc_libri.libri[i].titolo);
        }
    }
    
    int check_libri(char _codice_isbn[], archivio_libri _arc_libri) {
        int i = 0;
        while (i < _arc_libri.progressivo && strcmp(_codice_isbn, _arc_libri.libri[i].ISBN) != 0)
            i++;
        if (i < _arc_libri.progressivo)
            return 0;
        else
            return 1;
    }
  • Re: Aiuto programma esercitazione strutture e funzioni

    Cioè? Cosa vuoi dire?
  • Re: Aiuto programma esercitazione strutture e funzioni

    Il programma deve avere la funzionalità di salvare l' autore con nome, cognome, titolo e nazionalità ed con ISBN del libro affiancato, mi fa inserire tutte queste cose, però poi non mi mostra nulla, non capisco perchè...ho usato un ciclo for per fare questo...ho postato il codice sopra.
  • Re: Aiuto programma esercitazione strutture e funzioni

    Ti devi spiegare meglio ...

    Quando il programma parte quale menu scegli? Cosa inserisci? Cosa dovrebbe succedere o cosa ti aspetti che succeda? Secondo te quali linee di codice non vanno o non fanno quello che dovrebbero?

    Se non sai spiegare neanche il problema è difficile darti una mano ...
  • Re: Aiuto programma esercitazione strutture e funzioni

    oregon ha scritto:


    Ti devi spiegare meglio ...

    Quando il programma parti quale menu scegli? Cosa inserisci? Cosa dovrebbe succedere o cosa ti aspetti che succeda? Secondo te quali linee di codice non vanno o non fanno quello che dovrebbero?

    Se non sai spiegare neanche il problema ...
    quando premo (1.) la prima funzionalità...mi fa inserire ISBN, nome, cognome e nazionalita' e quì ci siamo, quando premo (5.) nella la funzione che mostra i libri inseriti, mi appaiono degli spazi vuoti e solamente l' ultimo carattere digitato, ovvero quello nazionalita', la funzione (5.) nel menù dovrebbe richiamare tutto ciò che è stato inserito, però non riesco a capire perchè mi stampa a schermo solamente l' ultima cosa inserita...per fare questo che voglio fare, io ho usato un ciclo for che fa scorrere tutti gli array di carattere. Adesso è più chiaro ?
  • Re: Aiuto programma esercitazione strutture e funzioni

    La funzione compila_libri ti sembra corretta?
  • Re: Aiuto programma esercitazione strutture e funzioni

    oregon ha scritto:


    La funzione compila_libri ti sembra corretta?
    sicuramente ci sarà qualche errore, perciò sto chiedendo a voi, non ho capito dove sbaglio nell' inserimento.
  • Re: Aiuto programma esercitazione strutture e funzioni

    Scusa, la vuoi rileggere? L'hai scritta tu ... sono poche righe...
  • Re: Aiuto programma esercitazione strutture e funzioni

    oregon ha scritto:


    Scusa, la vuoi rileggere? L'hai scritta tu ... sono poche righe...
    come l' avevo scritta io era errata, perchè prendeva solo la struttura titoli, ora l' ho cambiata così, però non mi prende i valori nome, cognome e nazionalità.
    gli errori sono in mostra compila libri e mostra libri, me ne sono accorto da solo, però non riesco a passargli le strutture.
    int compila_libri(libro *_libro) {
        int i;
        printf("Nome: ");
        scanf("%s", _libro->nome);
        printf("Cognome: ");
        scanf("%s", _libro->cognome);
        printf("Nazionalita': ");
        scanf("%s", _libro->nazionalita);
    }
    int mostra_libri(archivio_libri arc_libri) {
        int i;
        printf("Lista libri: \n");
        for (i = 0; i < arc_libri.progressivo; i++) {
            printf("%s\n", arc_libri.libri[i].nazionalita);
            printf("%s\n", arc_libri.libri[i].autori);
            printf("%s\n\n", arc_libri.libri[i].titolo);
        }
    }
    
  • Re: Aiuto programma esercitazione strutture e funzioni

    Questa è corretta ed è diversa da quella che hai mostrato prima.

    Quale versione è quella che usi?
  • Re: Aiuto programma esercitazione strutture e funzioni

    oregon ha scritto:


    Questa è corretta ed è diversa da quella che hai mostrato prima.

    Quale versione è quella che usi?
    ora l' ho cambiata, appena ho notato che c' era l' errore, però non mi prende nome, cognome e nazionalità...me li segna in rosso.
    ho fatto un sacco di copie
  • Re: Aiuto programma esercitazione strutture e funzioni

    Ma che vuol dire "non mi prende"???
  • Re: Aiuto programma esercitazione strutture e funzioni

    Minomic, oragon. Il programma l' ho finito, l' ho fatto così.
    magari potete darmi qualche consiglio, oppure se c'è qualcosa che si può evitare per semplificarlo ulteriormente, fatemi sapere. Grazie mille.


    Questo è il programma terminato:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /*
     * 
     */
    
    // Grandezze
    #define LUNG_STRINGA 13
    
    // Grandezze archivi
    #define MAX_AUTORI 10
    #define MAX_LIBRI 100
    #define LISTA_CLIENTI 100
    #define MAX_PRESTITI 50
    
    // Errori
    #define ARCHIVIO_PIENO -1
    #define ARCHIVIO_VUOTO -2
    #define NON_TROVATO -3
    #define OPERAZIONE_INVALIDA -4
    
    // MENU
    #define ESCI 0
    #define INSERISCI_LIBRO 1
    #define INSERISCI_CLIENTE 2
    #define PRESTA_LIBRO 3
    #define MOSTRA_PRESTITI 4
    #define MOSTRA_LIBRI 5
    
    typedef struct {
        char nome[LUNG_STRINGA];
        char cognome[LUNG_STRINGA];
        char nazione[LUNG_STRINGA];
    } autore;
    
    typedef struct {
        char ISBN[LUNG_STRINGA];
        char titolo[LUNG_STRINGA];
        autore autori[MAX_AUTORI];
        int num_autori;
        int copie;
    } libro;
    
    typedef struct {
        libro libri[MAX_LIBRI];
        int num_libri;
    } archivio_libri;
    
    typedef struct {
        int codice_cliente;
        char nome[LUNG_STRINGA];
        char cognome[LUNG_STRINGA];
        char libri_prestati[MAX_PRESTITI][LUNG_STRINGA]; /*Invertite MAX_RENTS e MAX_STRING*/ //Per la lista dei libri prestati ho scelto un vettore di stringhe      
        int num_libri_prestati; //in cui vengono salvati solo gli ISBN dei libri al fine di evitare 
    } cliente; //di avere una ridondanza di dati uguali. Al momento della chiamata della
    
    typedef struct { //funzione che mostra i libri prestati verra' creata una corrispondenza
        cliente clienti[LISTA_CLIENTI]; //con l'archivio dei libri, mostrando quindi anche il nome 
        int num_clienti;
    } archivio_clienti;
    
    
    // Logiche di presentazione
    libro leggi_libro(); //Lettura dati per libri
    cliente leggi_cliente(); //e clienti
    
    // Logica applicativa
    void iniz_libri(archivio_libri *); //Inizializzazione degli archivi
    void iniz_clienti(archivio_clienti *); //
    
    int inserisci_libro(libro, archivio_libri*); //Inserimento di elementi
    int inserisci_cliente(cliente, archivio_clienti*); //all'interno degli archivi
    int inserisci_prestito(cliente*, libro*); //
    
    int cerca_libro(char[], archivio_libri); //Ricerca di elementi
    int cerca_cliente(int, archivio_clienti); //all'interno degli archivi
    
    int mostra_libri(archivio_libri); //Output specifici richiesti
    int mostra_prestiti(cliente, archivio_libri); //dalla traccia
    
    int main(int argc, char** argv) {
    
        archivio_libri archivio_libri;
        iniz_libri(&archivio_libri);
        archivio_clienti archivio_clienti;
        iniz_clienti(&archivio_clienti);
    
        libro nuovo_libro;
        cliente nuovo_cliente;
    
        int scelta, risultato;
        char conferma;
        int pos_libro, pos_cliente;
    
        int codice_cliente;
        char ISBN_libro[LUNG_STRINGA];
    
        do {
            printf("***********MENU BIBLIOTECA***********\n\n");
            printf("1) Inserisci nuovo libro\n");
            printf("2) Inserisci nuovo cliente\n");
            printf("3) Effettua un prestito\n");
            printf("4) Mostra prestiti di un cliente\n");
            printf("5) Mostra archivio libri\n");
            printf("0) Esci\n");
            printf("*************************************\n");
            printf("\tScelta: ");
            scanf("%d", &scelta);
            printf("-------------------------------------\n");
            switch (scelta) {
                case ESCI:
                    printf("Arrivederci\n");
                    break;
                case INSERISCI_LIBRO:
                    nuovo_libro = leggi_libro();
                    risultato = inserisci_libro(nuovo_libro, &archivio_libri);
                    switch (risultato) {
                        case ARCHIVIO_PIENO:
                            printf("Errrore: archivio libri pieno!\n");
                            break;
                        case OPERAZIONE_INVALIDA:
                            printf("Errore: ISBN gia' presente\n");
                            break;
                        default:
                            printf("Inserimento avvenuto con successo\n");
                            break;
                    }
                    break;
                case INSERISCI_CLIENTE:
                    nuovo_cliente = leggi_cliente();
                    risultato = inserisci_cliente(nuovo_cliente, &archivio_clienti);
                    if (risultato == ARCHIVIO_PIENO)
                        printf("Errore: archivio clienti pieno!\n");
                    else
                        printf("Codice generato: %d\nInserimento avvenuto con successo\n", risultato);
                    break;
                case PRESTA_LIBRO:
                    printf("ISBN libro: ");
                    scanf("%s", &ISBN_libro);
                    pos_libro = cerca_libro(ISBN_libro, archivio_libri);
                    if (pos_libro == NON_TROVATO)
                        printf("Errore: ISBN non trovato\n");
                    else {
                        printf("Codice cliente: ");
                        scanf("%d", &codice_cliente);
                        pos_cliente = cerca_cliente(codice_cliente, archivio_clienti);
                        if (pos_cliente == NON_TROVATO)
                            printf("Errore: codice cliente non trovato\n");
                        else {
                            printf("Continuare? [s/n]: ");
                            fflush(stdin);
                            scanf("%c", &conferma);
                            if (conferma == 's') {
                                risultato = inserisci_prestito(&archivio_clienti.clienti[pos_cliente], &archivio_libri.libri[pos_libro]);
                                switch (risultato) {
                                    case ARCHIVIO_PIENO:
                                        printf("Errore: archivio prestiti pieno per questo cliente!\n"); /*corretto vuoto con pieno*/
                                        break;
                                    case OPERAZIONE_INVALIDA:
                                        printf("Errore: copie del libro esaurite\n");
                                        break;
                                    default:
                                        printf("Prestito effettuato con successo\n");
                                        break;
                                }
                            } else
                                printf("Operazione annullata\n");
                        }
                    }
                    break;
                case MOSTRA_PRESTITI:
                    printf("Codice cliente: ");
                    scanf("%d", &codice_cliente);
                    pos_cliente = cerca_cliente(codice_cliente, archivio_clienti);
                    if (pos_cliente == NON_TROVATO)
                        printf("Errore: codice cliente non trovato\n");
                    else {
                        risultato = mostra_prestiti(archivio_clienti.clienti[pos_cliente], archivio_libri);
                        if (risultato == ARCHIVIO_VUOTO)
                            printf("Errore: archivio prestiti vuoti per questo cliente\n");
                    }
                    break;
                case MOSTRA_LIBRI:
                    risultato = mostra_libri(archivio_libri);
                    if (risultato == ARCHIVIO_VUOTO)
                        printf("Errore: archivio libri vuoto!\n");
                    break;
                default:
                    printf("Errore: scegli un'opzione valida\n");
                    break;
            }
            printf("-------------------------------------\n");
        } while (scelta != ESCI);
    
    
        return (EXIT_SUCCESS);
    }
    
    void iniz_libri(archivio_libri *_arc_libri) {
        _arc_libri->num_libri = 0;
    }
    
    void iniz_clienti(archivio_clienti *_arc_clienti) {
        _arc_clienti->num_clienti = 0;
    }
    
    libro leggi_libro() {
        int i;
        libro nuovo_libro;
        printf("ISBN: ");
        scanf("%s", nuovo_libro.ISBN);
        printf("Titolo: ");
        scanf("%s", nuovo_libro.titolo);
        printf("Numero di autori: ");
        scanf("%d", &nuovo_libro.num_autori);
        for (i = 0; i < nuovo_libro.num_autori; i++) {
            printf("\nAutore n%d\n", i + 1);
            printf("Nome: ");
            scanf("%s", nuovo_libro.autori[i].nome);
            printf("Cognome: ");
            scanf("%s", nuovo_libro.autori[i].cognome);
            printf("Nazione: ");
            scanf("%s", nuovo_libro.autori[i].nazione);
        }
        printf("Numero di copie: ");
        scanf("%d", &nuovo_libro.copie);
        return nuovo_libro;
    }
    
    cliente leggi_cliente() {
        cliente nuovo_cliente;
        printf("Nome: ");
        scanf("%s", nuovo_cliente.nome);
        printf("Cognome: ");
        scanf("%s", nuovo_cliente.cognome);
        return nuovo_cliente;
    }
    
    int inserisci_libro(libro _nuovo_libro, archivio_libri *_arc_libri) {
        if (_arc_libri->num_libri < MAX_LIBRI) {
            if (cerca_libro(_nuovo_libro.ISBN, *_arc_libri) == NON_TROVATO) {
                _arc_libri->libri[_arc_libri->num_libri] = _nuovo_libro;
                _arc_libri->num_libri++;
                return _arc_libri->num_libri - 1;
            } else
                return OPERAZIONE_INVALIDA;
        } else
            return ARCHIVIO_PIENO;
    }
    
    int inserisci_cliente(cliente _nuovo_cliente, archivio_clienti *_arc_clienti) {
        if (_arc_clienti->num_clienti < LISTA_CLIENTI) {
            _nuovo_cliente.codice_cliente = _arc_clienti->num_clienti + 1;
            _nuovo_cliente.num_libri_prestati = 0;
            _arc_clienti->clienti[_arc_clienti->num_clienti] = _nuovo_cliente;
            _arc_clienti->num_clienti++;
            return _nuovo_cliente.codice_cliente;
        } else
            return ARCHIVIO_PIENO;
    }
    
    int cerca_libro(char _ISBN[], archivio_libri _arc_libri) {
        int i = 0;
        while (i < _arc_libri.num_libri && strcmp(_ISBN, _arc_libri.libri[i].ISBN) != 0)
            i++;
        if (i < _arc_libri.num_libri)
            return i;
        else
            return NON_TROVATO;
    }
    
    int cerca_cliente(int codice_cliente, archivio_clienti _arc_clienti) {
        int i = 0;
        while (i < _arc_clienti.num_clienti && codice_cliente != _arc_clienti.clienti[i].codice_cliente)
            i++;
        if (i < _arc_clienti.num_clienti)
            return i;
        else
            return NON_TROVATO;
    }
    
    int inserisci_prestito(cliente *_cliente, libro *_libro) {
        if (_cliente->num_libri_prestati < MAX_PRESTITI)
            if (_libro->copie > 0) {
                _libro->copie--;
                strcpy(_cliente->libri_prestati[_cliente->num_libri_prestati], _libro->ISBN);
                _cliente->num_libri_prestati++;
                return _cliente->num_libri_prestati;
            } else
                return OPERAZIONE_INVALIDA;
        else
            return ARCHIVIO_PIENO;
    }
    
    int mostra_libri(archivio_libri _arc_libri) {
        if (_arc_libri.num_libri > 0) {
            int i;
            for (i = 0; i < _arc_libri.num_libri; i++) {
                printf("\nISBN: %s\n", _arc_libri.libri[i].ISBN);
                printf("Titolo: %s\n", _arc_libri.libri[i].titolo);
            }
            return _arc_libri.num_libri;
        } else
            return ARCHIVIO_VUOTO;
    }
    
    int mostra_prestiti(cliente _arc_clienti, archivio_libri _arc_libri) {
        if (_arc_clienti.num_libri_prestati > 0) {
            int i, pos_libro;
            printf("Nome: %s\n", _arc_clienti.nome);
            printf("Cognome: %s\n\n", _arc_clienti.cognome);
            for (i = 0; i < _arc_clienti.num_libri_prestati; i++) {
                printf("ISBN:  %s\n", _arc_clienti.libri_prestati[i]);
                pos_libro = cerca_libro(_arc_clienti.libri_prestati[i], _arc_libri);
                printf("Titolo: %s\n", _arc_libri.libri[pos_libro].titolo);
            }
            return _arc_clienti.num_libri_prestati;
        } else
            return ARCHIVIO_VUOTO;
    }
Devi accedere o registrarti per scrivere nel forum
59 risposte