#include #include #include #include #define CAID 10 #define CANOME 12 #define CACPF 12 #define CCID 4 #define CCNOME 25 typedef struct A { char id[CAID]; char nome[CANOME]; char cpf[CACPF]; struct A *esquerdo; struct A *direito; short altura; }stc_Aluno; typedef struct C { char id[CCID]; char nome[CCNOME]; char departamento[5]; int creditos; struct C *esquerdo; struct C *direito; short altura; }stc_Curso; typedef struct AC { char id_aluno[10]; char id_curso[10]; int creditos; struct AC *esquerdo, *direito; short altura; }stc_AlunoCurso; /* Retorna o maior dentre dois valores a, b -> altura de dois nós da árvore. */ short maior(short a, short b){ return (a > b)? a: b; } // Retorna a altura de um nó ou -1 caso ele seja null. short alturaAluno(stc_Aluno *a){ if(a == NULL) return -1; else return a->altura; } // Calcula e retorna o fator de balanceamento de um nó. short fatorDeBalanceamentoAluno(stc_Aluno *a){ if(a) return (alturaAluno(a->esquerdo) - alturaAluno(a->direito)); else return 0; } // ----------- ROTAÇÕES ----------- // Função para a rotação à esquerda. stc_Aluno* rotacaoEsquerdaAluno(stc_Aluno *a){ stc_Aluno *b, *c; b = a->direito; c = b->esquerdo; b->esquerdo = a; a->direito = c; a->altura = maior(alturaAluno(a->esquerdo), alturaAluno(a->direito)) + 1; b->altura = maior(alturaAluno(b->esquerdo), alturaAluno(b->direito)) + 1; return b; } // Função para a rotação à direita. stc_Aluno* rotacaoDireitaAluno(stc_Aluno *a){ stc_Aluno *b, *c; b = a->esquerdo; c = b->direito; b->direito = a; a->esquerdo = c; a->altura = maior(alturaAluno(a->esquerdo), alturaAluno(a->direito)) + 1; b->altura = maior(alturaAluno(b->esquerdo), alturaAluno(b->direito)) + 1; return b; } stc_Aluno* rotacaoEsquerdaDireitaAluno(stc_Aluno *a){ a->esquerdo = rotacaoEsquerdaAluno(a->esquerdo); return rotacaoDireitaAluno(a); } stc_Aluno* rotacaoDireitaEsquerdaAluno(stc_Aluno *a){ a->direito = rotacaoDireitaAluno(a->direito); return rotacaoEsquerdaAluno(a); } /* Função para realizar o balanceamento da árvore após uma inserção ou remoção Recebe o nó que está desbalanceado e retorna a nova raiz após o balanceamento. */ stc_Aluno* balancearAluno(stc_Aluno *a){ short fb = fatorDeBalanceamentoAluno(a); // Rotação à esquerda. if(fb < -1 && fatorDeBalanceamentoAluno(a->direito) <= 0) a = rotacaoEsquerdaAluno(a); // Rotação à direita. else if(fb > 1 && fatorDeBalanceamentoAluno(a->esquerdo) >= 0) a = rotacaoDireitaAluno(a); // Rotação dupla à esquerda. else if(fb > 1 && fatorDeBalanceamentoAluno(a->esquerdo) < 0) a = rotacaoEsquerdaDireitaAluno(a); // Rotação dupla à direita. else if(fb < -1 && fatorDeBalanceamentoAluno(a->direito) > 0) a = rotacaoDireitaEsquerdaAluno(a); return a; } // Função que adiciona um novo aluno. stc_Aluno* novoAluno(char id[], char nome[], char cpf[]){ stc_Aluno *novo = malloc(sizeof(stc_Aluno)); if(novo){ strcpy(novo->id,id); strcpy(novo->nome,nome); strcpy(novo->cpf,cpf); novo->esquerdo = NULL; novo->direito = NULL; novo->altura = 0; } else printf("\nErro ao adicionar novo aluno\n"); return novo; } // Função que adiciona um aluno. stc_Aluno* adicionaAluno(stc_Aluno *a, char id[], char nome[], char cpf[]){ if(a == NULL) return novoAluno(id, nome, cpf); else{ if(atof(id) < atof(a->id)) a->esquerdo = adicionaAluno(a->esquerdo, id, nome, cpf); else if(atof(id) > atof(a->id)) a->direito = adicionaAluno(a->direito, id, nome, cpf); } // Recalcula a altura de todos os nós entre a raiz e o novo nó inserido. a->altura = maior(alturaAluno(a->esquerdo), alturaAluno(a->direito)) + 1; // Verifica a necessidade de rebalancear a árvore. a = balancearAluno(a); return a; } // Função que remove um aluno pelo ID ou CPF. stc_Aluno* removeAluno(stc_Aluno *a, char variavel[], int opcao){ if(a == NULL){ if(strlen(variavel) == (CAID-1)){ printf("\nO ID digitado não existe no banco de dados\n"); return NULL; } } else{ if(strlen(variavel) == (CAID-1)){ if(strcmp(a->id, variavel) == 0){ if(a->esquerdo == NULL && a->direito == NULL){ if(opcao) printf("\nAluno removido com sucesso\n"); free(a); return NULL; } else{ if(a->esquerdo != NULL && a->direito != NULL){ stc_Aluno *aux = a->esquerdo; while(aux->direito != NULL) aux = aux->direito; strcpy(a->id, aux->id); strcpy(aux->id, variavel); strcpy(a->nome, aux->nome); strcpy(a->cpf, aux->cpf); a->esquerdo = removeAluno(a->esquerdo, variavel, opcao); return a; } else{ stc_Aluno *aux; if(a->esquerdo != NULL) aux = a->esquerdo; else aux = a->direito; if(opcao) printf("\nAluno removido com sucesso\n"); free(a); return aux; } } } else{ if(atof(variavel) < atof(a->id)) a->esquerdo = removeAluno(a->esquerdo, variavel, opcao); else a->direito = removeAluno(a->direito, variavel, opcao); } } else if(strlen(variavel) == (CACPF-1)){ if(strcmp(a->cpf, variavel) == 0){ if(a->esquerdo == NULL && a->direito == NULL){ if(opcao) printf("\nAluno removido com sucesso\n"); free(a); return NULL; } else{ if(a->esquerdo != NULL && a->direito != NULL){ stc_Aluno *aux = a->esquerdo; while(aux->direito != NULL) aux = aux->direito; strcpy(a->cpf, aux->cpf); strcpy(aux->cpf, variavel); strcpy(a->nome, aux->nome); strcpy(a->id, aux->id); a->esquerdo = removeAluno(a->esquerdo, variavel, opcao); return a; } else{ stc_Aluno *aux; if(a->esquerdo != NULL) aux = a->esquerdo; else aux = a->direito; if(opcao) printf("\nAluno removido com sucesso\n"); free(a); return aux; } } } else{ a->esquerdo = removeAluno(a->esquerdo, variavel, opcao); a->direito = removeAluno(a->direito, variavel, opcao); } } // Recalcula a altura de todos os nós entre a raiz e o novo nó inserido. a->altura = maior(alturaAluno(a->esquerdo), alturaAluno(a->direito)) + 1; // Verifica a necessidade de rebalancear a árvore. a = balancearAluno(a); return a; } return a; } // Função para imprimir dados. int imprimeAluno(int i, char variavel[]){ FILE *arq_aluno; stc_Aluno aluno; arq_aluno = fopen("aluno.bin","a+b"); printf("\t\t\t\t\t\t LISTA DE ALUNOS\n"); printf("\t-----------------------------------------------------------\n"); printf("\t|\t ID\t\t| \t CPF\t | \t\t\t NOME\t\t\t |\n"); printf("\t-----------------------------------------------------------\n"); while(fread(&aluno, 1, sizeof(stc_Aluno), arq_aluno) > 0){ if(i == 1){ if(strcmp(aluno.id, variavel) == 0){ printf("\t%s | %s | %s \n", aluno.id, aluno.cpf, aluno.nome); printf("\t-----------------------------------------------------------\n\n"); return 1; } } else printf("\t%s | %s | %s \n", aluno.id, aluno.cpf, aluno.nome); } printf("\t-----------------------------------------------------------\n\n"); return 1; } // Função para salvar os dados no arquivo. void salvarAluno(stc_Aluno **a){ FILE *arq_aluno; stc_Aluno aluno; int temp; if(*a!=NULL){ salvarAluno(&(*a)->esquerdo); arq_aluno = fopen("aluno.bin","a+b"); strcpy(aluno.id, (*a)->id); strcpy(aluno.nome, (*a)->nome); strcpy(aluno.cpf, (*a)->cpf); temp = fwrite(&aluno, 1, sizeof(stc_Aluno), arq_aluno); if (!temp) printf ("Erro ao salvar\n"); fclose(arq_aluno); salvarAluno(&(*a)->direito); } } // Função para procurar um aluno pelo ID, NOME ou CPF. int procureAluno(stc_Aluno **a, char variavel[]){ if(*a != NULL){ if(strlen(variavel) == (CAID-1)){ if(strcmp(variavel, (*a)->id) == 0){ printf("\nID: %s\nNome: %s\nCPF: %s\n\n", (*a)->id, (*a)->nome, (*a)->cpf); } else if(atof(variavel) < atof((*a)->id)) return procureAluno(&(*a)->esquerdo, variavel); else if(atof(variavel) > atof((*a)->id)) return procureAluno(&(*a)->direito, variavel); } else if(strlen(variavel) <= (CANOME-1)){ procureAluno(&(*a)->esquerdo, variavel); procureAluno(&(*a)->direito, variavel); if(strcmp(variavel, (*a)->nome) == 0) printf("\nID: %s\nNome: %s\nCPF: %s\n\n", (*a)->id, (*a)->nome, (*a)->cpf); } else if(strlen(variavel) == (CACPF-1)){ procureAluno(&(*a)->esquerdo, variavel); procureAluno(&(*a)->direito, variavel); if(strcmp(variavel, (*a)->cpf) == 0) printf("\nID: %s\nNome: %s\nCPF: %s\n\n", (*a)->id, (*a)->nome, (*a)->cpf); } return 1; } else return 0; } // Verifica se o ID, NOME ou CPF digitado existe no banco de dados. int compareAluno(stc_Aluno **a, char variavel[]){ int i, j, aux = 0; if(*a != NULL){ if(strlen(variavel) == (CAID-1)){ if(strcmp(variavel, (*a)->id) == 0) return 1; else if(atof(variavel) < atof((*a)->id)) i = compareAluno(&(*a)->esquerdo, variavel); else if(atof(variavel) > atof((*a)->id)) j = compareAluno(&(*a)->direito, variavel); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } else if(strlen(variavel) <= (CANOME-1)){ if(strcmp(variavel, (*a)->nome) == 0) return 1; int i = compareAluno(&(*a)->esquerdo, variavel); int j = compareAluno(&(*a)->direito, variavel); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } else if(strlen(variavel) == (CACPF-1)){ if(strcmp((*a)->cpf, variavel) == 0) return 1; int i = compareAluno(&(*a)->esquerdo, variavel); int j = compareAluno(&(*a)->direito, variavel); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } } else{ if(aux == 1) return aux; } return aux; } // Guarda em uma variável o ID digitado. char* idAluno(stc_Aluno *a, int opcao){ stc_Aluno aluno; int b, c, d, e; char *dado = malloc(sizeof(char)*CAID); if(opcao == 1){ // Recebe conteúdo ID. printf("\nDigite o ID do aluno (%d dígitos): ", CAID-1); scanf(" %s", aluno.id); // Verifica se o ID possui caracteres válidos. c = 0; for( b = 0; aluno.id[b] != '\0'; b++){ if(!isdigit(aluno.id[b])){ c = 1; break; } } // Verifica se o ID possui quantidade correta de caracteres. d = 0; for( b = 0; aluno.id[b] != '\0'; b++) d++; e = compareAluno(&a, aluno.id); // Repete a pergunta no caso de dado inválido. while(c == 1 || d != (CAID-1) || e == 1){ e = compareAluno(&a, aluno.id); if(e == 1) printf("\nEste ID já está em uso\n"); printf("\nID inválido, digite novamente\n"); printf("\nID (%d dígitos): ", CAID-1); scanf(" %s", aluno.id); c = 0; d = 0; for( b = 0; aluno.id[b] != '\0'; b++){ if(!isdigit(aluno.id[b])){ c = 1; break; } } for( b = 0; aluno.id[b] != '\0'; b++) d++; e = compareAluno(&a, aluno.id); } } else if(opcao == 2){ // Recebe conteúdo ID. printf("Digite o ID do aluno (%d dígitos): ", CAID-1); scanf(" %s", aluno.id); // Verifica se o ID possui caracteres válidos. c = 0; for( b = 0; aluno.id[b] != '\0'; b++){ if(!isdigit(aluno.id[b])){ c = 1; break; } } // Verifica se o ID possui quantidade correta de caracteres. d = 0; for( b = 0; aluno.id[b] != '\0'; b++) d++; // Repete a pergunta no caso de dado inválido. while(c == 1 || d != (CAID-1)){ printf("\nID inválido, digite novamente\n"); printf("\nID (%d dígitos): ", CAID-1); scanf(" %s", aluno.id); c = 0; d = 0; for( b = 0; aluno.id[b] != '\0'; b++){ if(!isdigit(aluno.id[b])){ c = 1; break; } } for( b = 0; aluno.id[b] != '\0'; b++) d++; } } strcpy(dado, aluno.id); return dado; } // Guarda em uma variável o NOME digitado. char* nomeAluno(stc_Aluno *a){ stc_Aluno aluno; int b, c, d; char *dado = malloc(sizeof(char)*CANOME); // Recebe conteúdo NOME. printf("Digite o NOME do aluno (%d dígitos): ", CANOME-1); scanf(" %[^\n]s", aluno.nome); // Verifica se o NOME possui quantidade correta de caracteres. c = 0; for( b = 0; aluno.nome[b] != '\0'; b++){ if(!islower(aluno.nome[b])) if(!isupper(aluno.nome[b])){ if(!isspace(aluno.nome[b])){ c = 1; break; } } } // Verifica se o NOME possui quantidade correta de caracteres. d = 0; for( b = 0; aluno.nome[b] != '\0'; b++) d++; // Repete a pergunta no caso de dado inválido. while(c == 1 || d > (CANOME-1)){ printf("\nNOME inválido, digite novamente\n"); printf("\nNome (%d dígitos): ", CANOME-1); scanf(" %[^\n]s", aluno.nome); c = 0; d = 0; for( b = 0; aluno.nome[b] != '\0'; b++){ if(!islower(aluno.nome[b])) if(!isupper(aluno.nome[b])){ if(!isspace(aluno.nome[b])){ c = 1; break; } } } for( b = 0; aluno.nome[b] != '\0'; b++) d++; } strcpy(dado, aluno.nome); return dado; } // Guarda em uma variável o CPF digitado. char* cpfAluno(stc_Aluno *a, int opcao){ stc_Aluno aluno; int b, c, d, e; char *dado = malloc(sizeof(char)*CACPF); if(opcao == 1){ // Recebe conteúdo CPF. printf("Digite o CPF do aluno (%d dígitos): ", CACPF-1); scanf(" %s", aluno.cpf); // Verifica se o CPF possui caracteres válidos. c = 0; for( b = 0; aluno.cpf[b] != '\0'; b++){ if(!isdigit(aluno.cpf[b])){ c = 1; break; } } // Verifica se o CPF possui quantidade correta de caracteres. d = 0; for( b = 0; aluno.cpf[b] != '\0'; b++) d++; e = compareAluno(&a, aluno.cpf); // Repete a pergunta no caso de dado inválido. while(c == 1 || d != (CACPF-1) || e == 1){ e = compareAluno(&a, aluno.cpf); if(e == 1) printf("\nEste CPF já está em uso\n"); printf("\nCPF inválido, digite novamente\n"); printf("\nCPF (%d dígitos): ", CACPF-1); scanf(" %s", aluno.cpf); c = 0; d = 0; for( b = 0; aluno.cpf[b] != '\0'; b++){ if(!isdigit(aluno.cpf[b])){ c = 1; break; } } for( b = 0; aluno.cpf[b] != '\0'; b++) d++; e = compareAluno(&a, aluno.cpf); } } else if(opcao == 2){ // Recebe conteúdo CPF. printf("Digite o CPF do aluno (%d dígitos): ", CACPF-1); scanf(" %s", aluno.cpf); // Verifica se o CPF possui caracteres válidos. c = 0; for( b = 0; aluno.cpf[b] != '\0'; b++){ if(!isdigit(aluno.cpf[b])){ c = 1; break; } } // Verifica se o CPF possui quantidade correta de caracteres. d = 0; for( b = 0; aluno.cpf[b] != '\0'; b++) d++; // Repete a pergunta no caso de dado inválido. while(c == 1 || d != CACPF-1){ printf("\nCPF inválido, digite novamente\n"); c = CACPF-1; printf("\nCPF (%d dígitos): ", c); scanf(" %s", aluno.cpf); c = 0; d = 0; for( b = 0; aluno.cpf[b] != '\0'; b++){ if(!isdigit(aluno.cpf[b])){ c = 1; break; } } for( b = 0; aluno.cpf[b] != '\0'; b++) d++; } } strcpy(dado, aluno.cpf); return dado; } // Altera um dado do aluno que o usuário escolher pelo seu ID. stc_Aluno* alteraAluno(stc_Aluno **a, stc_Aluno **A, char variavel[], int opcao){ char id[CAID], nome[CANOME], cpf[CACPF]; if(*a != NULL){ if(opcao == 1){ if(strcmp(variavel, (*a)->id) == 0){ strcpy(nome, (*a)->nome); strcpy(cpf, (*a)->cpf); strcpy(id, idAluno(*A, 1)); *A = removeAluno(*A, (*a)->id, 0); *A = adicionaAluno(*A, id, nome, cpf); remove("aluno.bin"); salvarAluno(&(*A)); printf("\nID salvo com sucesso\n"); } else if(atof(variavel) < atof((*a)->id)) alteraAluno(&(*a)->esquerdo, &(*A), variavel, opcao); else if(atof(variavel) > atof((*a)->id)) alteraAluno(&(*a)->direito, &(*A), variavel, opcao); } else if(opcao == 2){ if(strcmp(variavel, (*a)->id) == 0){ strcpy((*a)->nome, nomeAluno(*A)); remove("aluno.bin"); salvarAluno(&(*A)); printf("\nNOME salvo com sucesso\n"); } else if(atof(variavel) < atof((*a)->id)) alteraAluno(&(*a)->esquerdo, &(*A), variavel, opcao); else if(atof(variavel) > atof((*a)->id)) alteraAluno(&(*a)->direito, &(*A), variavel, opcao); } else if(opcao == 3){ if(strcmp(variavel, (*a)->id) == 0){ strcpy((*a)->cpf, cpfAluno(*A, 1)); remove("aluno.bin"); salvarAluno(&(*A)); printf("\nCPF salvo com sucesso\n"); } else if(atof(variavel) < atof((*a)->id)) alteraAluno(&(*a)->esquerdo, &(*A), variavel, opcao); else if(atof(variavel) > atof((*a)->id)) alteraAluno(&(*a)->direito, &(*A), variavel, opcao); } } return *A; } int main(void) { FILE *arq_aluno, *arq_curso, *arq_alunoCurso; stc_Aluno aluno, *student = NULL; int a; char b; arq_aluno = fopen("aluno.bin","rb"); if(!arq_aluno) printf("\nErro na abertura do arquivo da tabela ALUNO\nAdicione um aluno!\n"); else{ while(fread(&aluno,1,sizeof(stc_Aluno),arq_aluno) > 0) // Readiciona os dados na AVL. student = adicionaAluno(student, aluno.id, aluno.nome, aluno.cpf); } arq_curso = fopen("curso.bin","rb"); if(!arq_curso) printf("\nErro na abertura do arquivo da tabela CURSO\nAdicione um curso!\n"); arq_alunoCurso = fopen("alunoCurso.bin","rb"); if(!arq_alunoCurso) printf("\nErro na abertura do arquivo da tabela ALUNO_CURSO\nAdicione um curso e um aluno!\n"); do{ fprintf(stdout, "\nDeseja usar qual tabela?\n\n1-tbl_aluno\n2-tbl_curso\n3-tbl_alunocurso\n\nR : "); fscanf(stdin, "%d", &a); printf("\n"); switch(a) { // Funcionalidades para a tabela aluno. case 1: do{ fprintf(stdout, "\nO que você deseja fazer na tabela ALUNO?\n\n1-Adicionar aluno\n2-Procurar aluno\n3-Remover aluno\n4-Alterar informação do aluno\n5-Imprimir alunos\n6-Voltar\n\nR : "); fscanf(stdin, "%d", &a); printf("\n"); switch(a) { case 1: do{ strcpy(aluno.id, idAluno(student, 1)); strcpy(aluno.nome, nomeAluno(student)); strcpy(aluno.cpf, cpfAluno(student, 1)); // Adiciona os dados na AVL. student = adicionaAluno(student, aluno.id, aluno.nome, aluno.cpf); remove("aluno.bin"); salvarAluno(&student); printf("\nAluno salvo com sucesso\n\n"); printf("\nGostaria de adicionar outro aluno?\n\n1 SIM\t\t2 NÃO\n\nR : "); scanf(" %c", &b); printf("\n"); }while(b == '1'); break; case 2: do{ fprintf(stdout, "\nComo você deseja procurar o aluno?\n\n1-ID\n2-Nome\n3-CPF\n4-Voltar\n\nR : "); fscanf(stdin, "%d", &a); printf("\n"); switch(a) { case 1: strcpy(aluno.id, idAluno(student, 2)); // Procura os dados relacionados ao ID digitado. if(procureAluno(&student, aluno.id) != 1) printf("\nO ID digitado não existe no banco de dados\n\n"); break; case 2: strcpy(aluno.nome, nomeAluno(student)); // Procura os dados relacionados ao NOME digitado. if(compareAluno(&student, aluno.nome) == 1) procureAluno(&student, aluno.nome); else printf("\nO NOME digitado não existe no banco de dados\n\n"); break; case 3: strcpy(aluno.cpf, cpfAluno(student, 2)); // Procura os dados relacionados ao CPF digitado. if(compareAluno(&student, aluno.cpf) == 1) procureAluno(&student, aluno.cpf); else printf("\nO CPF digitado não existe no banco de dados\n\n"); break; case 4: b = '2'; break; default: printf("Opção inválida\n\n"); a = 1; } }while( a == 1 || a == 2 || a == 3 ); break; case 3: do{ fprintf(stdout, "\nComo você deseja remover o aluno?\n\n1-ID\n2-CPF\n3-Voltar\n\nR : "); fscanf(stdin, "%d", &a); switch(a) { case 1: printf("\n"); imprimeAluno(0, NULL); printf("\n"); strcpy(aluno.id, idAluno(student, 2)); student = removeAluno(student, aluno.id, 1); remove("aluno.bin"); salvarAluno(&student); printf("\n"); b = 'X'; break; case 2: printf("\n"); imprimeAluno(0, NULL); printf("\n"); strcpy(aluno.cpf, cpfAluno(student, 2)); if(compareAluno(&student, aluno.cpf) == 1){ student = removeAluno(student, aluno.cpf, 1); remove("aluno.bin"); salvarAluno(&student); printf("\n"); } else printf("\nO CPF digitado não existe no banco de dados\n\n"); b = '2'; break; case 3: b = '2'; printf("\n"); break; default: printf("\nOpção inválida\n\n"); a = 1; } }while( a == 1 || a == 2 ); break; case 4: do{ fprintf(stdout, "\nQual informação você deseja alterar do aluno?\n\n1-ID\n2-Nome\n3-CPF\n4-Voltar\n\nR : "); fscanf(stdin, "%d", &a); printf("\n"); switch(a) { case 1: printf("ID que deseja alterar\n"); strcpy(aluno.id, idAluno(student, 2)); printf("\n\n"); imprimeAluno(1, aluno.id); if(compareAluno(&student, aluno.id) == 1){ printf("\nNovo ID do aluno"); student = alteraAluno(&student, &student, aluno.id, 1); printf("\n"); } else printf("\nO ID digitado não existe no banco de dados\n\n"); break; case 2: printf("ID do aluno que deseja alterar o nome\n"); strcpy(aluno.id, idAluno(student, 2)); printf("\n\n"); imprimeAluno(1, aluno.id); if(compareAluno(&student, aluno.id) == 1){ printf("\nNovo NOME do aluno\n"); student = alteraAluno(&student, &student, aluno.id, 2); printf("\n"); } else printf("\nO ID digitado não existe no banco de dados\n\n"); break; case 3: printf("ID do aluno que deseja alterar o cpf\n"); strcpy(aluno.id, idAluno(student, 2)); printf("\n\n"); imprimeAluno(1, aluno.id); if(compareAluno(&student, aluno.id) == 1){ printf("\nNovo CPF do aluno\n"); student = alteraAluno(&student, &student, aluno.id, 3); printf("\n"); } else printf("\nO ID digitado não existe no banco de dados\n\n"); break; case 4: b = '2'; break; default: printf("Opção inválida\n\n"); a = 1; } }while( a == 1 || a == 2 || a == 3 ); break; case 5: imprimeAluno(0, NULL); b = '2'; break; case 6: b = 0; a = 1; break; default: printf("Opção inválida\n\n"); b = '2'; } }while(b == '2'); // Funcionalidades para a tabela curso. case 2: break; case 3: break; default: printf("Opção inválida\n\n"); a = 1; } }while( a == 1 || a == 2 || a == 3 ); return 0; }