How to store calendar contacts I created in a vector \ array and list them? W

1

I'm trying to develop an agenda in C. I would like to know how do I store calendar contacts that I created in a vector \ array and list them?

I'm also breaking my head when it comes to listing a phone number ...

PLUS I would like tips to hone my code and add new features.

PLUSIwouldliketipstohonemycodeandaddnewfeatures.

Followthecode:

#include<string.h>#include<conio.h>#include<stdio.h>structagenda{intcod;charnome[40];inttel;intvazio;//VAZIO=0eDISPONÍVEL=1}registros[100];voidcadastrar(intcod,intpos);intverifica_pos();intverifica_cod(intcod);voidconsultar();voidexcluir();voidzerar();intmain(){zerar();intop=0,retorno,codaux,posicao;while(op!=4){printf("************ AGENDA ************\n\n\n");
        printf(">>> MENU <<<\n\n");
        printf("1 - CADASTRAR\n");
        printf("2 - CONSULTAR\n");
        printf("3 - EXCLUIR\n");
        printf("4 - SAIR\n\n");
        printf("OPCAO: ");

        scanf("%d", &op);
        fflush(stdin);
        switch(op){
            case 1: {       //CADASTRAR
                posicao = verifica_pos();
                if (posicao != -1){
                printf("\nEntre com o codigo desejado: ");
                scanf("%d", &codaux);
                    fflush(stdin);
                    retorno=verifica_cod(codaux);
                    if(retorno==1)
                        cadastrar(codaux,posicao);
                    else
                        printf("\nCodigo ja existente!");
                }
                else
                    printf("\nA agenda esta cheia!");
            break;
            }

            case 2: {       //CONSULTAR
                consultar();
                break;
            }
            case 3: {
                excluir();
                break;
            }
            case 4: {
                printf("\n\n TCHAU!!");
                break;
            }

    }
}
getch();
}

void cadastrar(int cod, int pos){
    pos = verifica_pos();
    registros[pos].cod = cod;
    printf("\nNOME: ");
    fgets(registros[pos].nome, 40, stdin);
    printf("\nTelefone: ");
    scanf("%d",&registros[pos].tel);
    registros[pos].vazio = 1;
    printf("\nCadastro Realizado com Sucesso!\n\n");    
}

int verifica_pos(){
        int cont=0;
        while(cont<=100){
            if(registros[cont].vazio==0)
            return(cont);
            cont++;
        }
    return(-1);
}

int verifica_cod(int cod){
    int cont=0;
    while(cont<=100){
        if(registros[cont].cod == cod)
        return(0);
        cont++;
    }
    return(1);
}

void consultar(){
    int cont=0, cod;
    printf("\nEntre com o codigo: ");
    scanf("%d", &cod);
    while(cont<=100){
        if(registros[cont].cod == cod){
            if(registros[cont].vazio == 1){
                printf("\nNome: %s", registros[cont].nome);
                printf("\nTelefone: %d\n\n", registros[cont].tel);
                break;
            }
        }
        cont++;
        if(cont>100)
            printf("\nCodigo nao encontrado!\n\n");
}
}

void excluir(){
    int cod, cont=0;
    printf("\nEntre com o codigo do registro que deseja excluir\n");
    scanf("%d",&cod);

    while(cont<=100){
        if(registros[cont].cod == cod)
            if(registros[cont].vazio == 1){
                registros[cont].vazio = 0;
                printf("\nExclusao realizada com sucesso!\n");
                break;
            }
            cont++;
            if(cont>100)
                printf("\nCodigo nao encontrado.\n");
    }
}

void zerar(){
    int cont;
    for(cont=0; cont<=100; cont++){
        registros[cont].vazio=0;
    }
}
    
asked by anonymous 24.04.2017 / 16:19

1 answer

0

Here are some tips for your code and I've given you some examples modifying the original code.

Tips:

1) Try not to create very large functions. The more modularized your code stays, it will be easier to understand, easier to test, easier to fix problems. This is good programming practice.

Ex: The function verifica_cadastro was created to better organize the code of main() , making it smaller and more legible.

2) In many places the code looks like this: cont<=100 . Minor or equal (% with_%) causes the code to access from position <= to 0 and this is wrong because the array goes from 100 to 0 . To fix, just replace with 99

3) Do not create global variables !!! This is good programming practice.

Ex: Your list of records has now been declared in the cont<100 function and is being passed as an argument to the required functions.

4) Use main() to set a type for your typedef . This is good programming practice.

Ex: struct was created with struct , so there would be a new type called typedef

5) The function agenda checks inside all elements if the code does not yet exist. However code values have not been initialized with verifica_cod , so they have memory garbage and comparing your code with memory garbage can cause errors. To correct it, simply add the line 0 inside the function registros[cont].cod=0; .

6) The default c language does not have a boolean type (true or false), so it uses the zerar() and 1 values for this. Take the test:

printf("%d",(2>1)); // O resultado será 1 (verdadeiro)
printf("%d",(1>2)); // O resultado será 0 (falso)

Also try passing a 0 to a condition, eg:

if(0)
    printf("Imprimiu"); //O 0 é considerado falso, então não imprimirá nada
if(1)
    printf("Imprimiu"); //O 1 é considerado verdadeiro, então a mensagem será impressa
if(738)
    printf("Imprimiu"); //Qualquer outro valor também é considerado como verdadeiro

Then try to use this pattern for functions that should return if something is true or false.

Ex: The function int tells you if a code already exists, so it has a return with verifica_cod and 0 values. So you can call the direct function in 1 .

7) The if(verifica_cod(registros, cod)) field of your vazio is unnecessary. Start all codes with struct , so you fix problem number 5) and you can use the code field to control whether a record exists or not. When deleting a record, just set its 0 to cod .

More corrections and modifications have been made to the code, but are commented out within the code itself:

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

typedef struct agenda {
    int cod;
    char nome[40];
    int tel;
    //int vazio; // VAZIO = 0 e DISPONÍVEL = 1
}agenda;

void verifica_cadastro(agenda registros[]);
void cadastrar(agenda registros[], int cod, int pos);
int verifica_pos(agenda registros[]);
int verifica_cod(agenda registros[], int cod);
void consultar(agenda registros[]);
void excluir(agenda registros[]);
void zerar(agenda registros[]);

int main() {
    agenda registros[100];
    zerar(registros);
    int op=0;
    while(op!=4){
        printf("************ AGENDA ************\n\n\n");
        printf(">>> MENU <<<\n\n");
        printf("1 - CADASTRAR\n");
        printf("2 - CONSULTAR\n");
        printf("3 - EXCLUIR\n");
        printf("4 - SAIR\n\n");
        printf("OPCAO: ");

        scanf("%d", &op);
        fflush(stdin);
        switch(op){
            case 1: {       //CADASTRAR
                verifica_cadastro(registros);
                break;
            }

            case 2: {       //CONSULTAR
                consultar(registros);
                break;
            }
            case 3: {
                excluir(registros);
                break;
            }
            case 4: {
                printf("\n\n TCHAU!!");
                break;
            }

    }
}
getch();
}

// Função que verifica se é possivel cadastrar
void verifica_cadastro(agenda registros[]){
    int codaux, posicao;
    posicao = verifica_pos(registros);
    if (posicao != -1){
        printf("\nEntre com o codigo desejado: ");
        scanf("%d", &codaux);
        fflush(stdin);

        if( verifica_cod(registros, codaux) )
            cadastrar(registros, codaux, posicao);
        else
            printf("\nCodigo ja existente!");
    }
    else
        printf("\nA agenda esta cheia!");
}

void cadastrar(agenda registros[], int cod, int pos){
    //pos = verifica_pos(registros); Linha duplicada, pos já veio com seu valor
    registros[pos].cod = cod;
    printf("\nNOME: ");
    fgets(registros[pos].nome, 40, stdin);
    printf("\nTelefone: ");
    scanf("%d",&registros[pos].tel);
    //registros[pos].vazio = 1;
    printf("\nCadastro Realizado com Sucesso!\n\n");
}

int verifica_pos(agenda registros[]){
        int cont=0;
        while(cont<100){
            if(registros[cont].cod==0)
                return(cont);
            cont++;
        }
    return(-1);
}

int verifica_cod(agenda registros[], int cod){
    int cont=0;
    while(cont<100){
        if(registros[cont].cod == cod)
        return(0);
        cont++;
    }
    return(1);
}

void consultar(agenda registros[]){
    int cont=0, cod;
    printf("\nEntre com o codigo: ");
    scanf("%d", &cod);
    while(cont<100){
        if(registros[cont].cod == cod){
            printf("\nNome: %s", registros[cont].nome);
            printf("\nTelefone: %d\n\n", registros[cont].tel);
            break;
        }
        cont++;
    }
    //O if pode ficar fora do while, pois será executado apenas uma vez
    if(cont==100)
        printf("\nCodigo nao encontrado!\n\n");
}

void excluir(agenda registros[]){
    int cod, cont=0;
    printf("\nEntre com o codigo do registro que deseja excluir\n");
    scanf("%d",&cod);

    while(cont<100){
        if(registros[cont].cod == cod){
            registros[cont].cod = 0; //O código também deve ser zerado
            //registros[cont].vazio = 0;
            printf("\nExclusao realizada com sucesso!\n");
            break;
        }
        cont++;
    }
    //O if pode ficar fora do while, pois será executado apenas uma vez
    if(cont==100)
        printf("\nCodigo nao encontrado.\n");
}

void zerar(agenda registros[]){
    int cont;
    for(cont=0; cont<100; cont++){
        registros[cont].cod=0;
        //registros[cont].vazio=0;
    }
}
    
25.04.2017 / 07:26