Visualizzazione dei risultati da 1 a 9 su 9

Visualizzazione discussione

  1. #1
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23

    Aiuto urgente programma con devc++

    Buona sera ,
    sono nuovo in programmazione e ancora non sono molto abile nel compilare programmi.
    Mi è stato assegnato un es. che però risulta non valido .
    Per favore, aiutatemi.
    Questo è il problema:



    Scrivere un programma C che gestisca l’archivio dei componenti presenti in un magazzino. Il programma deve lavorare su un vettore (componenti) di strutture, dove ognuna di queste contiene le informazioni su un componente: identificativo del componente, nome del componente, quantità del componente presente in magazzino. Gestire poi un ulteriore vettore (ordini) di strutture dove ognuna di queste contiene le informazioni relative a un ordine di acquisto: identificativo ordine, identificativo componente, quantità richiesta. Il programma deve: • Aggiungere un nuovo componente nell’archivio componenti (quindi nuovo identificativo, nuovo nome e nuova quantità iniziale) stampando un messaggio di errore se il componente è già presente o se l’archivio è pieno • Dato l’identificativo di un componente stamparne il nome e la quantità disponibile se il componente è presente, un messaggio di errore in caso contrario • Dato l’identificativo di un componente modificare la quantità disponibile stampando un messaggio di errore se il componente non è presente nell’archivio • Stampare tutte le informazioni dell’archivio nell’ordine con cui sono inserite • Aggiungere un nuovo ordine nell’archivio ordini (quindi nuovo identificativo ordine, nuovo identificativo componente e nuova quantità richiesta) stampando un messaggio di errore se l’ordine è già presente o se l’archivio è pieno • Verificare se gli ordini possono essere evasi, cioè se la quantità richiesta è inferiore a quella presente in magazzino, nel qual caso aggiornare le informazioni di magazzino e cancellare tutti gli ordini.



    Io sono riuscito a compilare questo programma che come ho già detto non risulta valido.:

    codice:
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h> 
    struct magazzino{ 
         
        char ricambio[50]; 
        int pezzi; 
        struct magazzino *next; 
    }; 
    typedef struct magazzino nodo; 
    int menu(); 
    void stampa_inventario(nodo *); 
    int conta_elementi(nodo *); 
    int conta_pezzi_totali(nodo *); 
    nodo *aggiungi_ricambio(nodo *); 
    nodo *trova_elemento(char *, nodo *); 
    void stampa_lista(nodo*); 
    void ricerca_ricambio(nodo*); 
    nodo *cancella_elemento(nodo *); 
    int prelievo_pezzi(nodo*); 
    int deposito_pezzi(nodo*); 
    nodo *cancella_lista(nodo *); 
    nodo *crea_lista_da_file(nodo *); 
    void salva_lista_su_file(nodo *); 
    int main(){ 
         
        nodo *start=NULL; 
                 
            printf("\n"); 
            stampa_inventario(start); 
            printf("\n\n"); 
             
            printf("Benvenuto\n"); 
        while(1){ 
            switch(menu()){ 
                    case 1:     start=aggiungi_ricambio(start); 
                            stampa_inventario(start); 
                            break; 
                    case 2:        start=cancella_elemento(start); 
                            stampa_inventario(start); 
                            break; 
                    case 3:     stampa_lista(start); 
                            stampa_inventario(start); 
                            break; 
                    case 4:        ricerca_ricambio(start); 
                            stampa_inventario(start); 
                                                break; 
                    case 5:        prelievo_pezzi(start); 
                            stampa_inventario(start); 
                            break; 
                    case 6:     deposito_pezzi(start); 
                            stampa_inventario(start); 
                            break; 
                    case 7:     start=cancella_lista(start); 
                            stampa_inventario(start); 
                            break; 
                    case 8:     start=crea_lista_da_file(start); 
                            stampa_inventario(start); 
                                                break; 
                    case 9:        salva_lista_su_file(start); 
                            stampa_inventario(start);     
                            break; 
                    case 0:        cancella_lista(start); 
                            printf("Arrivederci!\n"); 
                            exit(0); 
                    default: printf("Errore\n"); 
    
                } 
             
            } 
         
    } 
    void salva_lista_su_file(nodo *start){ 
        nodo *head=start; 
        int a=0; 
        FILE *fp=fopen("inventario.txt", "o");                //Memorizza l'inventario nel file di testo. 
        while(head!=NULL){                        //Scelta 9)save. 
            fprintf(fp, "%s %d\n", head->ricambio, head->pezzi); 
            head=head->next; 
            a++; 
        } 
        if(a>0){ 
            printf("Salvataggio effettuato.\n"); 
        }else{ 
            printf("Salvataggio non riuscito.\n"); 
        } 
        fclose(fp); 
    } 
    
    nodo *crea_lista_da_file(nodo *start){ 
            FILE *fp; 
            nodo *nuovo; 
        nodo *temp; 
            char nome_prodotto[64]; 
            int quantita; 
        char z='a'; 
        fp=fopen("inventario.txt", "r");                                //Crea la lista mentre legge i file, aggiungendo gli elementi in coda. 
            if(!fp){                            //Scelta 8)load. 
                    printf("Caricamento non effettuato.\n\n"); 
                    return NULL; 
            } 
        if(start!=NULL){ 
            while((z!='s')&&(z!='n')){ 
                printf("Vuoi sovrascrivere? Si o No? ");            //Qui avviene doppia stampa.??? 
                scanf("%c", &z); 
            } 
        } 
            while(feof(fp)==0){ 
                    nuovo=(nodo *)malloc(sizeof(nodo)); 
                    fscanf(fp, "%s %d\n", nome_prodotto, &quantita); 
                    nuovo->pezzi=quantita; 
                    strcpy(nuovo->ricambio, nome_prodotto); 
                    temp=start; 
            nuovo->next=temp; 
            start=nuovo; 
            } 
        if(feof(fp)!=0){ 
            printf("Caricamento effettuato.\n\n"); 
        } 
            fclose(fp); 
            return start; 
    } 
    nodo *cancella_lista(nodo *start){ 
        if(start!=NULL){ 
            cancella_lista(start->next);                //Cancella la lista quando chiudi il programma o quando devi rimuovere tutto. 
            free(start);                        //Scelta 7)rimuovi tutto e 0)esci. 
        } 
        return NULL; 
    } 
    
    int deposito_pezzi(nodo *start){ 
        char nome[64]; 
        nodo *temp; 
        int pr;                                //Per effettuare il deposito di pezzi. 
                                        //Scelta 6)deposito. 
        printf("Di quale pezzo vuoi fare il deposito?\n"); 
        scanf("%s", nome); 
        temp=trova_elemento(nome, start); 
        if(temp==NULL){ 
            printf("Ricambio non trovato.\n\n"); 
            return 0; 
        } 
        printf("Quanti pezzi depositi?\n "); 
        scanf("%d", &pr); 
        temp->pezzi=temp->pezzi+pr; 
        printf("Operazione effettuata.\n\n"); 
        return 0; 
    } 
    int prelievo_pezzi(nodo* start){ 
        char nome[50]; 
            nodo *temp; 
            int pr; 
            printf("Di quale pezzo vuoi fare il prelievo?\n"); 
            scanf("%s", nome);                        //Per effettuare il prelievo di pezzi. 
            temp=trova_elemento(nome, start);                //Scelta 5)prelievo. 
        if(temp==NULL){ 
            printf("Ricambio non trovato.\n\n"); 
            return 0; 
        } 
            printf("Quanti pezzi? \n"); 
            scanf("%d", &pr); 
            while(pr>temp->pezzi){ 
                    printf("N. pezzi da prelevare maggiore del n. pezzi in magazzino. Inserire numero corretto: \n"); 
                    scanf("%d", &pr); 
            } 
            temp->pezzi=temp->pezzi-pr; 
        printf("Operazione effettuata.\n\n"); 
    } 
    void ricerca_ricambio(nodo *start){ 
        char nome[50]; 
        nodo *temp; 
        printf("Quale ricambio cerchi?\n ");                //Cerca un ricambio e se lo trova stampa il numero di pezzi. 
        scanf("%s", nome);                        //Scelta 4)trova. 
        temp=trova_elemento(nome, start); 
        if(temp==NULL){ 
            printf("Il ricambio %s non è in inventario\n\n", nome); 
        }else{ 
            printf("%s: n. pezzi disponibili: %d\n", temp->ricambio, temp->pezzi); 
        } 
    } 
    void stampa_lista(nodo *start){ 
        if(start==NULL){ 
            printf("Fine\n\n");                    //Stampa la lista ricorsivamente. 
        }else{                                //Scelta 3)mostra. 
            printf("%s: %d pezzi\n", start->ricambio, start->pezzi); 
            stampa_lista(start->next); 
        } 
    } 
    
    nodo *cancella_elemento(nodo *start){ 
        char nome[50]; 
        nodo *temp; 
        nodo *head; 
        printf("Quale pezzo di ricambio vuoi cancellare?\n "); 
        scanf("%s", nome);                        //Scaneffizzando il nome del ricambio ti fa trovare e cancellare il nodo che contiene il ric. 
        temp=trova_elemento(nome, start);                //Scelta 2)cancella. 
        if(temp==NULL){ 
            printf("Ricambio non trovato.\n\n"); 
            return start; 
        } 
        head=start; 
        if(head==temp){ 
            head=temp->next; 
            free(temp); 
            printf("Ricambio eliminato.\n\n"); 
        } 
        while(head->next!=temp){ 
            head=head->next; 
        } 
        if(head->next==temp){ 
            head->next=temp->next; 
            free(temp); 
            printf("Ricambio eliminato.\n\n"); 
        }else{ 
            printf("Ricambio non trovato.\n\n"); 
        } 
        return head; 
    } 
    nodo *aggiungi_ricambio(nodo *start){ 
    nodo* head; 
    char nome_pezzo[50]; 
    int quantita; 
    nodo *temp=start; 
        printf("Che tipo di ricambio verrà aggiunto?\n"); 
        scanf("%s", nome_pezzo); 
         
        if(trova_elemento(nome_pezzo, start)!=NULL){ 
            temp=trova_elemento(nome_pezzo, start); 
            printf("L'elemento esiste già, quanti pezzi vuoi aggiungere? "); 
            scanf("%d", &quantita); 
            while(quantita<0){ 
                printf("I numeri negativi non sono validi, quanti pezzi vuoi aggiungere? "); 
                scanf("%d", &quantita); 
            }     
             
            temp->pezzi=temp->pezzi+quantita; 
            return start; 
        } 
                printf("Quanti pezzi? ");                    //Aggiunge un nodo per inserire un elemento in magazzino. 
                scanf("%d", &quantita);                        //Scelta 1)aggiungi. 
                    while(quantita<0){ 
                    printf("I numeri negativi non sono validi, quanti pezzi vuoi aggiungere? ");            //Qui non avviene doppia stampa. 
                    scanf("%d", &quantita); 
                    }     
                        head=(nodo *)malloc(sizeof(nodo)); 
                            if(head){ 
                                strcpy(head->ricambio, nome_pezzo); 
                                head->pezzi=quantita; 
                                head->next=start; 
                            } 
        return head; 
    } 
         
     
    nodo *trova_elemento(char nome[50], nodo *start){ 
        nodo *temp; 
        temp=start; 
        while(temp!=NULL){                        //Fornendo il nome del ricambio ti fa trovare il nodo che contiene quel ricambio. 
            if(strcmp(temp->ricambio, nome)==0){            //Si trova in cancella_elemento, prelievo_pezzi, deposito_pezzi e ricerca_ricambio. 
                return temp; 
            }else{ 
                temp=temp->next; 
            } 
        } 
        return temp; 
    } 
    void stampa_inventario(nodo *start){ 
         
        printf("Tipi di ricambi: %d. Numero totale di pezzi di ricambio: %d.\n", conta_elementi(start), conta_pezzi_totali(start)); 
         
    } 
    int menu(){ 
        int sc; 
        printf("Menu: \n1)aggiungi\n2)cancella\n3)mostra\n4)trova\n5)prelievo\n6)deposito\n7)rimuovi tutto\n8)load\n9)save\n0)esci\n"); 
        scanf("%d", &sc); 
        return sc; 
    } 
    int conta_elementi(nodo *start){ 
        if(start==NULL){ 
            return 0;                        //Conta ricors. gli elementi. Usato in stampa_inventario. 
        }else{ 
            return (1 + conta_elementi(start->next)); 
        } 
    } 
    int conta_pezzi_totali(nodo *start){ 
    int pezzi_totali; 
        if(start==NULL){                        //Conta il numero di pezzi in magazzino. Usato in stampa_inventario. 
            pezzi_totali=0; 
            return pezzi_totali; 
        }else{ 
            pezzi_totali=start->pezzi; 
            return(pezzi_totali + conta_pezzi_totali(start->next)); 
        } 
    }
    Vi prego mi potete aiutare nella compilazione giusta ?
    Ultima modifica di LeleFT; 29-10-2013 a 17:56

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.