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

Listar objetos de classe


AlessandraFord

Pergunta

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;
};

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...