Jump to content

Trabalho de programação agenda eletronica


noobmore
 Share

Recommended Posts

Boas .

Sou um bocado noob em programação  😞 e tenho um professor que não explica nada alem disso pediu me pa fazer uma agenda electrónica em um mes.

A agenda contem  1 menu com 2 cases em que diz criar uma nova agenda 2 abrir uma agenda existente depois na 1 opção tenho de cirar outro submenu:

1 mostrar lista

2 adicionar contacto

3 procurar contacto

4 guardar contacto

5 eliminar contacto

6sair

na 2 opção é abrir um ficheiro txt com este exemplo santos santos@hotmail.com 987654321 123456789

a parte de abrir o ficheiro ja tenho quase mas da me um erro quando executo

Codigo:

[/color]void abreficheiro()

    {

    FILE*f;

    char Nome [1000],email[1000],nfich[200];

    int telem,telef;

   

    printf("\nintroduza o nome do ficheiro\n");

    scanf("%s",nfich);

   

    f=fopen(nfich,"r");

    if(f==NULL)

    {

    printf("erro abrir ficheiros");

    }

    else

    {

    while(!feof(f))

    {

      fscanf(f,"%[^\n]s %[^\n]s %d %d",Nome,email,telem&telef);

      printf("%s | %s | %d | %d\n",Nome,email,telem,telef);

    }

   

    fclose(f);

    }

    getch();

       

    }

Agradecia a vossa ajuda 😉

Link to comment
Share on other sites

O primeiro conselho que te posso dar para obteres ajuda neste fórum é especificares o problema e dizeres o erro que o compilador te dá.

Todos estamos cá para ajudar, mas dizeres que uma função te dá um erro deixa, e vou falar de mim, as pessoas um pouco a leste sobre o que procurar e se estiverem a ver isto após um dia longo e cansativo, provavelmente não se darão ao trabalho de procurar o erro. No entanto, se disseres o erro que está a aparecer e a saída do compilador ou do programa (se o mesmo compilar) é muito mais provável que consigas uma resposta rápida.

Assim de repente... porque não guardar os números de telefone em strings?

De resto, o scanf não será assim?

fscanf(f,"%[^\n]s %[^\n]s %d %d",Nome,email, &telem, &telef);

include <ai se te avio>

Mãe () {

}

Link to comment
Share on other sites

eu fiz como me disses te, no inicio dava me um erro ao compilar parava o programa e apresentava me o relatorio de erros

como disses te, aparece no ecran mas da daqueles erros tipo matrix ta sempre a aparecer o mesmo :S

Agradeço desde já a vossa preocupação 

este trabalho vai ser muito complicado por tudo a funcionar ainda so consegui fazer os menus e essa função  😞

Link to comment
Share on other sites

Boas ja consegui fazer o meu projecto

mas tem uns bugs é que quando eu adiciono o ficheiro da agenda ele repete me o utimo elemento do vector :S

n percebo onde esta o problema :/

Alguem me poderia ajudar;

#include <stdio.h>

#include <stdlib.h>

#include <String.h>

#include <conio.h>

const total=25;

int i=0;

typedef struct {

      char nome[100],email[100];

      int telef,telem;

      }dados;

     

int sair()

{

char a;

  fflush(stdin);

  printf("deseja relamente sair do programa [s- Sim/n- Nao]: ");

  scanf("%c",&a);

// a=getch();

 

    if (a == 's' || a == 'S')

        exit(1);

 

while(a != 'n' && a !='N');

}

void guardardados(dados *contacto)

{

      FILE *f;

    char nfich[20];

    int j=0;

   

    printf("insira o caminho do ficheiro\n");

    scanf("%s",&nfich);

   

    f=fopen(nfich,"w");

   

        for(j=0; j<i; j++)

          {

          fprintf(f,"%s ",contacto[j].nome);

          fflush(stdin);

          fprintf(f,"%s ",contacto[j].email);

          fflush(stdin);

          fprintf(f,"%d ",contacto[j].telef);

          fflush(stdin);

          fprintf(f,"%d\n",contacto[j].telem);

          fflush(stdin);

          }

   

printf("Dados guardados com suscesso!!! \n");

fclose(f);

}

   

