By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,377 Members | 1,660 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,377 IT Pros & Developers. It's quick & easy.

Help with files in C - Delete data in C file

P: 2
Hi you guys! How are? I'm new at the forum and know you could help me!!

I Have a C program that works with file...it's so simple, but i need help with deletion of some data in a file(.dat). This data i refer, is something previous recorded in file.
Besides, i need to implement a bubble sort algorithm to sort the product code.
Most of the code or some words are in portuguese, but i think you may understand that!!!

See the following code and try to help me...


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include<string.h>

//cria estrutura do arquivo
struct material {

int codigo, estoque;
char nome[20], genero[20];
float preco;

};

typedef struct material Material;

//definicao das funcoes
void cadastrar();
void listar();
void pesquisar();
//void alterar(); pensar em como implementar!!?
//void ordenar();


int main ()
{
int opcao=1;
while(opcao !=0) {
clrscr();
cout<<"\n\n\t\t ============================";
cout<<"\n\t\t ---- Spaces Bookstore ----";
cout<<"\n\n\t\t ============================";
cout<<"\t\t\n\n\nNome: Gustavo Costa de Freitas"; cout<<"\nRA: 004200600084";
cout<<"\n\n1 - Cadastrar livro ou revista";
cout<<"\n2 - Listar livro ou revista";
cout<<"\n3 - Pesquisar nome do livro ou revista";
//cout<<"\n4 -Ordenacao de codigos";
cout<<"\n0 - Sair";
cout<<"\n\nDigite a opcao desejada: ";
cin>>opcao;


switch(opcao) {
case 1: cadastrar(); break;
case 2: listar(); break;
case 3: pesquisar(); break;
//case 4: ordenar(); break;
default: cout <<"Opcao invalida"; break;
}
}
return 0;
}

//funcao para cadastrar livros e revistas
void cadastrar() {

Material pr;
FILE * parq;
int cod;

parq = fopen("material.dat", "ab");
if (parq==NULL)
{
cout<<"\nERRO na abertura do Arquivo para gravacao";
getch();
}
else
{
clrscr();
cout<<"\nCADASTRO DE LIVROS E REVISTAS";
cout<<"\n-----------------------------";
cout<<"\nDigite o codigo do livro ou revista <0 para sair>: ";
cin>> pr.codigo;
//if(pr.codigo == pr.codigo)
//cout<<"\nCodigo ja existente!";
while (pr.codigo !=0) {
cout<<"\nNome do Produto: ";
gets (pr.nome);
cout<<"\nQuantidade do Produto em estoque: ";
cin>> pr.estoque;
cout<<"\nDigite o genero do Produto: ";
gets (pr.genero);
cout<<"\nDigite o preco do Produto: ";
cin>> pr.preco;
fwrite (&pr,sizeof (Material),1,parq);
cout << "\n\nCadastro efetuado com sucesso!";
getch();
clrscr();
cout<<"\n\nDigite o codigo do Produto <0 para sair>: ";
cin>> pr.codigo;
}
fclose(parq);
}
}

//funcao para listar os livros e revistas
void listar() {

Material pr;
FILE * parq;

parq = fopen("material.dat", "rb");
if (parq==NULL)
{
cout<<"\nERRO na abertura do Arquivo para leitura";
getch();
}
else
{
clrscr();
cout<<"\nLISTAGEM DE LIVROS E REVISTAS ";
cout<<"\n-------------------------------";
cout<<"\n\n0 - Voltar";
cout<<"\n-----------";
fread(&pr,sizeof(Material),1,parq);
while (!feof(parq))
{
cout<<"\n";
cout<<"\nCodigo: " <<pr.codigo;
cout<<"\nNome: " <<pr.nome;
cout<<"\nEstoque: " <<pr.estoque;
cout<<"\nGenero: "<<pr.genero;
cout<<"\nPreco: " <<pr.preco;
fread(&pr,sizeof(Material),1,parq);
}
getch();
}
fclose(parq);
}


//funcao para pesquisar os livros e revistas
void pesquisar() {

Material pr;
FILE * parq;
int cod, flag, opt;
char nomprod[20], resp[3], genero[20];

parq = fopen("material.dat", "rb");
if (parq==NULL)
{
cout<<"\nERRO na abertura do Arquivo para leitura";
getch();
}
else
{
clrscr();
cout<<"\nPESQUISA DE LIVROS E REVISTAS";
cout<<"\n-----------------------";
cout<<"\nEscolha o tipo de pesquisa";
cout<<"\n\n0 - Voltar";
cout<<"\n1 - Nome";
cout<<"\n2 - Codigo";
cout<<"\n3 - Genero";
cout<<"\n";
cin>>opt;

if (opt == 2) {
cout<<"\n\nDigite o codigo a ser pesquisado: ";
cin >> cod;
flag = 0;
fread(&pr,sizeof(Material),1,parq);
}
while (!feof(parq))
{
if (cod == pr.codigo)
{
cout<<"\nCodigo: " <<pr.codigo;
cout<<"\nNome: " <<pr.nome;
cout<<"\nEstoque: " <<pr.estoque;
cout<<"\nGenero: " <<pr.genero;
cout<<"\nPreco: " <<pr.preco;
flag = 1;
//cout<<"\nDeseja pesquisar outro produto?";
}
fread(&pr,sizeof(Material),1,parq);
}

if (opt == 1) {
cout<<"\n\nDigite o nome a ser pesquisado: ";
gets(nomprod);
flag = 0;
fread(&pr,sizeof(Material),1,parq);
while (!feof(parq))
{
if (strcmp(nomprod, pr.nome))
{
cout<<"\nCodigo: " <<pr.codigo;
cout<<"\nNome: " <<pr.nome;
cout<<"\nEstoque: " <<pr.estoque;
cout<<"\nGenero: "<<pr.genero;
cout<<"\n\nPreco: " <<pr.preco;
flag = 1;
//cout<<"\nDeseja pesquisar outro produto?";
}
fread(&pr,sizeof(Material),1,parq);
}
}

if (opt == 3) {
cout<<"\n\nDigite o genero do produto: ";
gets(genero);
flag = 0;
fread(&pr,sizeof(Material),1,parq);
}
while (!feof(parq))
{
if (!strcmp(genero, pr.genero))
{
cout<<"\nCodigo: " <<pr.codigo;
cout<<"\nNome: " <<pr.nome;
cout<<"\nEstoque: " <<pr.estoque;
cout<<"\nGenero: "<<pr.genero;
cout<<"\n\nPreco: " <<pr.preco;
flag = 1;
//cout<<"\nDeseja pesquisar outro produto?";
}
fread(&pr,sizeof(Material),1,parq);
}

if (flag == 0)
cout<<"\nProduto nao cadastrado";
getch();
fclose(parq);

}
}


See you guys!! Tks a lot !!
May 28 '07 #1
Share this Question
Share on Google+
2 Replies


P: 2
One more question...

Does anybody know how to implement an alter to this data?


See u !! Tka a lot one more time...
May 28 '07 #2

weaknessforcats
Expert Mod 5K+
P: 9,197
If the file has no particular structure, then the easiese thing is to read the entire file into the program and then rewrite the data without the deleted parts.

Otherwise, you need a flat file: a) records all same length,b) all records in identical format. If you have this,, you can fseek() to the particular record to chnage and then fwrite(). Note that if all the reocrds have the same length and the same format, you can fseek() to a particualr field and just change that.

Unless you completely read and rewrite the file, there is no way to complete;y delete data. Deleting in place would require you do define a "deleted character" andf to fill deleted records with these characters. All functions reading and wrirting the file would need to be sensitive to this.
May 28 '07 #3

Post your reply

Sign in to post your reply or Sign up for a free account.