Ho alcuni problemi con la procedura di cancellazione di un elemento inserito nel file. Qualcuno può aiutarmi?
Non capisco quali errori ci possano essere!!! Grazie a tutti!!!!
codice:
//Procedura per cancellare un abbonamento
void CancellaProdotto()
{
char cFileTemp[]="tempfile.dat"; /*File temporaneo: serve per copiare tutti i
dati da mantenere nel file1; verrà poi rinominato con il nome del file1*/
PointerElem1 pTemp1; //variabile puntatore per la gestione della lista1
PointerElem1 pTemp1_2;
char Codicel[LCODICE];
PointerElem1 pApp1; // variabile nella quale viene ricopiata la lista1
bool bCancellato=false; //variabile che indica se è stato cancellato
bool bElem=false; //se è vera vuol dire che vi era un solo elemento nella lista1
CaricaFile1();
system("CLS");
system("color C");
pApp1=pLista1;
cancella(Codicel,LCODICE);
cout<< "Inserisci codice prodotto: ";
cin.getline(Codicel,sizeof(Codicel));
while (pApp1 != NULL)
{
if(ControllaListaVuota1(pLista1))
{
system("cls");
system("color C");
cout<<"Non sono stati inseriti elementi!!!\n";
system("pause");
}
else
{
if (iNRecordFile1==1) //se vie è un solo elemento nella lista
{
//se è uscito i dati vengono cancellati, altrimenti no
if (strcmp(pLista1->DatiProdotto.codice,Codicel)==0)
{
bElem=true;
bCancellato=true;
pTemp1_2=pLista1;
pLista1=pTemp1_2->pNext1;
//cancella l'elemento dalla lista
delete pTemp1_2;
remove(cFile1);
}
}
//se si tratta di più di un elemento nella lista
if (bElem==false)
{
pTemp1=pLista1;
pTemp1_2=pLista1->pNext1;
while (pTemp1_2 !=NULL)
{
if (strcmp(pTemp1_2->DatiProdotto.codice,Codicel)==0)
{
bCancellato=true;
pTemp1->pNext1=pTemp1_2->pNext1;
//Cancella l'elemento dalla lista
delete pTemp1_2;
}
pTemp1_2=pTemp1_2->pNext1;
pTemp1=pTemp1->pNext1;
}
pTemp1=pLista1;
while (pTemp1 !=NULL)
{
if(strcmp(pTemp1->DatiProdotto.codice,Codicel)!=0)
{
strcpy(Catalogo.codice,pTemp1->DatiProdotto.codice);
strcpy(Catalogo.descrizione,pTemp1->DatiProdotto.descrizione);
strcpy(Catalogo.minima,pTemp1->DatiProdotto.minima);
strcpy(Catalogo.misura,pTemp1->DatiProdotto.misura);
strcpy(Catalogo.prezzo,pTemp1->DatiProdotto.prezzo);
strcpy(Catalogo.quantita,pTemp1->DatiProdotto.quantita);
strcpy(Catalogo.reparto,pTemp1->DatiProdotto.reparto);
/*Apro il file in modalità "ios::app": questo permette di aggiungere
il record appena inserito nella lista. I dati vengono scritti
nel FileTemp*/
FileOut.open(cFileTemp , ios::out | ios::binary | ios::app);
if(FileOut)
{
//Controllo che il file sia aperto e funzionante
if(FileOut.good())
{
//Effettuo la scrittura del record in coda al file
FileOut.write((char*) &Catalogo, sizeof(Prodotto));
}
//Chiusura del file
FileOut.close();
}
}
pTemp1=pTemp1->pNext1;
}
}//if
pApp1=pApp1->pNext1;
}//else
}
deleteFile(cFile1);
rename(cFileTemp, cFile1); //il FileTemp viene rinominato con il nome del File1
if (iNRecordFile1!=0)
{
cout<<"...............Cancellazione avvenuta con successo!!!...............\n";
system("pause");
}
EliminaListaMemDin1(pLista1, Catalogo);
return;
Menu_princ();
}