Pesquisar na Comunidade
Mostrando resultados para as tags ''objects''.
Encontrado 1 registro
-
Se alguém tiver qualquer código que adiciona, lista, altera e apaga objetos de uma classe sem utilizar retorno, agradeceria. Caso contrário, gostaria de saber como faço para não utilizar retorno (apontador para o próximo objeto a ser criado) no meu código, que segue: Função main.cpp: int main() { //Declaração de variáveis Database *primeiro = NULL; char opcao; //Artifício para repetir o programa. while(opcao!='s') { //Menu de opcoes system("cls"); cout << "MENU PARA CADASTRO DE CHAMADAS"; cout << endl << "A - Novo cadastro"; cout << endl << "B - Listar cadastros"; cout << endl << "C - Excluir todos os cadastros"; cout << endl << "D - Alterar potencia de chamada ja cadastrada"; cout << endl << "S - Sair" << endl << endl; //Lendo a opcao do menu fflush(stdin); opcao = getch(); //Menu de opcoes switch(opcao) { case 'A': case 'a'://Inserindo chamada system("cls"); cout << "NOVO CADASTRO" << endl; primeiro = inserir_call(primeiro); getch(); break; case 'B': case 'b'://Listando chamadas system("cls"); cout << "CHAMADAS CADASTRADAS" << endl; listar_call(primeiro); getch(); break; case 'C': case 'c'://Excluindo chamada da lista. system("cls"); cout << "EXCLUIR TODOS OS CADASTROS" << endl; while (primeiro != NULL){ primeiro = excluir_calls(primeiro); } cout << endl << "Todas chamadas cadastradas foram excluidas"; getch(); break; case 'D': case 'd'://Alterando chamada da lista. system("cls"); cout << "ALTERAR POTENCIA DE CHAMADA CADASTRADA" << endl; alterar_call(primeiro); getch(); break; case 'S': case 's'://Artifício para sair do programa. system("cls"); opcao='s'; break; default://Artifício que previne de um usuário digitar uma opcão inexistente no menu. system("cls"); break; } } return 0; } Função inserir chamada: Database* inserir_call(Database *primeiro){ Database call; Database *atual = primeiro; char identificador = 'F'; int auxInt; double auxDouble; //Lendo as informações do restaurante. cout << "Node Origem: "; cin >> auxInt;//call.nodeOr;// scanf("%d",&call.nodeOr); call.setNodeOr(auxInt); cout << "Node Destino: "; cin >> auxInt;//call.nodeOr;// scanf("%d",&call.nodeOr); call.setNodeDe(auxInt); cout << "Pot entrada (W): "; cin >> auxDouble;//call.nodeOr;// scanf("%d",&call.nodeOr); call.setPin(auxDouble); //Verificando se o cadastro já existe. for(atual=primeiro; atual!=NULL; atual=atual->prox){ if( (atual->getNodeOr()==call.getNodeOr()) && (atual->getNodeDe()==call.getNodeDe()) && (atual->getPin()==call.getPin()) ){ identificador = 'V'; //já há chamada igual break; } } if(identificador != 'V'){ //Alocando os espaços e guardando as informações do restaurante. Database* NovaChamada = (Database*) malloc (sizeof(Database)); NovaChamada->setNodeOr(call.getNodeOr()); NovaChamada->setNodeDe(call.getNodeDe()); NovaChamada->setPin(call.getPin()); NovaChamada->prox = primeiro; cout << endl << "Cadastro realizado com sucesso"; cout << endl << endl << "PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL"; return NovaChamada; }else{ cout << endl << "Cadastro invalido - chamada cadastrada anteriormente"; cout << endl << endl << "PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL"; return primeiro; } } Função listar chamadas: void listar_call (Database* primeiro){ Database* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. //Imprimindo os restaurantes da lista, e suas repectivas informações. for(atual = primeiro; atual != NULL; atual = atual->prox){ cout << "________________________________" << endl; cout << "Node origem: " << atual->getNodeOr() << endl; cout << "Node destino: " << atual->getNodeDe() << endl; cout << "Pot entrada (W): " << atual->getPin() << endl; } if(primeiro == NULL) cout << endl << "Nenhuma chamada cadastrada" << endl; cout << endl << "PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL"; } Função excluir chamadas: Database* excluir_calls(Database *primeiro){ Database *anterior = NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista. Database *atual = primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista. if(atual == NULL){ return primeiro; } //Excluindo o primeiro restaurante da lista. if(anterior == NULL){ primeiro = atual->prox; //Excluindo um restaurante do meio da lista. } else{ anterior->prox = atual->prox; } //Desalocando o espaço da memória. free(atual); return primeiro; } Função alterar potência de chamada: void alterar_call(Database* primeiro){ Database* atual = primeiro; int nOr, nDe; double power; cout << endl << "Dados da chamada a ser alterada: " << endl << endl; cout << "Noh origem: "; cin >> nOr; cout << "Noh destino: "; cin >> nDe; //Procurando chamada a ser alterada while( (atual!= NULL) && (atual->getNodeOr() != nOr) && (atual->getNodeDe() != nDe) ){ atual = atual->prox; } //Alterando os dados do restaurante. if(atual != NULL){ cout << "NOVA potencia: "; cin >> power; atual->setPin(power); cout << endl << "Potencia alterada com sucesso"; } else{ cout << endl << "Chamada nao encontrada"; } cout << endl << endl << "PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL"; } Class Database: class Database{ public: void setNodeOr(int); void setNodeDe(int); void setPin(double); int getNodeOr(); int getNodeDe(); double getPin(); class Database* prox; private: int nodeOr; int nodeDe; double pIn; };