PDA

Visualizza la versione completa : [C++] Modifica e cancellazione record


botolo90
06-08-2011, 14:58
salve a tutti sono nuovo del forum. volevo chiedervi come posso fare per cancellare/modificare un record.
Sto scrivendo un programma per la gesione di un magazzino per autocarrozzeria (per un mio amico intendiamoci) che deve gestire pezzi di ricambio in più. Questo programma è stato sviluppato con OpenWatcom. Ora vi posto l'intero codice

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>


using namespace std;

#define N 20
#define D 99
#define NF "archivio.txt"
#define R "r"
#define W "w"
#define A "a"

// Definisco la struttura dei record

struct record{

char marca[N];
char modello[N];
char descrpezzo[D];
char quantita[6];
};

// Definisco le procedure che servono nel programma

char menu();
void creazione(FILE*);
void inserimento(FILE*);
void visualizzaMar(FILE*, char *);
void visualizzaArk(FILE*);
void breakTime( int seconds);

int main()
{
char scelta; // occorre per scegliere quale opzione eseguire piu avanti
FILE *s;
char mar[N]; // marca da confrontare

// Inizio programma principale

do{
scelta=menu();
switch(scelta){
case 'c':
creazione(s);
break;
case 'i':
inserimento(s);
break;
case 'r':
cout<<"Inserisci la marca: ";
cin>>mar;
visualizzaMar(s, mar);
break;

case 'v':
visualizzaArk(s);
break;
}


}while(scelta!='x');

cout<<"Grazie e arrivederci";
cin.get();
return 0;
}

char istruzioni()
{
char s;

system("cls");
cout<<" *** ATTENZIONE ***\n\n";
cout<<" Quando metti la desrizione del pezzo,";
cout<<"\n al posto dello spazio metti ll'underscore (_)";
cout<<"\n\n Per fare l'underscore (_) premere Shift + ?";
cout<<"\n Shift = tasto sotto invio, ? = punto interrogativo";
cout<<"\n Esempio: porta_anteriore_destra\n\n"<<endl;

return s;
}

char menu()
{
char s;

system("cls");
cout<<"*** MENU' PRINCIPALE ***\n\n";
cout<<"[C]reazione archivio\n";
cout<<"[I]nserimento record\n";
cout<<"[R]icerca record per marca\n";
cout<<"[V]isualizza archivio\n\n";
cout<<"E[x]it\n\n";
cout<<"-> ";
cin.get(s);
cin.ignore(80,'\n');


return s;
}

// Funzione che crea l'archivio

void creazione(FILE* s)
{
cout<<"ATTENZIONE TUTTI I DATI VERRANNO ELIMINATI!!!";
cin.get();
if((s=fopen(NF,W))==NULL){
cout<<"Impossibile creare il file.\n";
cin.get();
exit(-1);
}else{
cout<<"Archivio creato con successo.\n";
cin.get();
fclose(s);
inserimento(s);
}
}


// funzione per l'inserimento

void inserimento(FILE* s)
{
record r;

char i=istruzioni();
system("pause");
system("cls");

cout<<"INSERIMENTO RECORD\n\n";
if((s=fopen(NF,W))==NULL){
cout<<"Impossibile aprire il file.\n";
cin.get();
exit(-1);
}else{
cout<<"Digita \"x\" al posto della marca per terminare\n\n";
while(1){
cout<<"Inserisci la marca: ";
cin>>r.marca;
if(strcmp(r.marca,"x")==0)
break;
cout<<"Inserisci il modello: ";
cin>>r.modello;
cout<<"Inserisci una descrizione del pezzo: ";
cin>>r.descrpezzo;
cout<<"Inserisci la quantita: ";
cin>>r.quantita;
cout<<endl;

fprintf(s,"%s %s %s %s\n",r.marca,r.modello,r.descrpezzo,r.quantita);
}

fclose(s);
cin.ignore();
}

}

// ricerca record per marca

void visualizzaMar(FILE* s, char *mar)
{
record r;

bool trovato=false;
system("cls");
cout<<"VISUALIZZAZIONE RECORD\n\n";
if((s=fopen(NF,R))==NULL){
cout<<"Impossibile aprire il file.\n";
cin.get();
exit(-1);
}else{
int f=fscanf(s,"%s%s%s%s\n",r.marca,r.modello,r.descrpezzo,r.quantita);
while(f!=EOF){
if(strcmp(r.marca,mar)==0){
trovato=true;
break;
}
f=fscanf(s,"%s%s%s%s\n",r.marca,r.modello,r.descrpezzo,r.quantita);
}
if(trovato){
cout<<"\nMarca: "<<r.marca<<"\nModello: "<<r.modello;
cout<<"\nDescrizione: "<<r.descrpezzo<<"\nQuantita': "<<r.quantita<<endl;
}else
cout<<"Record non presente nell'archivio\n";

fclose(s);
}
cin.ignore();
cin.get();

}

// visualizza tutto l'archicio

void visualizzaArk(FILE* s)
{
record r;
int nr=0;
system("cls");
cout<<"VISUALIZZAZIONE ARCHIVIO\n\n";
if((s=fopen(NF,R))==NULL){
cout<<"Impossibile aprire il file.\n";
cin.get();
exit(-1);
}else{
int f=fscanf(s,"%s%s%s%s\n",r.marca,r.modello,r.descrpezzo,r.quantita);
while(f!=EOF){
nr++;
cout<<"Record "<<nr<<"\n";cout.width(N);
cout<<r.marca<<" ";cout.width(N);cout<<r.modello<<"\n";cout.width(N);
cout<<r.descrpezzo<<" - ";cout.width(N);cout<<" - ";
cout.width(6);cout<<r.quantita<<endl;

f=fscanf(s,"%s%s%s%s\n",r.marca,r.modello,r.descrpezzo,r.quantita);
}
fclose(s);
}
cin.get();

}

Non so perchè non il codice non mi esce indentato
Ora mi mancano le procedure di cancellazione record e modifica
Qualcuno può darmi una mano?
premetto che ho fatto una ricerca prima di postare ma non ho trovato niente che faccia al caso mio. Inoltre il c++ non lo ricordo tanto bene perciò vi chiedo dei commenti ad eventuali pezzi di codice che posterete.

grazie

Loading