Logo Hardware.com.br
pdrodrigs
pdrodrigs Novo Membro Registrado
1 Mensagem 0 Curtidas

Sistema de cadastro de alunos em C

#1 Por pdrodrigs 20/10/2021 - 19:10
Oi, pessoal, boa tarde!

Estou começando a programar em C, estou em dúvida nisso:



Estou criando um sistema de cadastro de alunos em C, o problema é na parte de pesquisar aluno. Exemplo, se eu cadastrar 2 alunos, Leonardo e Juliana, eu quero poder tanto pesquisar o nome completo Leonardo, ou apenas Leo, mas não estou conseguindo.

esse é o código:

#include <stdio.h>
#include <string.h>
#define MAX_ALUNOS 50
typedef struct
{
char nome[50], sobrenome[50], curso[10], email[100], cpf[11], ra[9];
int ativo;
} Aluno;
Aluno alunos[MAX_ALUNOS];

void menu();
void cadastrar();
void remover();
void pesquisar();
void listar();

int main(int argc, char const *argv[])
{
menu();
return 0;
}
void menu()
{
system("clear&quot;
int op;
do
{
printf("SISTEMA CADASTRO\n&quot;
printf("1- cadastrar aluno\n2- remover aluno\n3- pesquisar aluno\n4- Listar alunos\n0- sair\n&quot;
scanf("%d", &op);
getchar();
switch (op)
{
case 1:
cadastrar();
break;
case 3:
pesquisar();
break;
case 4:
listar();
break;
}
getchar();
} while (op != 0);
}
void cadastrar()
{
char nome[50], sobrenome[50], curso[10], email[100], cpf[12], ra[12];
int op;
do
{
system("clear&quot;
printf("CADASTRAR NOVO ALUNO\n&quot;
printf("Nome: &quot;
fgets(nome, sizeof(nome), stdin);
printf("Sobrenome: &quot;
fgets(sobrenome, sizeof(sobrenome), stdin);
printf("RA: &quot;
fgets(ra, sizeof(ra), stdin);
printf("Email: &quot;
fgets(email, sizeof(email), stdin);
printf("Curso (Ex: TADS, ENG, BIOMED, etc): &quot;
fgets(curso, sizeof(curso), stdin);
printf("CPF: &quot;
fgets(cpf, sizeof(cpf), stdin);
printf("\n1 - continuar\n0 - sair\n&quot;
for (int i = 0; i < MAX_ALUNOS; ++i)
{
if (alunos[i].ativo == 0)
{
strcpy(alunos[i].nome, nome);
strcpy(alunos[i].sobrenome, sobrenome);
strcpy(alunos[i].ra, ra);
strcpy(alunos[i].email, email);
strcpy(alunos[i].curso, curso);
strcpy(alunos[i].cpf, cpf);
alunos[i].ativo = 1;
break;
}
}
scanf("%d", &op);
break;
getchar();
} while (op != 0);
}
void remover()
{
}
void pesquisar()
{
system("clear&quot;
char nome[50], sobrenome[50], curso[10], email[100], cpf[12], ra[12];
printf("Digite o nome do aluno para pesquisar: &quot;
fgets(nome, sizeof(nome), stdin);
for (int i = 0; i < MAX_ALUNOS; ++i)
{
if (strstr(alunos[i].nome, nome) != NULL)
{
printf("\nNome: %s", alunos[i].nome);
printf("Sobrenome: %s", alunos[i].sobrenome);
printf("RA: %s", alunos[i].ra);
printf("Email: %s", alunos[i].email);
printf("Curso: %s", alunos[i].curso);
printf("CPF: %s", alunos[i].cpf);
printf("-----------------------\n&quot;
}
}
}
void listar()
{
system("clear&quot;
printf("LISTA DE ALUNOS\n&quot;
for (int i = 0; i < MAX_ALUNOS; ++i)
{
if (alunos[i].ativo == 1)
{
printf("\n-----------------------\n&quot;
printf("Nome: %s", alunos[i].nome);
printf("Sobrenome: %s", alunos[i].sobrenome);
printf("RA: %s", alunos[i].ra);
printf("Email: %s", alunos[i].email);
printf("Curso: %s", alunos[i].curso);
printf("CPF: %s", alunos[i].cpf);
printf("\n-----------------------\n&quot;
}
}
}
Responder
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
22/10/2021 - 15:01
pdrodrigs disse:
... eu quero poder tanto pesquisar o nome completo Leonardo, ou apenas Leo, mas não estou conseguindo.

A resposta é simples: fgets captura junto a quebra de linha ─ o clique na tecla [Enter] ─ e por isso o casamento de padrões não bate, sacou?
- Remova ele do final do 'nome' digitado e confira o resultado!

Observações:
Seu código usa força bruta demais, e sem necessidade.
Todos aqueles "For" percorrem a lista inteira toda vez, sendo que só precisaria varrer a quantidade que foi cadastrada. Que tal adicionar um contador, seria ideal.
Já no cadastro a situação é bem pior, porque ao invés de lançar os mesmos valores pra todos os restantes só precisava cadastrar o próximo rolleyes.png.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal