Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include<stdlib.h>
- #include <string.h>
- #include<conio.h>
- #define MAX 3
- #define block 3
- //struct para contatos
- struct name
- {
- char nome[50];
- int telefone;
- char email[20];
- };
- typedef struct name name_t;
- //ponteiro pra ponteiro pra um conjunto de elementos da struct
- name_t **ptr;
- name_t temp[10];
- int num_n = 0; // variavel pra controle da alocacao
- int num = 0 ; // variavel pra controle numeros de contato.
- //Prototipos das funcoes;
- void inserir(void)
- {
- int i;
- int j;
- int resp;
- int value_novo;
- if((num != 0) &&((num%block) == 0))
- {
- if (num_n >= MAX)
- {
- printf("\nAgenda cheia");
- return;
- }
- ptr = (name_t**)realloc(ptr,(num_n + 1) * block * (sizeof(name_t*)));
- num_n++;
- }
- ptr[num]= (name_t*) malloc(sizeof(name_t));
- printf("\nEntre com o nome: ");
- gets(ptr[num]->nome);
- printf("Entre com o Email: ");
- gets(ptr[num]->email);
- printf("Digite o telefone: ");
- scanf("%d",&ptr[num]->telefone);
- num++;
- }
- void sort(void)
- {
- int m,n;
- name_t temp;
- for(m = 0; m < num;m++)
- {
- for(n = m+1; n< num; n++)
- {
- if(strcmp(ptr[m]->nome,ptr[n]->nome) > 0 )
- {
- // strcpy(temp,ptr[m]);
- // strcpy(ptr[m],ptr[n]);
- //strcpy(ptr[m],temp);
- }
- }
- }
- }
- void imprimir(void)
- {
- int i;
- int k;
- int n;
- int j;
- int lim;
- printf("Informacoes:\n");
- if(num ==0){
- printf("Agenda Vazia");
- }
- for(i=0; i<num;++i){
- //Se a lista ta vazia, como e que eu vou mostrar vazio
- printf("*** Contato %d ***\n",i+1);
- printf("Nome: %s\n",ptr[i]->nome);
- printf("Email: %s\n",ptr[i]->email);
- printf("Telefone: %d\n",ptr[i]->telefone);
- }
- void sort(void);
- printf("\n*****************************\n");
- printf (" Nomes em ordem alfabetica \n");
- printf("\n*****************************\n");
- /* Display the sorted names */
- for(lim=0;lim<num;++lim)
- {
- printf("*** Contato %d ***\n",lim+1);
- printf("Nome: %s\n",ptr[lim]->nome);
- printf("Email: %s\n",ptr[lim]->email);
- printf("Telefone: %d\n",ptr[lim]->telefone);
- }
- printf("\n*****************************\n");
- }
- void consulta(void)
- {
- int m;
- int achei=0;
- char nome[30];
- printf("Informe o nome que queria consulta ?\n");
- scanf("%s",&nome);
- for(m=0; m<num; ++m)
- {
- if(strcmp(nome, ptr[m]->nome)==0)
- {
- printf("Nome: %s\n",ptr[m]->nome);
- printf(" Telefone: %d\n",ptr[m]->telefone);
- printf("Email: %s\n",ptr[m]->email);
- achei =1;
- }
- }
- if(achei==0)
- {
- printf("Não tem Contato! ");
- }
- }
- void alterar(void)
- {
- int o;
- char nome[30];
- int alterado;
- printf("Informe o nome que queria alterar ?\n");
- scanf("%s",&nome);
- for(o=0; o<num ;++o)
- {
- if(strcmp(nome, ptr[o]->nome)==0)
- {
- printf("Entre com o nome:\n");
- scanf("%s",&ptr[o]->nome);
- printf("Entre com o telefone:\n");
- scanf("%d",&ptr[o]->telefone);
- printf("entre com o email:\n");
- scanf("%s",&ptr[o]->email);
- alterado =1;
- }
- }
- if(alterado==0)
- {
- printf("Não tem =/ ");
- }
- }
- void deletar(void)
- {
- int l;
- char nome[30];
- int j;
- printf("Informe o nome que queria deletar ?\n");
- scanf("%s",&nome);
- for(l=0; l<num; l++){
- if (strcmp(ptr[l]->nome,nome)==0){
- for(j=l+1; j<num; j++){
- strcpy(ptr[j-1]->nome,ptr[j]->nome);//copia uma string //
- ptr[j-1]->telefone = ptr[j]->telefone;
- }
- num--;
- l=num;
- }
- //tem que ter uma opcao pra apagar a agenda toda...
- }
- }
- void apagarporindice(void){
- int ind;
- char nomecontato[10];
- //Se a agenda estiver vazia...
- if (num == 0)
- {
- printf("\nAgenda vazia\n");
- return;
- }
- if(num > 1){
- printf("\nEntre com o no. do contato: ");
- gets(nomecontato);
- ind = atoi(nomecontato);
- free (ptr[ind-1]);
- ptr[ind-1] = ptr[num -1 ];
- num --;
- if(ind > num){
- printf("Numero invalido");
- return 0;
- }
- }
- //se ficou um bloco inteiro livre, libera
- if (num <(num_n * block))
- {
- ptr = (name_t **)realloc (ptr,(num_n - 1)*block* sizeof(name_t *));
- num_n--;
- }
- }
- int item_menu(void)
- {
- char s[80];
- int c;
- printf("\n");
- printf("1. Inserir um contato\n");
- printf("2. Imprimir Contatos\n");
- printf("3. Consultar Contatos\n");
- printf("4. Alterar Contato\n");
- printf("5. Deletar Contato\n");
- printf("6. Apagar por indice\n");
- printf("7. Sort\n");
- printf("8. Sair\n");
- do
- {
- printf("\nEntre com sua escolha: ");
- gets(s);
- c = atoi(s);
- }
- while(c<0 || c>7);
- return c;
- }
- int main()
- {
- int i,n;
- // alocando pra um numero de blocks 2
- ptr = (name_t**)malloc(block*sizeof(name_t*)); //Alocar pra capacidade inicial!
- num_n = 1;
- if(ptr==NULL){
- printf("Erro de alocacao!");
- }
- int item;
- for(;;)
- {
- item = item_menu();
- switch(item)
- {
- case 1:
- inserir();
- break;
- case 2:
- imprimir();
- break;
- case 3:
- consulta();
- break;
- case 4:
- alterar();
- break;
- case 5:
- deletar();
- //tem que deletar a lista toda..nao um elemento so !
- break;
- case 6:
- apagarporindice();
- break;
- case 7:
- sort();
- break;
- case 8:
- exit(0);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement