Delete a user from a C.dat file

Asked

Viewed 47 times

1

Well, I need to do a program where I create a basis to archive login data from a "company", I’m still very new to the concept of c but, I’m not able to do the part where I delete a user from the.dat file without deleting all the others

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

typedef struct
{
    int codigo;
    char nome[200];
    char login[200];
    char password[200];
    char mail[200];
    char contacto[10];
}user;


void main()
{   
    FILE *fp;
    user utilizador;
    int cods=1;

    fp=fopen("Gest_User.dat","rb");
    system("color a");

    setlocale(LC_ALL,"Portuguese");

    char op;
    int dados,codigo_alt;

    do
    {
            printf("*********************************************\n");
            printf("* MENU                                      *\n");
            printf("*********************************************\n");
            printf("* Escolha a opção que deseja:               *\n");
            printf("*********************************************\n");
            printf("* 1: Inserir novo utilizador                *\n");
            printf("* 2: Alterar dados de um utilizador         *\n");
            printf("* 3: Consultar dados de um utilizador       *\n");
            printf("* 4: Listar dados de todos os utilizadores  *\n");
            printf("* 5: Eliminar um utilizador                 *\n");
            printf("* 0: Sair do Programa                       *\n");
            printf("*********************************************\n\n");
            printf("Digite uma opção: ");
            scanf("%d",&op);

        fclose(fp);

        switch(op)
        {
            case 1:             
                system("cls");

                utilizador.codigo=cods;

                fp=fopen("users.dat","ab");

                system("cls");

                if(fp==NULL)
                {
                    printf("Impossível abrir o ficheiro");
                }
                else
                {
                    printf("Código do user\n-> %d\n",utilizador.codigo);
                    printf("Digite o nome\n->");
                    fflush(stdin);
                    scanf("%s",&utilizador.nome);
                    printf("Insira o nome de login\n->");
                    fflush(stdin);
                    scanf("%s",&utilizador.login);
                    printf("Digite o mail\n->");
                    fflush(stdin);
                    scanf("%s",&utilizador.mail);
                    printf("Digite a password\n->");
                    fflush(stdin);
                    scanf("%s",&utilizador.password);
                    printf("Insira o número de contacto\n->");
                    fflush(stdin);
                    scanf("%s",&utilizador.contacto);   
                }
                fwrite(&utilizador,sizeof(utilizador),1,fp);

                cods++;

                fclose(fp);                 

                system("pause");
                system("cls");                      
                break;


            case 2:             
                system("cls");

                fp=fopen("users.dat","r+b");

                system("cls");

                if(fp==NULL)
                {
                    printf("Impossível abrir o ficheiro");
                }
                    else
                    {                   
                        if((fp=fopen("Gest_User.dat","r+b"))!=NULL) 
                        {                   
                            printf("Insira o código do utilizador\n->");
                            fflush(stdin);
                            scanf("%d",&codigo_alt);

                            if(codigo_alt==utilizador.codigo)   
                            {
                                printf("Código: %d\n",utilizador.codigo);
                                printf("Nome: %s\n",utilizador.nome);
                                printf("Login: %s\n",utilizador.login);
                                printf("Mail: %s\n",utilizador.mail);
                                printf("Password: %s\n",utilizador.password);
                                printf("Contacto: %s\n",utilizador.contacto);
                                printf("**************************************\n");
                                printf("Escreva todos os dados novamente para ser salvo!\n");
                                printf("Insira o código\n:");
                                fflush(stdin);
                                scanf("%d",&utilizador.codigo);
                                printf("Digite o nome\n:");
                                fflush(stdin);
                                scanf("%s",&utilizador.nome);
                                printf("Insira o nome de login\n:");
                                fflush(stdin);
                                scanf("%s",&utilizador.login);
                                printf("Digite o mail\n:");
                                fflush(stdin);
                                scanf("%s",&utilizador.mail);
                                printf("Digite a password\n:");
                                fflush(stdin);
                                scanf("%s",&utilizador.password);
                                printf("Insira o número de contacto\n:");
                                fflush(stdin);
                                scanf("%s",&utilizador.contacto);
                            }
                            else printf("NAO EXISTE!!\n");      
                        }

                    }

                fclose(fp); 

                system("pause");
                system("cls");  
                break;  


            case 3:             
                system("cls");

                fp=fopen("users.dat","rb"); 

                printf("Insira o código do utilizador que quer consultar\n->");
                scanf("%d",&dados);

                do
                {
                    if(fread(&utilizador,sizeof(user),1,fp))
                    {
                        if(utilizador.codigo == dados)
                        {                       
                            printf("Código: %d\n",utilizador.codigo);
                            printf("Nome: %s\n",utilizador.nome);
                            printf("Login: %s\n",utilizador.login);
                            printf("Mail: %s\n",utilizador.mail);
                            printf("Password: %s\n",utilizador.password);
                            printf("Contacto: %s\n",utilizador.contacto);       
                        }
                    }
                }while(!feof(fp));  

                fclose(fp);

                system("pause");
                system("cls");
                break;


            case 4:             
                system("cls");

                fp=fopen("users.dat","rb");

                system("cls");

                if(fp==NULL)
                {
                    printf("Impossível abrir o ficheiro");
                }

                    do{
                        if(fread(&utilizador,sizeof(utilizador),1,fp))
                        {
                            printf("Código: %d\n",utilizador.codigo);
                            printf("Nome: %s\n",utilizador.nome);
                            printf("Login: %s\n",utilizador.login);
                            printf("Mail: %s\n",utilizador.mail);
                            printf("Password: %s\n",utilizador.password);
                            printf("Contacto: %s\n",utilizador.contacto);
                            printf("**********************************\n");
                        }
                    }while(!feof(fp));                  

                fclose(fp);                             


                system("pause");
                system("cls");  
                break;


            case 5:             
                /*fp=fopen("users.dat","w+b");

                fclose(fp); 

                system("pause");
                system("cls");*/
                break;  


            case 0: break;


            default: printf("Opção Inválida");  
        }
        system("cls");
        getchar();
    }while (op!=0); 
}
  • Start when you insert a new client, put the client position to the occupied one. To do this create a busy variable in the structure. Then to remove, do an If( busy position==1) , set the 0.

  • You have two options, or have a flag in your structure that indicates whether the user is active or not, and in this case the deletion falls in case of change, or physically delete the record and for that you need to copy all other records to a new version of the file and then delete the old file and rename the new version that will no longer have such user.

  • Since you can’t put a reply here, I send the code by codeshare. I used a function to remove clients. Using functions makes code easier to understand than if it’s all in main. https://codeshare.io/programa

  • I tested the sent Cod line but it just asks the code and then closes the program, should I do something in it before opening? or was already in full what was sent?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.