Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    [C] Gestione di un magazzino

    Salve ho fatto un semplice programma in c per la gestione di un magazzino ma non mi vanno due funzioni. Questo è quello che dovrebbero fare:

    ModificaPrezzo

    Funzione che prende in ingresso il nome dell’articolo ed un prezzo e ne modifica il
    valore nell’archivio del magazzino.


    ModificaQt

    Funzione che prende in ingresso il nome dell’articolo ed una quantit`a e ne modifica
    il valore nell’archivio del magazzino.


    E qui c'è il codice. Dove ho sbagliato?

    codice:
    #include <stdio.h>
    #include <string.h>
    
    void InsArticolo(char[], int, float);
    void ModificaPrezzo(char[], float);
    void ModificaQt(char[], int);
    void StampaPrezzo(float, float);
    
    typedef struct{
    char tipo[20];
    int quantit;
    float prezzo;
    }articolo;
    
    articolo magazzino[100];
    int count=0;
    
    main()
    {
          
    char c, n[20];
    int q;
    float p, prezzo1, prezzo2;    
         
          
    do{
          printf("1-Inserisci Articolo\n");
          printf("2-Modifica Prezzo\n");
          printf("3-Modifica Quantita'\n");
          printf("4-Stampa Prezzo\n");
          printf("0-Fine\n");
    
    c=getchar();
    getchar();
    
    switch (c)
    {
           case '1':
                printf("Articolo: ");
                scanf("%s", n);
                printf("\nQuantita': ");
                scanf("%d", &q);
                printf("\nPrezzo: ");
                scanf("%f", &p);
                InsArticolo(n, q, p);
                break;
           case '2':
                printf("\nArticolo: ");
                scanf("%s", n);
                printf("\nPrezzo: ");
                scanf("%f", &p);
                ModificaPrezzo(n, p);
                break;
           case '3':
                printf("\nArticolo: ");
                scanf("%s", n);
                printf("\nQuantita': ");
                scanf("%d", &q);
                ModificaQt(n, q);
                break;
           case '4':
                printf("\nPrezzo1: ");
                scanf("%f", &prezzo1);
                printf("\nPrezzo2: ");
                scanf("%f", &prezzo2);
                StampaPrezzo(prezzo1, prezzo2);
                break;
           case '0':
                return 0;
    }
    while(!getchar());
    }while(c);
    }  
    
    
    
    void InsArticolo(char n[], int q, float p)
    {
    strcpy(magazzino[count].tipo, n);
    magazzino[count].quantit=q;
    magazzino[count].prezzo=p;
    ++count;
    }
    
    
    void ModificaPrezzo(char n[], float p)
    {
    int i;     
    
    for(i=0; i<count; i++)
    {
    if(magazzino[i].tipo == n)
    magazzino[i].prezzo=p;
    }
    }
    
    
    
    
    void ModificaQt(char n[], int q)
    {
    int i;
    
    for(i=0; i<count; i++)
    {
    if(magazzino[i].tipo == n) 
    magazzino[i].quantit=q;
    }
    }
    
    
    
    void StampaPrezzo(float p1, float p2)
    {
    int i, elem=0;
    
    for (i=0; i<count; i++)
    {
    if(magazzino[i].prezzo > p1 && magazzino[i].prezzo < p2)
    {
    printf("%s---%d---%f\n", magazzino[i].tipo, magazzino[i].quantit, magazzino[i].prezzo);
    elem++;
    }
    }
    printf("\nSono stati trovati %d articoli pari al %d per cento del totale\n" , elem, elem*100/count);  
    }

  2. #2

    Re: [C] Gestione di un magazzino

    Per confrontare due stringhe in C devi usare l'apposita strcmp() o meglio ancora
    la stricmp() che non fa distinzione tra lettere minuscole e maiuscole.
    codice:
    void InsArticolo(char n[], int q, float p)
    {
    	strncpy(magazzino[count].tipo, n, 19); Evitiamo di copiare più di 19 caratteri
    	magazzino[count].quantit=q;
    	magazzino[count].prezzo =p;
    	++count;
    }
    
    
    void ModificaPrezzo(char n[], float p)
    {
    	int i;
    	for(i=0; i<count; i++)
    	{
    		if( !stricmp(magazzino[i].tipo, n) ) // Confronto tra stringhe con la stricmp()
    			magazzino[i].prezzo=p;
    	}
    }
    
    
    void ModificaQt( char n[], int q)
    {
    	int i;
    
    	for(i=0; i<count; i++)
    	{
    		if( !stricmp(magazzino[i].tipo, n) ) // Confronto tra stringhe con la stricmp()
    			magazzino[i].quantit=q;
    	}
    }
    Anche il main è da rivedere
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Ti ringrazio molto. Io non ho mai usato la funzione stricmp. Quindi con l'istruzione if( !stricmp(magazzino[i].tipo, n) ) in pratica vedo se le stringhe presenti in magazzino[i].tipo e in n sono uguali giusto? Perchè si mette il !(punto esclamativo) prima? Cosa devo riguardare nella main? Grazie mille

  4. #4
    Originariamente inviato da luci89
    Ti ringrazio molto. Io non ho mai usato la funzione stricmp. Quindi con l'istruzione if( !stricmp(magazzino[i].tipo, n) ) in pratica vedo se le stringhe presenti in magazzino[i].tipo e in n sono uguali giusto? Perchè si mette il !(punto esclamativo) prima?
    La stricmp(), così come la strcmp() ritorna 0 se fra le due stringhe non ci sono differenze.
    [QUOTE]Originariamente inviato da luci89
    Cosa devo riguardare nella main? Grazie mille [/QUOT]
    Alcuni dettagli di 'stile' non molto belli a vedersi
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    [QUOTE]Originariamente inviato da Samuele_70
    La stricmp(), così come la strcmp() ritorna 0 se fra le due stringhe non ci sono differenze.
    Originariamente inviato da luci89
    Cosa devo riguardare nella main? Grazie mille [/QUOT]
    Alcuni dettagli di 'stile' non molto belli a vedersi
    Ho capito... Mi potresti dire qualche dettaglio di stile che dovrei rivedere?

  6. #6
    Per comodità puoi scriverti una bella macro, uno dei vantaggi del C

    codice:
    #define equal(s1, s2) !stricmp((s1), (s2))

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 © 2024 vBulletin Solutions, Inc. All rights reserved.