-
Notifications
You must be signed in to change notification settings - Fork 0
/
source.cpp
180 lines (159 loc) · 4.74 KB
/
source.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <stdlib.h>
#include <stdio.h>
// Define a estrutura de dado Aluno
struct Aluno
{
char *nomeAluno;
char *emailAluno;
int ruAluno;
struct Aluno *direita, *esquerda;
};
// Declaração das funções
int menu();
void consultaOrdenada(Aluno *ElementoVarredura);
void inserir(Aluno **elementoVarredura, char nomeAluno[61], char emailAluno[61], int ru);
Aluno *buscar(Aluno **ElementoVarredura, int ru);
int main(int argc, char const *argv[])
{
int opcao = 0, ru, c; // variaveis auxiliares
// Declara e armazena memoria para a lista de alunos (Arvore Binária)
Aluno *root;
root = (Aluno *)malloc(sizeof(Aluno));
root = NULL;
// Declara e armazena memoria para o aluno procurado
Aluno *alunoProcurado;
alunoProcurado = (Aluno *)malloc(sizeof(Aluno));
// Faz a inserção diretamente no código dos alunos
inserir(&root, "Gilberto Junior", "[email protected]", 143586);
inserir(&root, "Pamela Vieira", "[email protected]", 123456);
inserir(&root, "Andre Luis", "[email protected]", 987850);
inserir(&root, "Paulo Andrade", "[email protected]", 784567);
inserir(&root, "Carlos Augusto", "[email protected]", 125437);
inserir(&root, "Gilmar Santos", "[email protected]", 5678);
inserir(&root, "Tiago Casturino", "[email protected]", 3472);
inserir(&root, "Murilo Gomes", "[email protected]", 223344);
inserir(&root, "Guilherme Junior", "[email protected]", 338765);
inserir(&root, "Jeferson Jorge", "[email protected]", 980675);
inserir(&root, "Elquias Jorge", "[email protected]", 101010);
// Loop para ficar exibindo o menu
// Só é encerrado caso a opção seja igual a 3 - Sair
while (opcao != 3)
{
opcao = menu(); // executa a função menu e passa o valor para variavel auxiliar
switch (opcao)
{
case 1: // buscar aluno
printf("Digite o numero do RU para buscar: ");
scanf_s("%d", &ru);
while ((c = getchar()) != '\n' && c != EOF)
{
}
alunoProcurado = buscar(&root, ru);
if (alunoProcurado != NULL)
{
printf_s("\nAluno encontrado! - Nome: %s, E-mail: %s, RU: %d\n",
alunoProcurado->nomeAluno, alunoProcurado->emailAluno, alunoProcurado->ruAluno);
}
else
{
printf_s("\nRU nao localizado. Aluno nao cadastrado ou RU digitado incorretamente...\n");
}
break;
case 2: //listar os alunos cadastrados
consultaOrdenada(root);
default:
break;
}
}
return 0;
}
//Função para exibição do menu
int menu()
{
int c, opcao;
// Titulo da aplicação
printf("\nBuscador de Aluno\n");
// Opções do menu
printf("1 - Buscar Aluno\n");
printf("2 - Listar\n");
printf("3 - Sair\n\n");
// Solicita a opção
printf("Digite o numero da opcao desejada: ");
scanf("%d", &opcao);
while ((c = getchar()) != '\n' && c != EOF)
{
}
printf("\n");
return opcao;
}
//Função para inserir o aluno
void inserir(Aluno **elementoVarredura, char nomeAluno[61], char emailAluno[61], int ru)
{
//Verifica se a lista de alunos (Arvore Binária) está vazia
//Se sim salva os dados do aluno
if (*elementoVarredura == NULL)
{
Aluno *NovoAluno = NULL;
NovoAluno = (Aluno *)malloc(sizeof(Aluno));
NovoAluno->esquerda = NULL;
NovoAluno->direita = NULL;
NovoAluno->nomeAluno = nomeAluno;
NovoAluno->emailAluno = emailAluno;
NovoAluno->ruAluno = ru;
*elementoVarredura = NovoAluno;
return;
}
//Se não está vazia inicia as verificações para saber qual lado inserir o aluno
//Se RU menor insere na esquerda
if (ru < (*elementoVarredura)->ruAluno)
{
inserir(&(*elementoVarredura)->esquerda, nomeAluno, emailAluno, ru);
}
else
{
//Se RU maior insere na direita
if (ru > (*elementoVarredura)->ruAluno)
{
inserir(&(*elementoVarredura)->direita, nomeAluno, emailAluno, ru);
}
}
}
//Função para listar os alunos
//Não solicitado no exercicio porem implementado para uma melhor visualização
//Função recursiva que lista todos os alunos da esquerda para direita
void consultaOrdenada(Aluno *ElementoVarredura)
{
if (ElementoVarredura)
{
consultaOrdenada(ElementoVarredura->esquerda);
printf("Nome: %s, E-mail: %s, RU: %d\n",
ElementoVarredura->nomeAluno, ElementoVarredura->emailAluno, ElementoVarredura->ruAluno);
consultaOrdenada(ElementoVarredura->direita);
}
}
//Função para buscar aluno
Aluno *buscar(Aluno **ElementoVarredura, int ru)
{
//Verifica se a lista (Arvore) está vazia e retorna nulo
if (*ElementoVarredura == NULL)
return NULL;
//Verifica se o RU procurado é menor
//Inicia a busca pela esquerda
if (ru < (*ElementoVarredura)->ruAluno)
{
buscar(&((*ElementoVarredura)->esquerda), ru);
}
else
{
//Se RU maior busca pela direita e retorna o aluno
if (ru > (*ElementoVarredura)->ruAluno)
{
buscar(&((*ElementoVarredura)->direita), ru);
}
else
{
if (ru == (*ElementoVarredura)->ruAluno)
return *ElementoVarredura;
}
}
}