Jump to content
Oliveira Cesar

Agenda

Recommended Posts

Oliveira Cesar

Boa Noite!!! 

Estou com um trabalho de faculdade para fazer!

Mais estou com algumas duvidas!

1 - tem que ter limite de 5 clientes cadastrados, e aparecer agenda lotada

2 - Quando não tem clientes tem que mostrar " agenda vazia"

3 - clicando um numero que não tem no menu mostrar a mensagem de erro e retornar ao menu.

Estou com este codigo em C só que está dando erro na linha 71! 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

//Cada contato possui um nome, telefone e email.

struct Contato{

char nome[100];

int telefone;

char email;

};

 

int main(){

//Ponteiro para estrutura. Vai ser o nosso vetor de

//estruturas dinamicas com os dados da agenda.

struct Contato *agenda;

int cap; //Capacidade do vetor (tamanho real do vetor).

int n; //Numero de contatos cadastrados (tamanho usado).

int opc; //Opcao do menu selecionada.

int i;

FILE *fp;

 

//Abrindo arquivo em modo de leitura ("r" = read).

fp = fopen("agenda.dat","r");

 

//Se retorna NULL eh pq nao encontrou o arquivo.

//Isso acontece na primeira vez que rodamos o programa.

if(fp==NULL){

n = 0; //Base de dados inicialmente vazia.

cap = 20; //Fixamos uma capacidade inicial (ex: 20).

 

//Alocammos o vetor de estruturas de forma

//dinamica conforme a capacidade.

agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap);

}

else{ //Arquivo encontrado, logo procedemos com a leitura.

 

//Le o numero de registros.

fread(&n, sizeof(int), 1, fp);

//A capacidade deve ser maior ou igual a "n" (ex: n*2).

cap = n*2;

 

//Alocammos o vetor de estruturas de forma

//dinamica conforme a capacidade.

agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap);

 

//Leitura dos dados dos registros do arquivo para o vetor.

fread(agenda, sizeof(struct Contato), n, fp);

 

//Fecha arquivo apos leitura.

fclose(fp);

}

do{

//Exibe o menu de opcoes.

printf("*** Menu ***\n");

printf("1) Cadastrar contato.\n");

printf("2) Exibir contatos.\n");

printf("3) Apagar.\n");

printf("4) Sair.\n");

//Le a opcao selecionada.

scanf("%d",&opc);

 

if(opc==1){

//Inserir novo contato no final do vetor.

 

if(n==cap){

  //Capacidade esgotada, devemos aumentar o

  //vetor usando "realloc" (ex: dobrar capacidade).

   cap *= 2;

agenda = realloc(agenda, sizeof(struct Contato)*cap);

}

//Leitura dos dados.

printf("Digite o nome: ");

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

printf("Digite o telefone: ");

scanf("%d",&agenda[n].telefone);

n++; //Incrementa numero de registros cadastrados.

}

else if(opc==2){

//Exibe todos contatos cadastrados.

for(i=0; i<n; i++){

   printf("*** Contato %d ***\n",i+1);

printf("Nome: %s\n",agenda.nome);

   printf("Telefone: %d\n",agenda.telefone);

}

}

else if(opc==3){

//Apaga um contato

char nome[100];

int j;

scanf("%s",&nome);

for(i=0; i<n; i++){

if (strcmp(agenda.nome, nome)==0){

 for(j=i+1; j<n; j++){

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

agenda[j-1].telefone=agenda[j].telefone;

}

n--;

i=n;

}

}

}

//Enquanto nao for opcao de saida continua mostrando menu.

}while(opc!=4);

 

if(n>0){

//Se existe algum contato cadastrado

//entao grava para o disco.

 

//Abre arquivo em modo de gravacao ("w" = write).

fp = fopen("agenda.dat","w");

 

//Grava o numero de contatos no inicio do arquivo.

fwrite(&n, sizeof(int), 1, fp);

//Grava os dados do vetor no arquivo.

fwrite(agenda, sizeof(struct Contato), n, fp);

 

//Fecha arquivo apos a gravacao.

fclose(fp);

}

 

//Libera a memoria alocada do vetor.

free(agenda);

return 0;

}

Share this post


Link to post
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

×
×
  • 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.