Problema con la funzione elimina

di il
4 risposte

Problema con la funzione elimina

Il seguente programma è fatto in codeblocks mi da errore nella dichiarazione della funzione elimina
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define max 20

typedef struct {
char ProdottiS[50];
float Prezzi;
char CodicePr[80];
} ele;


typedef ele* PEle;
int check;


char Menu_Iniziale(void);
void Menu2(PEle, int);
void Apertura_Supermercato(PEle *, int *);
float Quantita_Prodotti(PEle, int);
void CostoTotale_Scontrino(PEle, int, float);
void Inserisci_ProdottoSuper(PEle *, int *);
void Ordinamento(PEle *, int *, ele);
void Sistemazione_Prodotti (char *, char *);
void PulituraVideo(void);
void Ricerca_Sequenziale_Prodotto (PEle SuperM, int v, int bingo);
void Elimina(PEle &SuperM, int &v);
void ChiusuraArchivio_Supermercato(PEle, int);


int main(void){
PEle SuperM=(PEle)malloc(sizeof(ele)*max);//Assegniamo un'area di memoria PEle a SuperM di dimensioni già prestabilite
// (malloc, e' una funzione che associa l'area di memoria)
int v;
int bingo=0;
char cliente[30];
int contatti=0;
check=0;
int decisione;
if (SuperM==NULL)return 0;
Apertura_Supermercato(&SuperM, &contatti);
printf("\n\t\t*BENVENUTO NEL SUPERMERCATO*");
do
{
decisione=Menu_Iniziale();
if(decisione=='1'){
PulituraVideo();
printf("\n\nSCEGLI UN PRODOTTO");
Menu2(SuperM, contatti);
}
if(decisione=='2'){
PulituraVideo();
Inserisci_ProdottoSuper(&SuperM, &contatti);
PulituraVideo();
}
if(decisione=='3'){
system("cls");
printf("\n\n\nRicerca prodotti");
Ricerca_Sequenziale_Prodotto (SuperM,v,bingo);

}
if(decisione=='4'){
system("cls");
printf("\n\nElimina prodotto");
Elimina(&SuperM, &contatti);
}

}
while(decisione!='0');
if(check)ChiusuraArchivio_Supermercato(SuperM, contatti);
free(SuperM);
getch();
return 1;
}


char Menu_Iniziale(void){
char decisione;
do{
printf("\n\n1 - VISUALIZZARE PRODOTTI PRESENTI\n\n");
printf("\n\n2 - INSERIMENTO PRODOTTI\n\n");
printf("\n\n3 - RICERCARE PRODOTTI\n\n");
printf("\n\n4 - ELIMINARE PRODOTTI\n\n");
printf("\n\n0 - USCITA\n\n");
printf("\nPrego,indicare qui la SCELTA: ");
decisione=getchar();
fflush(stdin);
}
while ((decisione!='0')&&(decisione!='1')&&(decisione!='2')&&(decisione!='3'));
return decisione;
}

void Menu2(PEle SuperM, int v){
if (!v){
printf ("\n\tIl supermercato non dispone di prodotti\n");
getchar();
return;
}
int decisione;
int y;
for (y=0;y<v;y++){
printf ("\n%d - %s, prezzo: %1.2f - %s",y+1, SuperM[y].ProdottiS, SuperM[y].Prezzi, SuperM[y].CodicePr);
}
do {
printf ("\n Inserisci la tua scelta: ");
scanf ("%d",&decisione);
fflush(stdin);
printf ("%d", v);
} while ((decisione>v)||(decisione<1));
float quant = Quantita_Prodotti(SuperM, decisione);
CostoTotale_Scontrino (SuperM, decisione, quant);

}



float Quantita_Prodotti(PEle SuperM, int scl){
float conf;
do{
printf("\nScegliere una quantita' prego: ", SuperM[scl-1].ProdottiS);
scanf("%f",&conf);
fflush(stdin);
}
while(conf==0);
return conf;
}

void CostoTotale_Scontrino(PEle SuperM, int scl, float conf){
printf("\n---------------------------");
printf("\n|Scontrino Fiscale: %1.2f|", SuperM[scl-1].Prezzi*conf);
printf("\n---------------------------");
fflush(stdin);
}

