Gestione di un Magazzino (tramite array multidimensionale)

di il
9 risposte

Gestione di un Magazzino (tramite array multidimensionale)

Buongiorno, devo creare un programma che permetta di visualizzare la merce nel magazzino (giacenza, prezzo, descrizione) e che consenta di apportare modifiche alle loro caratteristiche.
Inizialmente pensavo di utilizzare le struct, però ho trovato più facile usare un array multidimensionale (una colonna per ogni codice prodotto e 3 righe per elencare giacenza, prezzo e descrizione).
La mia domanda è: come faccio a salvare i dati in un File di testo ?
Tra puntatori a file, aperture in append e gnomi&folletti sto diventando FOLLEtto anche io (scusate lo sfogo)

Ecco il codice (potete eseguirlo...)
#include <stdio.h>
#include <stdlib.h>

int main () {
	int c, r, scelta;
	char magazzino [r][c];

	
	printf ("**MAGAZZINO**\n Seleziona una tra le seguenti azioni: \n");
	printf ("1: visualizza prodotti\n");
	printf ("2: modifica prodotti\n");
	scanf ("%d", &scelta);
	
if (scelta==1 || scelta==2) {
	switch(scelta) {
		case 1: printf ("inserisci il codice prodotto: ");
				scanf ("%d", &c);
				for (r=0; r<3; r++) {
					printf ("giacenza: %d \n prezzo: %d \n descrizione %s ", magazzino[r][c]);
				}
			break;
		case 2: printf ("inserisci il codice prodotto");
				scanf ("%d", &c);
				printf ("inserisci giacenza prezzo e descrizione in questo ordine");
				for (r=0; r<3; r++) {
					scanf ("%d", &magazzino[r][c]);
				}
			break;
			
	}

}
else {printf ("la scelta selezionata non esiste\n");
}
	
system ("PAUSE");
return 0;
}

9 Risposte

  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Ci sono parecchi problemi

    1) non puoi usare r e c per dimensionare il vettore se queste variabili non hanno un valore

    2) la scelta che hai fatto non va bene... Usa le strutture
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Non voglio assolutamente apparire presuntuoso, visto che sono in questo forum perché so di non sapere, ma hai provato il codice? Si avvia regolarmente, mi basta che salvi i dati su un file di testo e avrei finito (e il mio problema è proprio questo, come si fa??)
    Ps. Sono appena riuscito a creare il file magazzino.txt !
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Non so se stai preparando un esame universitario ma nel caso tu mi presentassi un codice con queste due linee iniziali

    int c, r, scelta;
    char magazzino [r][c];

    io ti boccerei subito senza leggere il resto. Quindi, non c'è bisogno di provare il programma, fidati.
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Ok, ma perchè?
    io so di avere un file contenente dei dati organizzati in una tabella 3righe per "X"colonne (quindi le colonne sarebbero potenzialmente infinite, ma sappiamo entrambi che non è cosi)
    Dovrei solo specificare che le righe non possono essere più di 3 visto che le caratteristiche da memorizzare sono solo 3 (2 interi e 1 char descrizione[], su quest'ultimo avrei altre domande, magari dopo).
    Quindi basterebbe rendere esplicito sin dall'inizio che r è positivo e minore di 3 ?
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Se chiedi il perché vuol dire che non hai chiaro il meccanismo di allocazione dello spazio per gli array del C.

    r e c non hanno valore definito all'inizio quindi neanche il tuo array ha dimensioni definita, altro che X colonne. Se non sai quanto spazio allocare usa i puntatori e l'allocazione dinamica dell'array.
    Puoi anche usare le variabili se il tuo compilatore supporta i VLA a patto comunque che queste abbiano un valore certo prima di usarle.
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Che l'array non abbia dimensione definita non credo che sia un problema insormontabile alla riga 8 del sorgente.
    Vero è che potrei dichiarare l'array con un limite di righe anche ben più grande di 3 subito dopo scanf ("%d", &c); e poi lavorare con for (r=0; r<3; r++) ...

    Comunque per favore potresti dirmi come faccio a salvare i dati inseriti dall'utente sul file magazzino.txt ?
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Mi dispiace ma non ci capiamo ... non ti posso dire come si salvano dei dati che non esistono ...

    Se vuoi veramente scrivere un programma che abbia un senso, utilizza

    1) allocazione dinamica del vettore

    2) le strutture per i dati

    3) un file in cui salvare le strutture (di testo o binario che sia)
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Alt, ho letto tutto il messaggio adesso. Ok ora provo a riscriverlo
  • Re: Gestione di un Magazzino (tramite array multidimensionale)

    Ecco il nuovo codice, stavolta c'è la struct come consigliato da oregon
    L'unico errore che mi separa dall'esecuzione del programma è:
    29 24 [Error] no match for 'operator!=' (operand types are 'int' and 'codice_prodotto {aka tipo_disco}')
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct tipo_disco {
    	char autore [10];
    	int giacenza;
    	int prezzo;
    } codice_prodotto; //il codice deve avere un limite di caratteri, ho deciso 25!
    
    codice_prodotto elenco_codici[5000]; //ho creato l'array contenente 5000 codici e rispettivi dischi
    int flag, i, scelta, codice_inserito;
    int main () {
    
    FILE *fp;
    fp=fopen ("magazzino.txt", "a+"); //crea e apre il file "magazzino.txt", in lettura e scrittura
    	
    	printf ("**MAGAZZINO**\n Seleziona una tra le seguenti azioni: \n");
    	printf ("1: visualizza prodotti\n");
    	printf ("2: aggiorna prodotti\n");
    	scanf ("%d", &scelta);
    	
    if (scelta==1 || scelta==2) {
    	switch(scelta) {
    		case 1: printf ("inserisci il codice prodotto: ");
    				scanf ("%d", &codice_inserito);
    				
    				while (i>=0 && i<5000){
    				if (codice_inserito!=elenco_codici[i]) { //ERRORE!!!!!!
    					i++;
    					flag=0;}
    				else {flag++;}
    				}
    				if (flag!=0){
    					printf ("%s", elenco_codici[codice_inserito].autore);
    					printf ("%s", elenco_codici[codice_inserito].giacenza);
    					printf ("%s", elenco_codici[codice_inserito].prezzo);
    				}	
    				break;
    	
    		case 2: printf ("inserisci il codice prodotto"); //ANCORA DA SVILUPPARE
    				
    				
    				
    				
    				
    				
    				
    			break;
    			
    	}
    
    }
    else {printf ("la scelta selezionata non esiste\n");}
    	int fclose (FILE *fp); //CHIUDE IL FILE	
    system ("PAUSE");
    return 0;
    }
    
    Suggerimenti ?
Devi accedere o registrarti per scrivere nel forum
9 risposte