Ir para conteúdo
Fórum Script Brasil
  • 0

Cadastro basico em C


Nayara Traldi

Pergunta

Olá pessoal, sou novata em programação em C, é meu primeiro ano de faculdade e tenho um puco de difuculdade com ponteiros, eu fiz um programa para cadastro, funciona perfeitamente e eu não achei bug algum só que preciso passar minhas funções com retorno e usando ponteiros, da maneira que fiz funciona, mas ainda não está aquado para o que preciso na faculdade de Si. Queria saber como posso melhorar meu código usando ponteiros e se tiver algum bug que não vi me avisem para eu tentar corrigir ou me passem algumas dicas, por esse motivo vou anexar o cadastro, estou programando com o dev c ++. Desde jáagradeço.

//
//Cadastro desenvolvido a partir de um struct, para uma agenda telefonica. OBS: Necessário usar a aioria das funções ponteiros, menos a função sair.

//bibliotecas
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>                                            
#include<string.h>

//prototipos de funções
     int cad ();
     int menu ();
     int pesquisanome();
     int exibir();
     int sair ();
     
//estruturas

 struct cadastro 
        {
                 char nome [10];
                  int telefone;
                   char apelido [30];
                   int celular;
                   int ind;       
        }cadas;
        
// variaveis globais
    struct cadastro cdstr [100];
    int vUltReg=0;
    int MAX=100;
    
        
//inicio
          main()
          {    
               menu ();
          }

//FUNÇÕES

//Menu
int menu()
         {
           int opc;
           
           printf ("\n***************Menu Principal*****************\n\n");
           printf ("----------------------------------------------\n");
           printf("\n * Selecione a opcao desejada:     *\n");
           printf(" *                                 *");
           printf("\n * 1- Cadastrar agenda             *  \n * 2- Pesquisar Agenda por nome    * \n * 3- Exibir Agenda                *\n * 4- Sair                         *\n ");
           printf ("\n**********************************************\n\t");
           scanf ("%d",&opc);
           switch(opc) {
                          printf ("%d",opc);
                                   case 1:
                                   system ("cls");
                                   printf ("\n******************Cadastro********************\n\n");
                                   cad();
                                   break;
                                case 2:
                                   pesquisanome();
                                   system ("pause");
                                   system ("cls");
                                   menu();
                                   break;
                                case 3:
                                   system ("cls");
                                     printf("\n*********************Agenda:****************** \n");  
                                   exibir();
                                   system ("cls");
                                   system ("pause");
                                   break;
                                case 4:
                                   sair();
                                   break;
                            default:
                                    printf("\a\n\tOpcao invalida!\n\n");
                                    fflush(stdin);
                                    system ("pause");
                                    system ("cls");
                                    menu ();
                       }
    }

//Cadastro
 int cad ()
 {
  int x;
  int res;
  
   for (x=vUltReg; x<MAX; x++)
   { 
     printf ("\n------------------Contato=%d-------------------\n",x+1);
     cdstr[x].ind=vUltReg+1;
     vUltReg = cdstr[x].ind;
     printf ("\nDigite o nome de seu contato:\n");
         scanf("%s",&cdstr[x].nome);
     printf ("\nDigite um numero de telefone para seu contato:\n");
         scanf ("%d",&cdstr[x].telefone);
     printf ("\nDigite o apelido do seu contato: \n");
         scanf ("%s",&cdstr[x].apelido);
     printf ("\nDigite o celular de seu contato:\n");
          scanf ("%d",&cdstr[x].celular); 
              fflush(stdin);  
     printf ("\n----------------------------------------------\n\n");      
     printf("\n**Deseja inserir novo cadastro na agenda? (0=Sim/1=não)**\n ");
        scanf("%d",&res);
     if (res==1){
          system ("cls");
           menu();
     }
     if (x==MAX-1){
       printf ("\n*****ATENCAO: Agenda atingiu limite de registros!*****\n");
       system ("pause");
       system ("cls");
        menu();               
     }
 }
}
//Pesquisa Agenda por nome

int pesquisanome()
{
 char m [20];
 int n;
 int comp;
 printf ("\t\n Pesquisa: Digite um nome:\n");
 scanf ("%s",&m);
       for (n=0;n<vUltReg; n++)
       {
              comp=strcmp(cdstr[n].nome,m);
           if (comp==0)
           {
             printf ("\n\tContato = %d\n",cdstr[n].ind);
             printf ("\n\n\tContato correspondente a tal nome:\t\n");
             printf ("\n \tNome do seu contato: %s\n", cdstr[n].nome);
             printf ("\n \tApelido de seu contato: %s\n", cdstr[n].apelido);
             printf ("\n \tO celular do seu contato: %d\n", cdstr[n].celular);
             printf ("\n \tO telefone do seu contato: %d\n", cdstr[n].telefone);
             } 
                else
              printf (" Invalido, tente novamente!\n"); 
                        
                       }
           }
       

//Exibir Agenda de um numero n de pessoas cadastradas

