Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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
Postado (editado)

@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");
}

 

Editado por devair1010
  • Curtir 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






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

×