Advertisement
Victoralm

Lista Encadeada / Alocação Dinâmica básica

Aug 9th, 2014
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <iomanip>
  5. using namespace std;
  6.  
  7. struct cadastro{ // Inicialização da struct cadastro
  8.   char nome[31];
  9.   long cpf;
  10.   struct cadastro *prox; // Inicialização do ponteiro do tipo da struct cadastro
  11. };
  12.  
  13. void pausa(); // Função de compatibilidade para Linux já que este não possui system('pause'), uma vez que não necessita
  14. void limpaTela(); // Função de compatibilidade entre o system('clear') no Linux e o system('cls') no Windows
  15. void cadQnt();
  16. void cadInserir();
  17. void cadExibir();
  18. void cadRemover();
  19. cadastro *insereFrente(cadastro *ptr, char nomep[31], long cpfp);
  20.  
  21. cadastro *lista = NULL, *ini, *aux; int n;
  22.  
  23. int main(){
  24.   int op,n,x,f1,f2,f3;
  25.   f1=f2=f3=0;
  26.   float *alunos, soma=0, media;
  27.   do{
  28.     limpaTela();
  29.     cout<<"\n\n~ ~ ~        Alocação dinâmica        ~ ~ ~";
  30.     cout<<"\n~                                           ~";
  31.     cout<<"\n~   1 - Quantidade de clientes a cadastrar  ~";
  32.     cout<<"\n~   2 - Inserir dados de clientes           ~";
  33.     cout<<"\n~   3 - Exibir                              ~";
  34.     cout<<"\n~   4 - Remover                             ~";
  35.     cout<<"\n~   5 - Sair                                ~";
  36.     cout<<"\n~   Opção:                                  ~";
  37.     cout<<"\n~                                           ~";
  38.     cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
  39.     cin>>op;
  40.     cin.get();
  41.     limpaTela();
  42.  
  43.     switch(op){
  44.       case 1: cadQnt(); // Chamada da função "cadQnt()"
  45.               f1=1;
  46.               break;
  47.  
  48.       case 2: if(f1==1){
  49.                 cadInserir(); // Chamada da função "cadInserir()"
  50.                 f2=1;
  51.               }else
  52.                 cout<<"\nVocê não determinou a quantidade de clientes\n";
  53.               break;
  54.  
  55.       case 3: if(f2==1){
  56.                 cadExibir(); // Chamada da função "cadExibir()"
  57.                 f3=1;
  58.               }else cout<<"\nVocê pulou alguma(s) etapa(s)\n";
  59.               break;
  60.  
  61.       case 4: if(f3==1){
  62.                 cadRemover(); // Chamada da função "cadRemover()"
  63.               }else cout<<"\nVocê pulou alguma(s) etapa(s)\n";
  64.               break;
  65.  
  66.       case 5: cout<<"\nFim da alocação dinâmica\n";
  67.               // Liberando
  68.               delete lista; lista=0;
  69.               break;
  70.  
  71.       default:cout<<"\nOpção Inválida\n";
  72.     }
  73.     cout<<"\n\n";
  74.     pausa();
  75.   }while(op!=5);
  76.   return 0;
  77. }
  78.  
  79. void cadQnt(){
  80.   cout<<"\nEntre com a quantidade de clientes para cadastrar: ";cin>>n;cin.get();
  81. }
  82.  
  83. // Inserir clientes na lista
  84. void cadInserir(){
  85.   char nomep[31]; long cpfp;
  86.   for(int i=0; i<n; i++){
  87.     cout<<"\n\nDigite o nome: "; cin.getline(nomep,31); // Armazena o conteúdo na var "nomep"
  88.     cout<<"\nDigite o CPF: "; cin>>cpfp; // Armazena o conteúdo na var "cpfp"
  89.     cin.get(); // Limpa o buffer do teclado
  90.     lista = insereFrente(lista, nomep, cpfp); // Passagem dos valores para a função "insereFrente" responsável pela adição de ponteiros
  91.   }
  92. }
  93.  
  94. // Função / ponteiro "insereFrente"
  95. cadastro *insereFrente(cadastro *ptr, char nomep[31], long cpfp){
  96.   cadastro *temp = new cadastro; // Declaração do novo ponteiro "temp" de tipo nodo
  97.   strcpy(temp->nome, nomep); // Copia o conteúdo da var "nomep" para o membro "nome" do ponteiro "temp"
  98.   temp->cpf=cpfp; // Copia o conteúdo da var "cpfp" para o membro "cpf" do ponteiro "temp"
  99.   temp->prox=ptr; // Instancia o membro "prox" do ponteiro "temp" com o conteúdo que veio pelo parâmetro "ptr"
  100.   lista = temp; // Copia o conteúdo do ponteiro "temp" para o ponteiro lista
  101.   ini=lista; // Guarda o início (Copia o conteúdo do ponteiro "lista" para o ponteiro "ini")
  102.   return temp; // Retorna o ponteiro "temp"
  103. }
  104.  
  105. // Exibir a lista de clientes --Contribuição do usuário Tiago Gomes da versão em português da StackOverflow
  106. void cadExibir(){
  107.   cout<<"\n\nLista de clientes:\n";
  108.   cout<<"Nome"<<setw(19)<<"CPF";
  109.   while(lista){
  110.     int formt = 31-strlen(lista->nome); // seta o tamanho a ser usado no "setw" abaixo
  111.     cout<<"\n"<<lista->nome<<setw(formt)<<lista->cpf; // exibe os membros do ponteiro
  112.     lista=lista->prox; // passa para a próxima lista
  113.   }
  114. }
  115.  
  116. Tiago Gomes
  117. // Função pausa Windows/Linux
  118. void pausa(){
  119.   #ifdef WIN32
  120.     system("pause");
  121.   #else
  122.      system("read -p \"Pressione enter para continuar\" saindo");
  123.   #endif // WIN32
  124. }
  125.  
  126. // Função limpaTela Windows/Linux
  127. void limpaTela(){
  128.   #ifdef WIN32
  129.     system("cls");
  130.   #else
  131.      system("clear");
  132.   #endif // WIN32
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement