codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct tabella{
int cod_prod;
char nome_prod[10];
char tipo_prod[20];
float prezzo;
int cancellato;
};
typedef tabella frutta;
void menu();
void insElemento();
void cercaElemento();
void delElemento();
void visElemento();
int main(){
int comando;
do{
menu();
printf("\nComando:\t");
scanf("%d", &comando);
switch(comando){
case 1:{
insElemento();
break;
}
case 2:{
cercaElemento();
break;
}
case 3:{
delElemento();
break;
}
case 4:{
visElemento();
break;
}
}
}while(true);
return 0;
}
void menu(){
printf("--------------------------");
printf("\n1 - Inserisci Prodotto\n");
printf("2 - Cerca Prodotto\n");
printf("3 - Elimina Prodotto\n");
printf("4 - Visualizza Prodotti\n");
printf("--------------------------");
}
void insElemento(){
int risp;
FILE *fp;
struct tabella frutta;
fp=fopen("frutta.txt","a");
do{
printf("Inserisci il codice del prodotto: ");
scanf("%d", &frutta.cod_prod);
printf("Inserisci il nome del prodotto: ");
scanf("%s", frutta.nome_prod);
printf("Inserisci la tipologia del prodotto: ");
scanf("%s", frutta.tipo_prod);
printf("Inserisci il prezzo del prodotto: ");
scanf("%f", &frutta.prezzo);
fwrite (&frutta, sizeof (struct tabella), 1, fp);
printf("Continuare? 1:SI - 0:NO\t");
scanf("%d", &risp);
}while (risp==1);
fclose(fp);
}
void cercaElemento(){ //Ho provato il comando strcmp, ma di norma si dovrebbe fare con il codice.
char search[10];
FILE *fp;
struct tabella frutta;
printf("Inserire il nome prodotto da ricercare ");
scanf("%s", search);
fp=fopen("frutta.txt", "r");
while(fread(&frutta, sizeof(struct tabella), 1, fp)>0){
if (!strcmp(frutta.nome_prod, search))
{
printf("Cod: %d\tNome: %s\tTipo: %s\tPrezzo: %f E\n" , frutta.cod_prod, frutta.nome_prod, frutta.tipo_prod, frutta.prezzo);
}
//PERCHE NON FUNZIONA l'ELSE?? INFATTI MI STAMPA Elemento non trovato tante volte quanto gli elementi presenti nel file.
/*else{
printf("Elemento non trovato!\n");
}*/
}
}
void delElemento(){
//Cancellazione Logica
int elimina;
FILE *fp;
struct tabella frutta;
printf("Inserire il codice prodotto da eliminare: ");
scanf("%d", &elimina);
fp=fopen("frutta.txt", "r");
int trovato=0;
while ((!trovato) && (!feof(fp))) {
fread(&frutta, sizeof(struct tabella), 1, fp);
if (frutta.cod_prod==elimina){
trovato = 1;
frutta.cancellato=1;
fseek(fp, -sizeof(struct tabella), SEEK_CUR);
fwrite(&frutta, sizeof(struct tabella), 1, fp);
}
}
fclose(fp);
//Cancellazione fisica
FILE *fp1, *fp2;
fp1=fopen("frutta.txt", "r");
fp2=fopen("frutta2.txt", "w");
while(!feof(fp1)){
fread(&frutta, sizeof(struct tabella), 1, fp);
if (!frutta.cancellato)
fwrite(&frutta, sizeof(struct tabella), 1, fp2);
}
fclose(fp1);
fclose(fp2);
remove("frutta.txt");
rename("frutta2.txt","frutta.txt");
}
void visElemento(){
FILE *fp;
struct tabella frutta;
fp=fopen("frutta.txt","r");
while(fread(&frutta, sizeof (struct tabella), 1, fp)>0){
printf("Cod: %d\tNome: %s\tTipo: %s\tPrezzo: %f E\n" , frutta.cod_prod, frutta.nome_prod, frutta.tipo_prod, frutta.prezzo);
}
fclose(fp);
}