void Inserisci_ProdottoSuper(PEle *V, int *v) {
PulituraVideo();
ele x;
if ((*v)==max) {
printf ("\nIl supermercato è stato riempito totalmente");
getchar();
return;
}
printf ("\nProdotti da inserire: ");
gets(x.ProdottiS);
printf ("\nPrezzo del prodotto: ");
scanf ("%f", &x.Prezzi);
printf ("\nCodice del prodotto: ");
scanf("%s",&x.CodicePr);
fflush(stdin);
Ordinamento(&(*V), &(*v), x);
}

void Apertura_Supermercato(PEle *V,int *v){
FILE *F;
F = fopen ("Supermarket.Arc", "r");
if (F==NULL) return;
ele x;
while (!feof(F)){
if (fread(&x,sizeof(ele),1,F)) {
(*V)[*v]=x;
(*v)++;
}
}
fclose(F);
check=0;
return;
}


void Ordinamento (PEle *V, int *v, ele x) {
char s1[255],s2[255];
check = 1;
int f = *v - 1;
Sistemazione_Prodotti (x.ProdottiS,s1);
while (f>=0) {
Sistemazione_Prodotti ((*V)[f].ProdottiS,s2);
if(strcmp(s2,s1)>0) {
(*V)[f+1]=(*V)[f];
f--;
}
else {
(*V)[f+1]=x;
(*v)++;
return;
}
}
(*V)[0]=x;
(*v)++;
return;
}

void ChiusuraArchivio_Supermercato(PEle V, int v){
FILE *F;
F = fopen ("Supermarket.Arc","w");
if (F==NULL) return;
int j=0;
ele x;
while (j<v){
x=V[j];
fwrite (&x, sizeof(ele),1,F);
j=j+1;
}
fclose(F);//chiusura file di testo ( ARCHIVIO )
check=0; //(controllo)
return;
}

void PulituraVideo(void){
system("cls");// Pulizia dello schermo
}
void Ricerca_Sequenziale_Prodotto (PEle SuperM, int v, int bingo){
PulituraVideo();//Pulizia del Video
char RicePrdt[40];// Ricerca_Sequenziale_Prodotto Prodotto
int k;//variabile intera di comodo intera per i cicli
printf ("Ricercare un prodotto del supermercato: ");gets(RicePrdt);

for (k=0;k<v;k++){ // per k che va da 0, minore di v e incrementa k
if (!strcmp(SuperM[k].ProdottiS,RicePrdt))// Confronta le stringhe
bingo=1;
}
if (bingo==1) {
_sleep(1000);
printf ("\nIl Prodotto digitato e' stato trovato");getchar();
}
else//altrimenti
{
_sleep(1000);
printf ("\nIl Prodotto digitato non e' stato trovato"); getchar();
}
}




void Sistemazione_Prodotti (char *s1, char *s2) {
char car;
while (*s1) {
car=*s1;
if((car>='a')&&(car<='z'))car -= 'a'-'A';
if(((car>='A')&&(car<='Z'))||((car>='0')&&(car<='9'))){*s2=car;s2=s2+1;}
s1++;
}
*s2=0;//indirizzo di s2
}

void Elimina(PEle &SuperM, int &v){

PEle SuperM = (PEle)malloc(sizeof(ele)*max);
Pulisci_schermo();
int trovato=0; int bingo=0; int contatti=0;
char ProdottiS[40];
printf("\n\tNome da eliminare: ");
gets(ProdottiS);
trovato = Ricerca_Sequenziale_Prodotto(SuperM, v, bingo);

if (trovato==0) {
printf("\nImpossibile eliminare");
getchar();
return;
}
else {
getchar();
int j=0;
int i;
for (i=0; i<v; i++) {
Ele x;
if (strcmp(SuperM.Nome,nome)) {
Super2[j]=SuperM;
j++;
}
}
SuperM=Super2;
v=j;
controllo=1;
printf("Elemento eliminato");
getchar();
}
}

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte