Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
#include <iostream> #include <cstdlib> #include <cstring> #include <iomanip> using namespace std; struct cadastro{ // Inicialização da struct cadastro char nome[31]; long cpf; struct cadastro *prox; // Inicialização do ponteiro do tipo da struct cadastro }; void pausa(); // Função de compatibilidade para Linux já que este não possui system('pause'), uma vez que não necessita void limpaTela(); // Função de compatibilidade entre o system('clear') no Linux e o system('cls') no Windows void cadQnt(); void cadInserir(); void cadExibir(); void cadRemover(); cadastro *insereFrente(cadastro *ptr, char nomep[31], long cpfp); cadastro *lista = NULL, *ini, *aux; int n; int main(){ int op,n,x,f1,f2,f3; f1=f2=f3=0; do{ limpaTela(); cout<<"\n\n~ ~ ~ Alocação dinâmica ~ ~ ~"; cout<<"\n~ ~"; cout<<"\n~ 1 - Quantidade de clientes a cadastrar ~"; cout<<"\n~ 2 - Inserir dados de clientes ~"; cout<<"\n~ 3 - Exibir ~"; cout<<"\n~ 4 - Remover ~"; cout<<"\n~ 5 - Sair ~"; cout<<"\n~ Opção: ~"; cout<<"\n~ ~"; cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; cin>>op; cin.get(); limpaTela(); switch(op){ case 1: cadQnt(); // Chamada da função "cadQnt()" f1=1; break; case 2: if(f1==1){ cadInserir(); // Chamada da função "cadInserir()" f2=1; }else cout<<"\nVocê não determinou a quantidade de clientes\n"; break; case 3: if(f2==1){ cadExibir(); // Chamada da função "cadExibir()" f3=1; }else cout<<"\nVocê pulou alguma(s) etapa(s)\n"; break; case 4: if(f3==1){ cadRemover(); // Chamada da função "cadRemover()" }else cout<<"\nVocê pulou alguma(s) etapa(s)\n"; break; case 5: cout<<"\nFim da alocação dinâmica\n"; // Liberando delete lista; lista=0; break; default:cout<<"\nOpção Inválida\n"; } cout<<"\n\n"; pausa(); }while(op!=5); return 0; } void cadQnt(){ cout<<"\nEntre com a quantidade de clientes para cadastrar: ";cin>>n;cin.get(); } // Inserir clientes na lista void cadInserir(){ char nomep[31]; long cpfp; for(int i=0; i<n; i++){ cout<<"\n\nDigite o nome: "; cin.getline(nomep,31); // Armazena o conteúdo na var "nomep" cout<<"\nDigite o CPF: "; cin>>cpfp; // Armazena o conteúdo na var "cpfp" cin.get(); // Limpa o buffer do teclado lista = insereFrente(lista, nomep, cpfp); // Passagem dos valores para a função "insereFrente" responsável pela adição de ponteiros } } // Função / ponteiro "insereFrente" cadastro *insereFrente(cadastro *ptr, char nomep[31], long cpfp){ cadastro *temp = new cadastro; // Declaração do novo ponteiro "temp" de tipo nodo strcpy(temp->nome, nomep); // Copia o conteúdo da var "nomep" para o membro "nome" do ponteiro "temp" temp->cpf=cpfp; // Copia o conteúdo da var "cpfp" para o membro "nome" do ponteiro "cpf" temp->prox=ptr; // Instancia o membro "prox" do ponteiro "temp" com o conteúdo que veio pelo parâmetro "ptr" lista = temp; // Copia o conteúdo do ponteiro "temp" para o ponteiro lista ini=lista; // Guarda o início (Copia o conteúdo do ponteiro "lista" para o ponteiro "ini") return temp; // Retorna o ponteiro "temp" } // Exibir a lista de clientes void cadExibir(){ cout<<"\n\nLista de clientes:\n"; cout<<"Nome"<<setw(19)<<"CPF"; while(lista){ int formt = 31-strlen(lista->nome); // seta o tamanho a ser usado no "setw" abaixo cout<<"\n"<<lista->nome<<setw(formt)<<lista->cpf; // exibe os membros do ponteiro lista=lista->prox; // passa para a próxima lista } } // Remover o primeiro cliente void cadRemover(){ if(n>1){ lista=ini; // Volta ao início aux = lista; // Copia o 1º para aux lista = lista->prox; // Move a lista para o próximo delete aux; // Deleta aux n--; }else cout<<"\nNão é possível remover\n\n"; } // Função pausa Windows/Linux void pausa(){ #ifdef WIN32 system("pause"); #else system("read -p \"Pressione enter para continuar\" saindo"); #endif // WIN32 } // Função limpaTela Windows/Linux void limpaTela(){ #ifdef WIN32 system("cls"); #else system("clear"); #endif // WIN32 }
Compartilhar