void pesquisar(dados* contacto)

{   

    char proc[50];

    int j;

   

    printf("Introduza o nome que pretende pesquisar: ");

    scanf("%s",proc);

   

    for(j=0;j<i;j++)

    {// isto diz o numero total de contactos       

        if(0 == strcmp(proc,contacto[j].nome))

        {

                  printf("\n\nDados: \n");

                  printf("\tNome: %s",contacto[j].nome);

                  printf("\n\tEmail: %s",contacto[j].email);

                  printf("\n\tTelemovel: %d",contacto[j].telem);

                  printf("\n\tTelefone: %d",contacto[j].telef);

                  printf("\n----------------------------------\n");

                  system("pause");

                  return ;

        }

    }

    printf("\nNome invalido\n");

    system("pause");

}

   

void adicionarcont(dados* contacto)

{

    if(i<total)

    {

    printf("Introduza o nome:",i+1);

    fflush(stdin);

    scanf("%[^\n]s",contacto.nome);

    printf("Introduza o email:",i+1);

    fflush(stdin);

    scanf("%[^\n]s",contacto.email);

    printf("Introduza o telemovel:",i+1);

    fflush(stdin);

    scanf("%d",&contacto .telem);

    printf("Introduza o telefone:",i+1);

    fflush(stdin);

    scanf("%d",&contacto .telef);

    i++;

    }

    else

    {

        printf("a lista esta cheia");

    }

}

void mostrarcont(dados* contacto)

{    int j=0;

   

          printf ("\t\t  Nome | Mail | Telefone | Telemovel\n\n");

          fflush(stdin);

          for(j=0; j<i; j++)

          {

          printf("\t\t %d-> %s |",j+1,contacto[j].nome);

          fflush(stdin);

          printf(" %s |",contacto[j].email);

          fflush(stdin);

          printf(" %d |",contacto[j].telef);

          fflush(stdin);

          printf(" %d |\n",contacto[j].telem);

          }

}

   

void alteracont(dados *contacto){

    int opcao;

   

    mostrarcont(contacto);

   

    do{

        printf("Introduza numero a alterar:\n");

        scanf("%d",&opcao);

        if(opcao >i || opcao <=0)

                  printf("Opcao Invalida\n");

    } while(opcao >i || opcao <=0);

   

    printf("\n\nDados: \n");

    printf("\tNome: %s",contacto[opcao].nome);

    printf("\n\tEmail: %s",contacto[opcao].email);

    printf("\n\tTelemovel: %d",contacto[opcao].telem);

    printf("\n\tTelefone: %d",contacto[opcao].telef);

    printf("\n----------------------------------\n");

   

    printf("Novo nome:",i);

    fflush(stdin);

    scanf("%[^\n]s",contacto[opcao-1].nome);

    printf("Introduza o email:",i);

    fflush(stdin);

    scanf("%[^\n]s",contacto[opcao-1].email);

    printf("Introduza o telemovel:",i);

    fflush(stdin);

    scanf("%d",&contacto[opcao-1].telem);

    printf("Introduza o telefone:",i);

    fflush(stdin);

    scanf("%d",&contacto[opcao-1].telef); 

   

    printf("dados guardados com sucesso!!! ");

    return;

}

void eliminacont(dados *contacto){

    char c;

    mostrarcont(contacto);

    int j, opcao;

   

    do{

        printf("Introduza numero a alterar:\n");

        scanf("%d",&opcao);

        if(opcao >i || opcao <=0)

                  printf("Opcao Invalida\n");

    } while(opcao >i || opcao <=0);

   

    getchar();

    do{

        printf("Deseja mesmo apagar o contacto? (s - Sim; n -Nao)");

        scanf("%c",&c);

    }while(c != 's' && c != 'n' && c != 'N' && c != 'S');

   

    if(c == 's' || c == 'S'){

        for(j=opcao;j<i;j++)

        {

                        strcpy(contacto[j].nome,contacto[i-1].nome);

                        strcpy(contacto[j].email,contacto[i-1].email);

                        contacto[j].telem=contacto[i-1].telem;

                        contacto[j].telef=contacto[i-1].telef;

        }

        i--;

    }

   

}

   

void submenu(dados *contacto)

{

    char op;

    do

    {

          system("cls");

          printf ("Escolha uma opcao(ficheiro: )\n\n\t1-Mostrar lista\n\t2-Novo contacto\n\t3-Procurar contacto\n\t4-Alterar contacto\n\t5-Apagar contacto\n\t6-Guardar dados\n\t7-sair\n");

          printf ("\n\tSelecione a opcao --> ");

          op=getch();

          switch (op)

          {

                case '1':

                      system("cls");

                      mostrarcont(contacto);

                      system("pause");

                      break;

                case '2':

                      system("cls");

                      adicionarcont(contacto);

                      break;

                case '3':

                      system("cls");

                      pesquisar(contacto);

                      break;

                case '4':

                      system("cls");

                      alteracont(contacto);

                      break;

                case '5':

                      system("cls");

                      eliminacont(contacto);

                      break;

                case '6':

                      system("cls");

                      guardardados(contacto);

                      system("pause");

                      break;

                case '7':

                      system("cls");

                      sair();

                      break;

        }

    } while ( op != '0' );

}

void abriragenda(dados *contacto)

{

    FILE *f;

    char nome[1000],email[1000],nfich[20];

    int telem,telef;

   

    printf("insira o caminho do ficheiro\n");

    scanf("%s",&nfich);

   

    f=fopen(nfich,"r");

    if(f==NULL)

    {

                printf("erro ao abrir ficheiros");

    }

    else

    {

        while(!feof(f))

        {

        fscanf(f," %s %s %d %d",nome,email,&telem,&telef);

        strcpy(contacto .nome,nome);

        strcpy(contacto .email,email);

        contacto .telem=telem;

        contacto .telef=telef;

        i++;

    }

    fclose(f);

    }

}

int main(int argc, char *argv[])

{  dados contacto[total];

    char o;

    int j;

     

    do

    {

            system("cls");

            printf("Escolha a Opcao:\n\n\t\t");

            printf("1- Nova agenda\n\t\t");

            printf("2- Agenda Existente\n\n\t\t");

            printf("opcao--> ");

            scanf("%c",&o);

            switch(o)

            {

            case'1':

                    submenu(contacto);

                    break;

            case'2':

                    abriragenda(contacto);

                    submenu(contacto);

                    break;

            }

    }

    while (o!='0');

                   

   

  system("PAUSE");

 

}

Link to comment
Share on other sites

tenho um problema nesta função de apagar, cada vez que apago um contacto os outros ficam todos iguais

void eliminacont(dados *contacto){

    char c;

    mostrarcont(contacto);

    int j=0, opcao;

   

    do{

        printf("Introduza numero a alterar:\n");

        scanf("%d",&opcao);

        if(opcao >i || opcao <=0)

                  printf("Opcao Invalida\n");

    } while(opcao >i || opcao <=0);

   

    getchar();

    do{

        printf("Deseja mesmo apagar o contacto? (s - Sim; n -Nao)");

        scanf("%c",&c);

    }while(c != 's' && c != 'n' && c != 'N' && c != 'S');

   

    if(c == 's' || c == 'S'){

        for(j=opcao;j<i;j++)

        {

                        strcpy(contacto[j].nome,contacto[i-1].nome);

                        strcpy(contacto[j].email,contacto[i-1].email);

                        contacto[j].telem=contacto[i-1].telem;

                        contacto[j].telef=contacto[i-1].telef;

        }i--;

    }

   

}

Link to comment
Share on other sites

Antes de mais... está aí uma variável i que não é inicializada (ou declarada) em lado nenhum.

Também chamas uma função antes de terminares as inicializações nesta função.

char c;

    mostrarcont(contacto);

    int j=0, opcao;

Relativamente ao teu problema, não trocaste as posições na chamada a strcpy?

include <ai se te avio>

Mãe () {

}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.