Ir para conteúdo
Fórum Script Brasil

mmorcor

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre mmorcor

mmorcor's Achievements

0

Reputação

  1. amigos, preciso de uma ajuda, estou com o seguinte codigo abaixo em implementaçao preciso que ele além de inserir e listar por nome, consiga listar por SALA e MATRICULA, o que não estou conseguindo. não sai de jeito nenhum. Do jeito atual que o codigo está a parte de listarsala está com algum problema ,não mostra todos os dados armazenados. E a parte listarmat eu nem soube começar, o que está no codigo é só um rascunho que deixei para compilar os testes. Por favor quem puder ajudar agradeço imensamente, é um trabalho para entregar nesta segunda. Qualquer ajuda e conselho para melhorar é muito bem vinda. #include<iostream> #include<cstdlib> #include <string> using namespace std; struct aluno { char matricula[10]; char nome[50]; int sala; char sexo[2]; int idade; aluno *proximo; aluno *anterior; }; aluno *inicio=NULL, *ultimo=NULL; //ponteiro para primeiro e ultimo item da lista int sala; void sls_store(struct aluno *i, struct aluno **inicio, struct aluno **ultimo); void sls_retrieve(struct aluno *i, struct aluno **inicio, struct aluno **ultimo); void inserir (); void listarmenu (aluno *inicio); void listarnome (aluno *inicio); void listarsala (aluno *inicio); void listarmat (aluno *inicio); void retirar (); int main () { char q; aluno item; cout<<"\n\n Programa para inserir, ordenar e listar alunos \n"; do { cout<<"\n\n Escolha uma opcao:"; cout<<"\n I -> para Inserir novo aluno"; cout<<"\n L -> para Listar os alunos;"; cout<<"\n R -> para Remover os alunos"; cout<<"\n S -> para sair \n\n ->"; cin>>q; /* Le a opcao do usuario */ switch(q) { case 'i': case 'I': inserir(); break; case 'l': case 'L': listarmenu(inicio); break; case 'r': case 'R': retirar(); break; case 's': case 'S': break; default: cout <<"\n\n Opcao não valida"; } getchar(); /* Limpa o buffer de entrada */ }while ((q != 's') && (q != 'S') ); } void inserir() { aluno *item; item=new aluno; fflush(stdin); cout<<"\n Insira o nome do aluno: "; gets(item->nome); fflush(stdin); cout<<"\n Insira a matricula (nnnnnnnnn) do aluno: "; gets(item->matricula); fflush(stdin); do { cout<<"\n Insira a sala do aluno (1, 2 ou 3): "; cin >> sala; if ((sala<1 || sala>3)) { cout <<"\n somente salas 1, 2 ou 3 estao disponiveis"; getchar(); /* Limpa o buffer de entrada */ }}while ((sala<1 || sala>3)); item->sala=sala; fflush(stdin); cout<<"\n Informe o sexo do aluno (M ou F) : "; gets(item->sexo); fflush(stdin); cout<<"\n Informe a idade (nn) do aluno: "; cin >>item->idade; sls_store( item, &inicio, &ultimo); } void sls_store(struct aluno *i, struct aluno **inicio, struct aluno **ultimo) { aluno *velho, *p; p=*inicio; if(!*ultimo){//primeiro elemento da lista i->proximo=NULL; *ultimo=i; *inicio=i; return; } velho=NULL; while (p) { if(strcmp(p->nome, i->nome)<0){ velho=p; p=p->proximo; } else{ if(p->anterior){ // meio da lista p->anterior->proximo=i; i->proximo=p; i->anterior=p->anterior; p->anterior=i; return; } i->proximo=p; //novo primeiro elemento i->anterior=NULL; p->anterior=i; *inicio=i; return; } } //fim do loop while velho->proximo=i; // se for final da lista i->proximo=NULL; i->anterior=velho; *ultimo=i; } void sls_retrieve(struct aluno *i, struct aluno **inicio, struct aluno **ultimo) { if(i->anterior) i->anterior->proximo=i->proximo; else{ //novo primeiro item *inicio=i->proximo; if(inicio) i->anterior=NULL; } if(i->proximo) {i->proximo->anterior=i->anterior;} //delete i->anterior; else {// apaga o ultimo elemento delete ultimo; *ultimo=i->anterior; } } void retirar () //retirar pelo número de matrícula { char matricula[6]; aluno *noatual; noatual=inicio; cout << "\n\nInsira o Numero de matricula do aluno que deseja remover: "; fflush(stdin); gets(matricula); int i=0; while( noatual != NULL) /* Enquanto não chega no fim da lista */ { if(strcmp(noatual->matricula, matricula)==0) { sls_retrieve(noatual, &inicio, &ultimo); cout<<"\n Inscriçao No:"<<matricula<< " removida"; return; } noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ } cout<<"\n\n aluno inexistente"; return; } void listarmenu (aluno *noatual) { int i=0; char q; do { cout<<"\n\n Escolha uma opcao de listagem:"; cout<<"\n C -> listar por nome (ordem Crescente)"; cout<<"\n S -> listar por numero da Sala"; cout<<"\n M -> listar por numero de Matricula"; cout<<"\n D -> listar por nome (ordem Decrescente)"; cout<<"\n R -> Retornar ao menu principal\n ->"; cin>>q; /* Le a opcao do usuario */ switch(q) { case 'c': case 'C': listarnome(inicio);;break; case 's': case 'S': listarsala(inicio); break; case 'm': case 'M': listarmat(inicio); break; case 'd': case 'D': listarnome(ultimo); break; case 'r': case 'R': return; default: cout <<"\n\n Opcao não valida"; } getchar(); /* Limpa o buffer de entrada */ }while ((q != 'r') && (q != 'R') ); while( noatual != NULL) /* Enquanto não chega no fim da lista */ { i++; cout<<"\n\naluno numero "<< i<<"\nmatricula: " <<noatual->matricula<<"\nNome:"; cout<<noatual->nome<<" \nsala:"<<noatual->sala<<" \nsexo:"<<noatual->sexo<<" \nidade:"<<noatual->idade; noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ } } void listarnome (aluno *noatual) //lista por nome Crescente ou Decrescente { int i=0; if (noatual==inicio) { cout<<"\n\n Listagem por Nome (Crescente) "; while( noatual != NULL) /* Enquanto não chega no fim da lista */ { i++; cout<<" \n\n Nome: "<<noatual->nome<<" sexo:"<<noatual->sexo<<" idade:"<<noatual->idade; cout<<" \n sala:"<<noatual->sala<<" matricula: "<<noatual->matricula; noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ }} else { cout<<"\n\n Listagem por Nome (Decrescente) "; while( noatual != NULL) /* Enquanto não chega no inicio da lista */ { i++; cout<<" \n\n Nome: "<<noatual->nome<<" sexo:"<<noatual->sexo<<" idade:"<<noatual->idade; cout<<" \n sala:"<<noatual->sala<<" matricula: "<<noatual->matricula; noatual = noatual->anterior; /* Faz noatual apontar para o anterior no */ }} } void listarsala (aluno *noatual) { int i=0; cout<<"\n\nSala numero 1"; while((noatual != NULL) && (noatual->sala==1)) /* Enquanto não chega no fim da lista */ { i++; cout<<"\n\n Nome:"<<noatual->nome<<" sexo:"<<noatual->sexo<<" idade:"<<noatual->idade; cout<<"\n matricula: " <<noatual->matricula; noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ } noatual=inicio; i=0; cout<<"\n\nSala numero 2"; while((noatual != NULL) && (noatual->sala==2)) /* Enquanto não chega no fim da lista */ { i++; cout<<"\n\n Nome:"<<noatual->nome<<" sexo:"<<noatual->sexo<<" idade:"<<noatual->idade; cout<<"\n matricula: " <<noatual->matricula; noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ } noatual=inicio; i=0; cout<<"\n\nSala numero 3"; while((noatual != NULL) && (noatual->sala==3)) /* Enquanto não chega no fim da lista */ { i++; cout<<"\n\n Nome:"<<noatual->nome<<" sexo:"<<noatual->sexo<<" idade:"<<noatual->idade; cout<<"\n matricula: " <<noatual->matricula; noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ } } void listarmat (aluno *noatual) { int i=0; while( noatual != NULL) /* Enquanto não chega no fim da lista */ { i++; cout<<"\n\naluno numero "<< i<<"\nmatricula: " <<noatual->matricula<<"\nNome:"; cout<<noatual->nome<<" \nsala:"<<noatual->sala<<" \nsexo:"<<noatual->sexo<<" \nidade:"<<noatual->idade; noatual = noatual->proximo; /* Faz noatual apontar para o proximo no */ } }
×
×
  • Criar Novo...