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;
}
}
//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;
Pergunta
AlessandraFord
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
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.