int exibir()   
    { 
       int z;
       for (z=0;z<vUltReg; z++)
       {
                printf ("\n----------------------------------------------\n\n");  
                printf ("\n\tContato = %d\n",cdstr[z].ind);
             printf ("\n \tNome de seu contato: %s\n", cdstr[z].nome);
             printf ("\n \tApelido de seu contato: %s\n", cdstr[z].apelido);
             printf ("\n \tO celular de seu contato: %d\n", cdstr[z].celular);
             printf ("\n \tO telefone de seu contato: %d\n\n\t", cdstr[z].telefone);
             }
           printf ("\n***Total de registros exibidos:%d***\n\n",z);
           system ("pause");
           system ("cls");
            menu();      
         }
         
 //Sair do programa

 int sair ()
 {  
  system ("cls");
  printf("\n\t###Bye, bye! Foi muito bom trabalhar com voce!!!###\n\t\n");
  system ("pause");
  exit (1);
 }

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Nas funções que precisam manipular essas estruturas você só precisa passar o ponteiro para a estrutura que tiver de ser manipulada. Não é coisa complicada. Na chamada desta função, o argumento é o nome da estrutura. Na função chamada, o protótipo deve conter o tipo da strutura. Exemplo simples:

typedef struct {
    char    nome[10]  ;
    int     telefone  ;
    char    apelido[30];
    int     celular   ;
    int     ind       ;
} pessoa;


bool procurarNome(pessoa *cadPessoa, char nome[]) {
    // ...
    // if (stricmp(cadPessoa->nome,...
    //
    return true;
}


int main() {
    pessoa cad; // aqui pessoa já é um tipo novo de dado
    //
    // preenche cad com dados quaisquer
    //
    if (procurarNome(cad,"Maria")) {
        //
        // Encontrou!
        //
    }
}

Link para o comentário
Compartilhar em outros sites

  • 0
parece que do jeito q fiz o programa não tá tão simples assim.

Não diria que está complicado. Veja bem: trabalhar com variáveis globais em programas pequenos não acarreta tanto problema. Agora, se o programa tem algumas milhares de linhas, variável global deixa de ser interessante, até porque é memória estática. Aí entra o ponteiro. Você poderia, por exemplo, manter essa estrutura na função principal, alocar memória dinamicamente para ela e passar esse ponteiro para a função que for manipular o cadastro, fazendo deleções, inserções, carga, descarga, etc mais facilmente. Isso pode simplificar as coisas, principalmente no quesito manutenção.

Numa instância superior, temos a orientação a objetos, mas isso para manipulação de dados altamente complexos, em que se tem estruturas em vários níveis de aninhamento. Mas isso é outra história. :)

Link para o comentário
Compartilhar em outros sites

  • 0
parece que do jeito q fiz o programa não tá tão simples assim.

Não diria que está complicado. Veja bem: trabalhar com variáveis globais em programas pequenos não acarreta tanto problema. Agora, se o programa tem algumas milhares de linhas, variável global deixa de ser interessante, até porque é memória estática. Aí entra o ponteiro. Você poderia, por exemplo, manter essa estrutura na função principal, alocar memória dinamicamente para ela e passar esse ponteiro para a função que for manipular o cadastro, fazendo deleções, inserções, carga, descarga, etc mais facilmente. Isso pode simplificar as coisas, principalmente no quesito manutenção.

Numa instância superior, temos a orientação a objetos, mas isso para manipulação de dados altamente complexos, em que se tem estruturas em vários níveis de aninhamento. Mas isso é outra história. :)

Então, massabe o que acontece comigo parece que meu cerebro da um bloqueio, quando vou tentar fazer não sei parece que não entendo, e fui eu quem criou todo o programa minha logica ma eu e ponteiros não nos entendemos por enquanto prece que não sei utiliza-losdireito acho que esse é o ponto principal da minhaduvida como usar, manipular, porque usar, alis o que é exatamente uma memoria estática? E como faço para alocar utilizar todas essas funções com o bendito ponteiro?

Bom, quanto a orientação a objetos vou entender um pouquinho mais, mais para frente na faculdade, vou ver alguma coisa, mas o principal por enquanto é entender como funciona o ponteiro, se não mais pra frente quando eu realmente precisar não vou saber usar, e isso é muito importante e util.

Link para o comentário
Compartilhar em outros sites

  • 0

Não se culpe. Ponteiros são o carma de 99% dos programadores. É difícil de entender no começo. Mas é bom entendê-los, pois eles farão parte da sua vida até o seu último suspiro. :)))

Só pra constar: memória alocada estaticamente é aquela memória dedicada à uma variável em tempo de execução: uma matriz de inteiros, por exemplo: int x[10] já aloca espaço. Ele é fixo, imutável. Morre aí. Se a alocação for dinâmica você só precisa de um ponteiro. Em tempo de execução você aloca memória para conter os seus dados. Se for necessário, essa área poderá ser expandida ou contraída, formando assim, um contâiner de dados. Exige mais código, mas oferece mais flexibilidade.

Minha dica: leia bastante sobre ponteiros e faça muitos exercícios práticos utilizando-os. Mas não em programas como o seu. Me refiro àqueles programinhas bestas de exemplificação, que normalmente ninguém dá valor. Eles são focados apenas nisso. Só têm ponteiros, mas em situações das mais diversas. Fica mais fácil aprender assim. Leia esses códigos, analise-os, modifique-os e aprenda como as coisas acontecem. Com o tempo e a prática você aprenderá a conviver pacificamente com ponteiros. :)

Editado por Maligno
Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigada, o problema é que esse codigo tenho de entrgar até amanhã, e não estou conseguindo anexar os benditos ponteiros, e o professor pediu pra gente usar ponteiros mas acho q vou entregar assim mesmo e explicar pra ele dai eu apro eito e pego uns par de exericios para as frias porque se ão vou estar realmente acabda rs

Obrigada pelas dicas.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...