Grazie alle vostre direttive sono riuscito a scrivere tutto il codice tranne due funzioni fondamentali:
1)la funzione cancella funziona con tutti trannne con il primo elemento della lista(infatti ho creato un nuovo nodo, ma non funziona lo stesso);
2)la funzione leggi.
Ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct articolo
{
char nome[20];
int q;
struct articolo *next;
};
typedef struct articolo nodo;
char menu();
nodo *cons(nodo *start);
void stampa(nodo *start);
void trova(nodo *start);
void deposita(nodo *start);
void prelieva(nodo *start);
nodo *cancella(nodo *start);
void scrivi(nodo *start);
int main(int argc, char **argv)
{
char sc = '\0';
nodo *start = NULL;
while(sc!='q')
{
sc=menu();
switch(sc)
{
case 'a': start=cons(start); break;
case 'd': cancella(start); break;
case 's': stampa(start); break;
case 't': trova(start); break;
case 'p': prelieva(start); break;
case 'i': deposita(start); break;
case 'l': break;
case 'w': scrivi(start); break;
}
}
return 0;
}
char menu()
{
char sc = '\0';
printf("A)dd, D)elete, S)tampa, T)rova, P)relievo, I)nserisci, L)oad, W)rite, Q)uit.\n");
scanf(" %c", &sc);
return sc;
}
nodo *cons(nodo *start)
{
char nom_prod[20];
int quant;
nodo *nuovo;
printf("Inserisci nome articolo:\t");
scanf(" %s", nom_prod);
nuovo=(nodo *)malloc(sizeof(nodo));
if(nuovo != NULL)
{
nuovo->next=start;
printf("Inserisci la quantità: ");
scanf(" %d", &quant);
strcpy(nuovo->nome,nom_prod);
nuovo->q=quant;
return nuovo;
}
return start;
}
void stampa(nodo *start)
{
while(start!=NULL)
{
printf("%s - %d\n", start->nome, start->q);
start=start->next;
}
printf("\n");
}
void trova(nodo *start)
{
char parola[20];
printf("Quale oggetto vuoi ricercare?\t");
scanf("%s", parola);
while( strcmp (parola, start->nome) !=0)
{
start=start->next;
}
printf("%s\t %d\n", start->nome, start->q); printf("\n");
}
void deposita(nodo *start)
{
char parola[20];
int pezzi;
printf("Quale oggetto vuoi ricercare?\t");
scanf("%s", parola);
while( strcmp (parola, start->nome) !=0)
{
start=start->next;
}
printf("Quanti pezzi devo aggiungere?\t");
scanf("%d", &pezzi);
start->q=start->q + pezzi;
printf("%s\t %d\n", start->nome, start->q); printf("\n");
}
void prelieva(nodo *start)
{
char parola[20];
int pezzi;
printf("Quale oggetto vuoi ricercare?\t");
scanf("%s", parola);
while( strcmp (parola, start->nome) !=0)
{
start=start->next;
}
printf("Quanti pezzi devo prelevare?\t");
scanf("%d", &pezzi);
if((start->q - pezzi) >= 0)
{
start->q=start->q - pezzi;
printf("%s\t %d\n", start->nome, start->q); printf("\n");
}else{
printf("Non puoi sottrarre %d pezzi, perchè in magazzino sono presenti solo %d pezzi\n", pezzi, start->q);
printf("\n");
}
}
nodo *cancella(nodo *start)
{
char parola[20]; nodo *nuovo2;
printf("Quale oggetto vuoi eliminare?\t");
scanf("%s", parola);
nuovo2=(nodo *)malloc(sizeof(nodo));
nuovo2->next=start;
while( strcmp (parola, nuovo2->next->nome) !=0)
{
nuovo2=nuovo2->next;
}
nuovo2->next=nuovo2->next->next;
printf("L'oggetto da te richiesto (%s) è stato correttamente ELIMINATO\n", parola);
printf("\n");
return start;
}
void scrivi(nodo *start)
{
FILE *pf;
pf=fopen("numeri.txt", "w");
if(pf)
{
while(start!=NULL)
{
fprintf(pf, "%s\t %d\n", start->nome, start->q);
start=start->next;
}
fclose(pf);
printf("Il file è stato scritto correttamente\n"); printf("\n");
}else
{
printf("Non è stato possibile scrivere il file\n");}
}