Ir ao conteúdo
  • Cadastre-se
KildareKLR

C excluir struct em arquivo.

Recommended Posts

Olá.

Estou com uma dúvida de como fazer a função "excluir" no seguinte programa.

socorro.


#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include<locale.h>
#include<string.h>
#include<unistd.h>
typedef struct reg REG;
struct reg{
    int tru;
    int mes;  
    float valor;    
    int codigo;
    char nome[25]; 
};
void excluir();
void editar();
void pesquisar();
void listar();
void input();
void cab();
int main ()
{
int op;
setlocale(LC_ALL,"Portuguese");
 while(op != 7){
     cab();
     printf ("Escolha a opção que deseja : \nOpção 1 = Criar o arquivo.\nOpção 2 = Incluir uma venda no arquivo.\nOpção 3 = excluir uma venda.\nOpção 4 = Alterar dados já cadastraos.\nOpção 5 = Listar todos os cadastros.\nOpção 6 = Excluir o arquivo.\nOpção 7 = Encerrar.\n");
  scanf("%d", &op);
       system("cls");
  switch (op){
       case 1 : printf("Arquivo aberto com sucesso.\n");getch();break;
     case 2 :input();
     break;
     case 3 : excluir(); 
     break;
     case 4 : editar();
     break;
     case 5 : listar(); 
     break;
     case 6 : remove("vendas.txt");
     printf("Arquivo excluido com sucesso.\n");
     getch();
      break;
     case 7 : exit(0);
     default:
         printf("Opção inválida!\n");break;
}
}
 
  getch();
return 0;
}void cab(){
system("cls");
printf("-----------------------------------------------------\n");
printf("               Registro de Vendas\n");
printf("-----------------------------------------------------\n");

}
void input(){
    cab();
    FILE* arquivo;
    REG op;
    arquivo = fopen("vendas.txt", "ab");
    if(arquivo == NULL){
        printf("Erro! Abortar!\n");
        
    }else{
        do{
            fflush(stdin);
            printf("Digite o nome : ");
            gets(op.nome);
            fflush(stdin);
            printf("Digite o código da venda : ");
            scanf("%d",&op.codigo);
            fflush(stdin);
            printf("Digite o mês em questão : ");
            scanf("%d",&op.mes);
            fflush(stdin);
            printf("Digite o valor da operação : ");
            scanf("%f",&op.valor);
            op.tru=1;
            fwrite(&op, sizeof(REG),1,arquivo);
            printf("Quer continuar (s/n)?\n");
            
        }while(getche() == 's');
        fclose(arquivo);
    }
}
void listar(){
    cab();
    FILE* arquivo;
    REG op;
    arquivo = fopen("vendas.txt", "rb");
    if(arquivo == NULL){
        printf("Erro! Abortar!\n");
        
    }else{
        while(fread(&op, sizeof(REG),1,arquivo)==1){
            if(op.tru!=0){
            
            printf("Nome : %s\n", op.nome);
            printf("Valor da Transação : %f\n", op.valor);
            printf("Mês : %d\n", op.mes);
            printf("Código : %d\n", op.codigo);
            printf("---------------------------------------------------\n");
        }
        }    
    }
    fclose(arquivo);
    getch();
}
void pesquisar(){
    FILE* arquivo;
    char nome[25];
    arquivo = fopen("vendas.txt", "rb");
    REG op;
    if(arquivo == NULL){
        printf("Erro! Abortar!\n");
        
    }else{
        fflush(stdin);
    printf("Digite o nome a pesquisar : ");
    gets(nome);
    while(fread(&op,sizeof(REG),1,arquivo)==1){
        if(strcmp(nome, op.nome)==0){
            printf("Nome : %s\n", op.nome);
            printf("Valor da Transação : %f\n", op.valor);
            printf("Mês : %d\n", op.mes);
            printf("Código : %d\n", op.codigo);
            printf("---------------------------------------------------\n");
        }
    }
    }
    fclose(arquivo);
    getch();
}
void editar()
{    
    FILE* arquivo;
    REG op;
    int posicao = 0;
    int achou = 0;
    char AltNome[50];
    int a;

    fflush(stdin);
    printf("Digite o nome : ");
    gets(AltNome);

    arquivo = fopen("vendas.txt","r+b");
    system("cls");
    while(fread(&op, sizeof(REG), 1, arquivo)==1)
    {
        if(strcmp(AltNome,op.nome)==0 && op.tru!=0)
        {
            printf("\n1 - Nome: %s",op.nome);
            printf("\n0 - Voltar");
            printf("\n-------------\n\n");

            printf("\n\nEscolha uma opção: ");
            scanf("%d", &a);

            switch(a)
            {
                case 1:
                    printf("Digite o Novo valor : ");
                    scanf("%f",&op.valor);
                    fseek(arquivo, posicao, SEEK_SET);
                    achou= fwrite(&op,sizeof(REG),1,arquivo) == sizeof(REG);
                break;
                case 0:
                    main();
                break;
                default:
                    printf("\nOpção Inválida!");
                break;
            }

        }
        posicao = posicao + sizeof(REG);
               fseek(arquivo, posicao, SEEK_SET);
    }
    fclose(arquivo);
}
void excluir()
{    
    FILE* arquivo;
    REG op;
    int posicao = 0;
    int achou = 0;
    char AltNome[50];
    int a;
    fflush(stdin);
    printf("Digite o nome : ");
    gets(AltNome);
    arquivo = fopen("vendas.txt","r+b");
    system("cls");
    while(fread(&op, sizeof(REG), 1, arquivo)==1)
    {
        if(strcmp(AltNome,op.nome)==0)
        {
            printf("\n1 - Nome: %s",op.nome);
            printf("\n0 - Voltar");
            printf("\n-------------\n\n");

            printf("\n\nEscolha uma opção: ");
            scanf("%d", &a);

            switch(a)
            {
                case 1:
                    op.tru=0;
                    fseek(arquivo, (posicao - 1)*sizeof(REG), SEEK_SET);
                    fwrite(&op, sizeof(REG), 1, arquivo);    
                break;
                case 0:
                    main();
                break;
                default:
                    printf("\nOpção Inválida!");
                break;
            }

        }
        posicao = posicao + sizeof(REG);
               fseek(arquivo, posicao, SEEK_SET);
    }
    fclose(arquivo);

}
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@KildareKLR     para excluir você precisa criar outro arquivo e colocar nele todos os dados que você não quer excluir , depois disso você deleta esse arquivo onde estavam os dados usando o comando remove , e em seguida você renomeia o outro arquivo com o mesmo nome do arquivo deletado usando o comando rename, assim você ficará com o arquivo original com todos os dados menos o que você excluiu  .   então  apenas modifiquei algumas linhas na função excluir do seu código  e ele ficou assim  :

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include<locale.h>
#include<string.h>
#include<unistd.h>

struct reg{
    int   tru     ;
    int   mes     ;
    float valor   ;
    int   codigo  ;
    char  nome[25];
};
typedef struct reg REG;
void excluir(  );
void editar(   );
void pesquisar();
void listar(   );
void input(    );
void cab(      );
int main(){
    int op=0;
    setlocale(LC_ALL,"");
    while(op != 7){
        cab();
        printf ("Escolha a opção que deseja : \n"         );
        printf("Opção 1 = Criar O Arquivo.\n"             );
        printf("Opção 2 = Incluir Uma Venda No Arquivo.\n");
        printf("Opção 3 = Excluir Uma Venda.\n"           );
        printf("Opção 4 = Alterar Dados Já Cadastraos.\n" );
        printf("Opção 5 = Listar Todos Os Cadastros.\n"   );
        printf("Opção 6 = Excluir O Arquivo.\n"           );
        printf("Opção 7 = Encerrar Programa.\n      => "  );
        fflush(stdin);
        scanf("%d",&op);
        system("cls");
        switch(op){
            case 1 : printf("Arquivo aberto com sucesso.\n");getch();break;
            case 2 : input(  );break;
            case 3 : excluir();break;
            case 4 : editar( );break;
            case 5 : listar( );break;
            case 6 : excluir();break;
            case 7 : exit(0  );
            default:
                printf("Opção inválida!\n");
                break;
        }
    }
    getch( );
    return 0;
}
void cab(){
    system("cls");
    printf("-----------------------------------------------------\n");
    printf("               Registro de Vendas\n");
    printf("-----------------------------------------------------\n");
}
void input(){
    cab();
    FILE* arquivo;
    REG op;
    arquivo = fopen("vendas.txt", "ab");
    if(arquivo == NULL){
        printf("Erro,  Arquivo Não Existe !    Abortar!\n");
    }
    else{
        do{
            printf("Digite o nome : ");
            fflush(stdin);
            gets(op.nome);
            printf("Digite o código da venda : ");
            fflush(stdin);
            scanf("%d",&op.codigo);
            printf("Digite o mês em questão : ");
            fflush(stdin);
            scanf("%d",&op.mes);
            printf("Digite o valor da operação : ");
            fflush(stdin);
            scanf("%f",&op.valor);
            op.tru=1;
            fwrite(&op, sizeof(REG),1,arquivo);
            printf("Quer continuar (s/n)? Tecle Sem Enter\n");
        }while(getch() == 's');
        fclose(arquivo);
    }
}
void listar(){
    cab();
    FILE* arquivo;
    REG op;
    arquivo = fopen("vendas.txt", "r");
    if(arquivo == NULL){
        printf("Erro! Abortar!\n");
    }
    else{
        while(fread(&op, sizeof(REG),1,arquivo)==1){
            if(op.tru!=0){
                printf("Nome ----------------: %s\n",  op.nome  );
                printf("Valor da Transação --: %.2f\n",op.valor );
                printf("Mês -----------------: %d\n",  op.mes   );
                printf("Código --------------: %d\n",  op.codigo);
                printf("-------------------------------------\n");
            }
        }
    }
    fclose(arquivo);
    getch();
}
void pesquisar(){
    FILE* arquivo;
    char nome[25];
    arquivo = fopen("vendas.txt","r");
    REG op;
    if(arquivo == NULL){
        printf("Erro! Abortar!\n");
    }
    else{
        fflush(stdin);
        printf("Digite O Nome A Pesquisar : ");
        gets(nome);
        while(fread(&op,sizeof(REG),1,arquivo)==1){
            if(strcmp(nome, op.nome)==0){
                printf("Nome ----------------: %s\n", op.nome  );
                printf("Valor da Transação --: %f\n", op.valor );
                printf("Mês -----------------: %d\n", op.mes   );
                printf("Código --------------: %d\n", op.codigo);
                printf("------------------------------------\n");
            }
        }
    }
    fclose(arquivo);
    getch();
}
void editar(){
    FILE* arquivo,*arquiv2;
    REG opc;
    char AltNome[50],aa;
    printf("Digite o nome Para Editar : ");
    fflush(stdin);
    gets(AltNome);
    arquivo = fopen("vendas.txt","r");
    arquiv2 = fopen("venda2.txt","w");
    system("cls");
    while(fread(&opc, sizeof(REG), 1, arquivo)==1){
        aa='n';
        if(strcmp(AltNome,opc.nome)==0 && opc.tru!=0){
            printf("Nome ----------------: %s\n"  ,opc.nome  );
            printf("Valor da Transação --: %.2f\n",opc.valor );
            printf("Mês -----------------: %d\n"  ,opc.mes   );
            printf("Código --------------: %d\n"  ,opc.codigo);
            printf("--------------------------------------\n");
            printf("Quer Alterar Esse Produto ? S/N ");
            fflush(stdin);
            scanf("%c",&aa);
            if(toupper(aa)=='S'){
                printf("Digite o Novo valor : ");
                fflush(stdin);
                scanf("%f",&opc.valor);
            }
        }
        fwrite(&opc, sizeof(REG),1,arquiv2);
    }
    fclose(arquivo);
    fclose(arquiv2);
    remove("vendas.txt");
    rename("venda2.txt","vendas.txt");
}
void excluir(){
    FILE* arquivo,*arquiv2;
    REG opc;
    int achou = 0,posicao = 0,a;
    char AltNome[50];
    char aa;
    printf("Digite O Nome Para Excluir : ");
    fflush(stdin);
    gets(AltNome);
    arquivo = fopen("vendas.txt","r");
    arquiv2 = fopen("venda2.txt","w");
    system("cls");
    while(fread(&opc, sizeof(REG), 1, arquivo)==1){
        aa='s';
        if(strcmp(AltNome,opc.nome)!= 0){
            fwrite(&opc, sizeof(REG),1,arquiv2);
        }
        else{
            printf("Nome ----: %s\n",opc.nome   );
            printf("Código --: %d\n",opc.codigo );
            printf("Mês -----: %d\n",opc.mes    );
            printf("Valor ---: %.2f\n",opc.valor);
            printf("Quer Excluir Mesmo Esse Produto ? S/N ");
            fflush(stdin);
            scanf("%c",&aa);
            if(toupper(aa)=='N'){
                fwrite(&opc, sizeof(REG),1,arquiv2);
            }
            else{
                printf("Arquivo excluido com sucesso.\n");
                getch();
            }
        }
    }
    fclose(arquivo);
    fclose(arquiv2);
    remove("vendas.txt");
    rename("venda2.txt","vendas.txt");
}

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×