Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

prea

[Resolvido] problema com um exercicio

Recommended Posts

ola a todos ... to com um código aqui que estou tendo problema.. esse é um exercicio da secretária aqui da empresa que faz SI , ai pediu minha ajuda .. ai estou a fazer o exercicio pra ela.. só que não so programador C .. ai li algumas apostilas aqui e fiz isso .. mais to com algumas duvidas..

algumas coisas estão funcionando e como dizem no POG .. se ta funcionando não mecha!

CODE
//===| Chamada de Bibliotecas |================================================

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

 

//===| Estrutura de Dados |====================================================

 

typedef struct aluno{

int Matricula;

char Nome[40];

char Sexo;

char Nascimento[11];

struct aluno *Prox, *Ante;

};

 

typedef struct Lista {

struct aluno *inicio, *fim;

int total;

};

 

//===| Variáveis Globais |======================================================

 

Lista L;

int Opcao;

 

//===| Procedimentos e Funções |================================================

 

void inicializaLista(struct Lista *lista){

/* Procedimento que prepara a Lista L para a execução do programa. Essa lista

é esvaziada. */

lista->inicio = NULL;

lista->fim = NULL;

lista->total = 0;

printf("\n\n =====> Lista Esvaziada e pronta para receber alunos <====\n\n");

}

 

//===| inserir alunos|=========================================================

void insereAluno(struct Lista *li){

/* Procedimento que insere um novo aluno na Lista L de maneira que a Lista

permaneça ordenada por número de matricula. */

 

//variáveis locais:

struct aluno *novo, *atual, *anterior;

 

//criação de novo REGISTRO (struct) de aluno apontado por NOVO:

novo = (aluno *)malloc(sizeof(aluno));

 

//Cadastro do ALUNO pelo USUARIO-FINAL (Entrada de Dados):

system("CLS");

 

printf("\n\n\n ==========| INSERE ALUNO |==========\n\n");

printf(" Matricula: ");

scanf("%d", &novo->Matricula);

printf("\n\n Nome: ");

gets(novo->Nome);

gets(novo->Nome);

printf("\n\n Sexo (M ou F): ");

scanf("%c", &novo->Sexo);

printf("\n\n Nascimento (dd/mm/aaaa): ");

gets(novo->Nascimento);

gets(novo->Nascimento);

 

//Inclusão do REGISTRO (struct) na Lista L:

 

if ((li->inicio == NULL) && (li->fim == NULL)){

//A Lista L está vazia: este registro será o único.

li->inicio = novo;

li->fim = novo;

li->total = 1;

 

novo->Prox = NULL;

novo->Ante = NULL;

} else {

//A Lista L não está vazia: iniciar busca na Lista para identificar ponto de inserção ...

atual = li->inicio; //atual aponta para o primeiro aluno da lista.

 

while (atual != NULL){

if (atual->Matricula > novo->Matricula) {

//Deve-se inserir o NOVO registro antes do apontado por ATUAL

if (atual == li->inicio) {

//inserir antes do primeiro registro: inserir no INICIO

novo->Prox = atual;

novo->Ante = NULL;

 

atual->Ante = novo;

 

li->inicio = novo;

 

novo = NULL; //controle para saber se novo foi inserido

 

} else {

//inserir no meio da Lista L

novo->Prox = atual;

anterior = atual->Ante;

novo->Ante = anterior;

 

atual->Ante = novo;

anterior->Prox = novo;

 

novo = NULL; //controle para saber se novo foi inserido

}//if-else

}//if

atual = atual->Prox;

}//while

 

if (novo != NULL){

//inserindo no final da Lista L.

novo->Prox = NULL;

novo->Ante = li->fim;

anterior = li->fim;

anterior->Prox = novo;

li->fim = novo;

}//if

 

}//if-else

 

printf("\n\n\n ===| Aluno INSERIDO com SUCESSO |===\n\n\n");

system("PAUSE");

}

 

 

void listarAlunos(Lista li){

/* Procedimento que exibe Matricula e Nome de todos os ALUNOS que fazem

parte da Lista L. */

struct aluno *atual;

 

system("CLS");

 

printf("\n\n\n =====| Listagem de Alunos |=====\n\n\n");

 

atual = li.inicio;

 

while (atual != NULL){

printf(" %d - %s\n", atual->Matricula, atual->Nome);

atual = atual->Prox; //atual move para o seguinte registro de aluno

}//while

 

printf("\n\n");

system("PAUSE");

}

void listarAlunosSexo(Lista li){

/* Procedimento que exibe Matricula e Nome de todos os ALUNOS por Sexo. */

char escsexo;

struct aluno *atual;

atual = li.inicio;

system("CLS");

printf("\n\n\n =====| Listagem de Alunos Por Sexo |=====\n\n\n");

printf("\n\n Selecione o sexo M ou F:\n");

escsexo = getch();

 

while (atual != NULL){

if(escsexo == atual->Sexo){

printf(" %d - %s\n",atual->Matricula,atual->Nome);

 

}

atual = atual->Prox; //fecha o if

}//fecha o while

 

printf("\n\n");

system("PAUSE");

}

