Salve a tutti. Riscontro un problema con questo esercizio. Il compilatore non mi segnala nulla, quindi si tratta di un errore logico, ma onestamente non riesco a capire Appena avvio il programma mi dice: Windows ha smesso di funzionare :E Probabilmente è un disastro, ma sono una povera studentessa, comprendetemi
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXPRODOTTI 20
#define MAXLUNG 40
typedef struct {
int giorno, mese, anno;
}TipoData;
typedef struct {
char codice[6];
char *nomeProdotto;
int quanti; /*quanti prodotti devono essere ordinati*/
int disponibili; /*quanti prodotti sono già presenti in magazzino*/
double prezzo;
TipoData quando; /*Data prevista per l'arrivo dell'ordine*/
TipoData scadenza; /*Data di scadenza del prodotto*/
}TipoProdotto;
typedef struct {
TipoProdotto array_prodotti[MAXPRODOTTI];
int quanti_prodotti;
}TipoTabella;
int aggiungi_prodotto(TipoTabella *t); /*aggiunge un prodotto da ordinare*/
int elimina_prodotto(TipoTabella *t, char cod[]); /*elimina un prodotto dall'array*/
int modifica_quantita(TipoTabella *t, char cod[]); /*modifica la quantità di prodotti da ordinare*/
int modifica_data(TipoTabella *t, char cod[]); /*modifica la data di consegna del prodotto*/
int presenza(TipoTabella t, char cod[]); /*verifica quanti prodotti ci sono attualmente nel negozio, se ci sono*/
void stampa_prodotto(TipoTabella t, char cod[]); /*stampa le informazioni relative ad un prodotto*/
void stampa_tabella(TipoTabella t); /*stampa la tabella*/
int indice_prodotto(TipoTabella t, char cod[]); /*restituisce l'indice del prodotto nell'array, oppure -1*/
int main() {
TipoTabella tab;
int scelta, prodotti_disponibili, riuscita;
char buffer[MAXLUNG];
do {
printf("Menu' scelta:\n\n1- Ordina un nuovo prodotto;\n2- Elimina un prodotto;\n3-Verifica la disponibilità di un prodotto (quantità di prodotto);\n4- Modifica quantità da ordinare;\n5- Modifica data di consegna di un prodotto;\n6- Stampa di un prodotto;\n7- Stampa tabella;\n0- Fine.\n");
scanf("%d", &scelta);
switch(scelta) {
case 1:
riuscita = aggiungi_prodotto(&tab);
if(riuscita==0) printf("Aggiunta avvenuta correttamente.\n");
else printf("Errore.\n");
break;
case 2:
printf("Codice del prodotto da eliminare?\n");
scanf("%s", buffer);
riuscita = elimina_prodotto(&tab, buffer);
if(riuscita!=0) printf("Aggiunta avvenuta correttamente.\n");
else printf("Errore.\n");
break;
case 3:
printf("Codice del prodotto?\n");
scanf("%s", buffer);
prodotti_disponibili = presenza(tab, buffer);
printf("In magazzino sono presenti %d prodotti di questo tipo\n", prodotti_disponibili);
break;
case 4:
printf("Codice del prodotto?\n");
scanf("%s", buffer);
riuscita = modifica_quantita(&tab, buffer);
if(riuscita) printf("Aggiunta avvenuta correttamente.\n");
else printf("Errore.\n");
break;
case 5:
printf("Codice del prodotto?\n");
scanf("%s", buffer);
riuscita = modifica_data(&tab, buffer);
if(riuscita) printf("Aggiunga avvenuta correttamente.\n");
else printf("Errore.\n");
break;
case 6:
printf("Codice del prodotto da stampare?\n");
scanf("%s", buffer);
stampa_prodotto(tab, buffer);
break;
case 7:
stampa_tabella(tab);
break;
case 0:
printf("Fine programma.\n");
break;
default:
printf("Opzione non disponibile.\n");
} /*Fine switch*/
} while(scelta != 0); /*Fine do...while*/
printf("\n\n\n");
system("PAUSE");
return 0;
}
/*INIZIO FUNZIONI*/
/*------AGGIUNTA DI UN PRODOTTO ALLA TABELLA-------*/
int aggiungi_prodotto(TipoTabella *t) {
char buf[MAXLUNG], *aux;
if(t->quanti_prodotti == MAXPRODOTTI) {
printf("Spazio insufficiente.\n");
return -1;
}
printf("Codice prodotto?\n");
scanf("%s", t->array_prodotti[t->quanti_prodotti].codice);
printf("Nome prodotto?\n");
scanf("%s", buf);
aux = (char *)malloc(strlen(buf) + 1);
if(aux == NULL) {
printf("Problemi in allocazione.\n");
return -1;
}
else {
aux = buf;
t->array_prodotti[t->quanti_prodotti].nomeProdotto = aux;
}
printf("Quanti %s sono presenti in magazzino?\n", aux);
scanf("%d", &t->array_prodotti[t->quanti_prodotti].disponibili);
printf("Quanti %s si desiderano ordinare?\n", aux);
scanf("%d", &t->array_prodotti[t->quanti_prodotti].quanti);
printf("Prezzo prodotto?\n");
scanf("%g", &t->array_prodotti[t->quanti_prodotti].prezzo);
printf("Data scadenza prodotto? Inserire di seguito giorno, mese, anno\n");
scanf("%d %d %d", &t->array_prodotti[t->quanti_prodotti].scadenza.giorno, &t->array_prodotti[t->quanti_prodotti].scadenza.mese, &t->array_prodotti[t->quanti_prodotti].scadenza.anno);
printf("Data di consegna del prodotto? Inserire di seguito giorno, mese, anno\n");
scanf("%d %d %d", &t->array_prodotti[t->quanti_prodotti].quando.giorno, &t->array_prodotti[t->quanti_prodotti].quando.mese, &t->array_prodotti[t->quanti_prodotti].quando.anno);
return 0;
}
/*----ELIMINAZIONE PRODOTTO---*/
int elimina_prodotto(TipoTabella *t, char cod[]) {
int k = indice_prodotto(*t, cod);
int j = t->quanti_prodotti - 1;
if(k==-1) {
printf("Prodotto non presente in tabella.\n");
return 0;
}
strcpy(t->array_prodotti[k].codice, t->array_prodotti[j].codice);
t->array_prodotti[k].nomeProdotto = (char *)malloc(strlen(t->array_prodotti[j].nomeProdotto) + 1);
strcpy(t->array_prodotti[k].nomeProdotto, t->array_prodotti[j].nomeProdotto);
t->array_prodotti[k].quanti = t->array_prodotti[j].quanti;
t->array_prodotti[k].disponibili = t->array_prodotti[j].disponibili;
t->array_prodotti[k].prezzo = t->array_prodotti[j].prezzo;
t->array_prodotti[k].quando.giorno= t->array_prodotti[j].quando.giorno;
t->array_prodotti[k].quando.mese= t->array_prodotti[j].quando.mese;
t->array_prodotti[k].quando.anno= t->array_prodotti[j].quando.anno;
t->array_prodotti[k].scadenza.giorno= t->array_prodotti[j].scadenza.giorno;
t->array_prodotti[k].scadenza.mese= t->array_prodotti[j].scadenza.mese;
t->array_prodotti[k].scadenza.anno= t->array_prodotti[j].scadenza.anno;
t->quanti_prodotti--;
return 1;
}
int modifica_quantita(TipoTabella *t, char cod[]) {
int k = indice_prodotto(*t, cod);
if(k==-1) {
printf("Prodotto non presente in magazzino.\n");
return 0;
}
printf("Quantitativo da prodotto da ordinare?\n");
scanf("%d", &t->array_prodotti[k].quanti);
return 1;
}
int modifica_data(TipoTabella *t, char cod[]) {
int k = indice_prodotto(*t, cod);
if(k==-1) {
printf("Prodotto non presente in magazzino.\n");
return 0;
}
printf("Nuova dat d'arrivo? Scrivere di seguito giorno, mese, anno.\n");
scanf("%d %d %d", &t->array_prodotti[k].quando.giorno, &t->array_prodotti[k].quando.mese, &t->array_prodotti[k].quando.anno);
return 1;
}
int presenza(TipoTabella t, char cod[]){
int k = indice_prodotto(t, cod);
int prod = t.array_prodotti[k].disponibili;
if(k==-1) {
printf("Prodotto non presente in magazzino.\n");
return 0;
}
return prod;
}
void stampa_prodotto(TipoTabella t, char cod[]){
int k = indice_prodotto(t, cod);
if(k==-1) {
printf("Prodotto non presente in magazzino.\n");
return;
}
printf("- Nome prodotto: %s\n- Codice Prodotto: %s\n- Prezzo: %lf\n- Disponibili in magazzino: %d\n- Ordinati: %d\n- Data d'arrivo: %d.%d.%d\n", t.array_prodotti[k].nomeProdotto, t.array_prodotti[k].codice, t.array_prodotti[k].prezzo, t.array_prodotti[k].disponibili, t.array_prodotti[k].quanti, t.array_prodotti[k].quando.giorno, t.array_prodotti[k].quando.mese, t.array_prodotti[k].quando.anno);
return;
}
void stampa_tabella(TipoTabella t) {
int i;
int k = t.quanti_prodotti;
for(i=0; i<k; i++) {
printf("- Nome prodotto: %s\n- Codice Prodotto: %s\n- Prezzo: %lf\n- Disponibili in magazzino: %d\n- Ordinati: %d\n- Data d'arrivo: %d.%d.%d\n", t.array_prodotti[k].nomeProdotto, t.array_prodotti[k].codice, t.array_prodotti[k].prezzo, t.array_prodotti[k].disponibili, t.array_prodotti[k].quanti, t.array_prodotti[k].quando.giorno, t.array_prodotti[k].quando.mese, t.array_prodotti[k].quando.anno);
}
return;
}
int indice_prodotto(TipoTabella t, char cod[]) {
int i;
int k = t.quanti_prodotti;
for(i=0; i<k; i++) {
if(strcmp(t.array_prodotti[i].codice, cod) == 0)
return i;
}
return -1;
} /*Funzione di servizio*/