void pesquisamatricula(Lista li){

// Procedimento para pesquisar na lista os alunos por matricula

int pesqmatricula;

struct aluno *atual;

atual = li.inicio;

system("CLS");

printf("\n\n\n =====| Pesquisar aluno por Matricula |=====\n\n\n");

printf("\n\n Digite o numero da Matricula:");

scanf("%d",&pesqmatricula);

while (atual != NULL){

if(pesqmatricula == atual->Matricula){

printf(" %d - %s - %c - %s\n",atual->Matricula,atual->Nome,atual->Sexo,atual->Nascimento);

 

}//fecha o if

atual = atual->Prox;

}

 

printf("\n\n");

system("PAUSE");

}

void pesquisanomecompleto(Lista li){

//procedimento para pesquisa na lista por nome completo

char nomecompleto[40];

struct aluno *atual;

atual = li.inicio;

system("CLS");

printf("\n\n\n =====| Pesquisar aluno por Nome Completo |=====\n\n\n");

printf("\n\n Digite o nome Completo do aluno:");

gets(nomecompleto);

//gets(nomecompleto);

while (atual != NULL){

if(nomecompleto == atual->Nome){

printf(" %d - %s - %c - %s\n",atual->Matricula,atual->Nome,atual->Sexo,atual->Nascimento);

}

else{

 

printf("não foi encontrado nenhum aluno com este nome");

// printf(atual->Nome);

}//fecha o if

atual = atual->Prox;

}

printf("\n\n");

system("PAUSE");

}

 

int Menu(){

/* Função de Menu que permite ao usuário-final selecionar a opção desejada. */

//variável local:

int op;

 

system("CLS");

printf("\n\n\n =====| M E N U |=====\n\n");

printf(" 0 - Sair (Encerrar Aplicativo)\n\n");

printf(" 1 - INSERIR novo ALUNO.\n");

printf(" 2 - LISTAR todos os ALUNOS.\n");

printf(" 3 - LISTAR ALUNOS por SEXO.\n");

printf(" 4 - CONSULTAR ALUNO por Matricula.\n");

printf(" 5 - CONSULTAR ALUNO por Nome Completo.\n");

printf(" 6 - CONSULTAR ALUNO por TRECHO de Nome.\n");

printf(" 7 - EXCLUIR ALUNO.\n\n\n");

 

printf(" SELCEIONE OPCAO ==> ");

scanf("%d", &op);

 

if ((op > 7) || (op < 0)){

printf("\n\n\n ERRO - Opcao INVALIDA !!!");

printf("\n\n Tente Outra Vez !\n\n\n");

system("PAUSE");

}

 

return op;

}

 

 

//===| Programa Principal |====================================================

 

int main(){

inicializaLista(&L);

 

do {

Opcao = Menu();

 

switch (Opcao){

case 1: insereAluno(&L); break;

case 2: listarAlunos(L); break;

case 3: listarAlunosSexo(L); break;

case 4: pesquisamatricula(L);break;

case 5: pesquisanomecompleto(L);break;

}//switch

 

} while (Opcao != 0);

}

 

 

isso é tudo que fiz até gora

as opções do menu 1,2,3 e 4 estão funcionando.. estou com problema na opção 5 que é

pesquisar pelo nome.. eu achei q seria o mais facil .. mais não to conseguindo nem a ***..

mais poo não tenho conhecimento quase nenhum em C .. e consegui fazer mta coisa..

acho q até coisa mais dificil do que essa pesquisa.. mais fazer oq ..

já tentei usar scanf , gest .. mais na hora de usar o if pra comparar com os cadastrados não encontra..

como eu faço essa comparação alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize o strcmp(); para comparar strings... + verifique os '\n' q ficam nas strings as vzs isso enche viw...

sempre finalize as strings com '\0'

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm... pesquisei sobre este codigo aqui..

seria então assim

 

if(strcmp(nomecompleto,atual->Nome)== 0)

 

 

ai se os 2 forem igual o strcmp vai me retornar 0 ...e vai rodar oque eu quero?

se é isso que entendi

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso msm, + faça + simples:

if(!strcmp(nomecompleto,atual->nome))

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesta parte do codigo para pesquisar por codigo ..

eu tinha colocao para pegar a letra que o usuario clicar..

com o comando getch()...

só que isso fica mto ruim ..

então coloquei como achei que deveria ser..

que seria um scanf("%c",escsexo); mais se eu coloco sem o & antes de escsexo o programa fecha..

e se coloco com o & ele passa direto sem o usuario poder escrever nada..

 

e outra duvida..

para pesquisar por parte do nome da pessoa como se faz..

no sql se usa o comando LIKE .. mais aqui como uma string é um vetor de caracteres .. então já não é igual..

então eu teria que fazer um for no nome da pessoa pra ver caracter por caracter?

mais acho q isso seria mto complicado .. pq se eu pesquisa-se no nome Renato a parte ato..

 

 

CODE
void listarAlunosSexo(Lista li){

/* Procedimento que exibe Matricula e Nome de todos os ALUNOS por Sexo. */

char escsexo;

struct aluno *atual;

atual = li.inicio;

system("CLS");

printf("\n\n\n =====| Listagem de Alunos Por Sexo |=====\n\n\n");

printf("\n\n Selecione o sexo M ou F:\n");

scanf("%c",escsexo);

 

while (atual != NULL){

if(escsexo == atual->Sexo){

printf(" %d - %s\n",atual->Matricula,atual->Nome);

 

}

atual = atual->Prox; //fecha o if

}//fecha o while

 

printf("\n\n");

system("PAUSE");

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

poo valeu ..deu tudo certo aqui..

agora to quebrando a cabeça pra fazer a exclusão..

mais vo tentar aqui..

vlw pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.