/** * Menu "Remover usuário" * @param db: ponteiro para database */ void menu_2(database_t *db){ char eh_valido[15]; //Recebe o ID para testar a validade id_type id; //ID já validada para a remoção titulo("Remover usuário"); //Ler e validar ID #ifdef MENU_IU printf("ID:"); #endif // MENU_IU _scanf_s(eh_valido, 15); if(!teste_id(eh_valido)){ printf("Falha: ID em formato invalido\n"); system_pause(); return; } id = atoi(eh_valido); //Remover usuário if(removerRegistro(db, id)) { printf("Operacao realizada com sucesso\n"); } else { printf("Falha: ID nao encontrado\n"); } system_pause(); return; }
/* Funcao que busca um usuario na btree Variaveis: btree- arvore binaria usr- struct que representa e guarda as informações do usuário a ser buscado pos- posicao da id no arquivo de registros reg- arquivo de registros buff- guarda o tamanho da string do registro buffer- string que guarda todo o registro */ void Busca_usuario(arvoreb_t *btree) { offset_t pos; usr_t usr; FILE *reg; char buff; char buffer[MAX_REG]; printf("Digite a id do usuario que deseja consultar: "); usr.id = _scanf_int(); printf("\n"); pos = searchArvoreB(btree, usr.id); if (pos < 0) { //Usuario nao foi encontrado printf("Usuario nao cadastrado\n"); system_pause(); return; } else { //Grava as informações do usuario reg = fopen(FILE_REG, "rb"); if (reg == NULL) { printf("Nao foi possivel encontrar o arquivo de registros\n"); system_pause(); return; } fseek(reg, pos, SEEK_SET); fread(&buff, sizeof(char), 1, reg); fread(buffer, sizeof(char), buff, reg); strTOstruct(buffer, &usr); file_log("Chave %d encontrada, offset %ld\nNome: %s, Tipo Usuario: %d.\n", usr.id, pos, usr.nome, usr.tu); printf("Chave %d encontrada, offset %ld\nNome: %s, Tipo Usuario: %d.\n", usr.id, pos, usr.nome, usr.tu); system_pause(); fclose(reg); } }
/* Funcao que remove um usuario da btree e do arquivo de registro Variaveis: btree- arvore binaria id- numero da id a ser removida pos- posicao da id no arquivo de registros reg- arquivo de registros buff- guarda o tamanho da string do registro buffer- string que guarda todo o registro */ void Remove_usuario (arvoreb_t *btree) { id_type id; offset_t pos; FILE *reg; char buff; char buffer[MAX_REG]; printf("Digite a id do usuario que deseja consultar: "); id = _scanf_int(); printf("\n"); pos = searchArvoreB(btree, id); if (pos < 0) { //O usuario nao foi encontrado na arvore-b printf("Usuario nao cadastrado\n"); system_pause(); return; } //Operação para remoção do registro no arquivo reg = fopen(FILE_REG, "r+b"); fseek(reg, pos, SEEK_SET); fread(&buff, sizeof(char), 1, reg); fread(buffer, sizeof(char), buff, reg); altera_srt(buffer); fseek(reg, pos+1, SEEK_SET); //Ja posiciona o ponteiro apos o indicador de tamanho fwrite(buffer, sizeof(char), buff, reg); fclose(reg); //Remove da arvore-b removeArvoreB(btree, id); printf("Remocao realizada com sucesso\n"); system_pause(); }
/** * Menu "Buscar usuários por idade e gênero" * @param db: ponteiro para database */ void menu_7(database_t *db){ char eh_valido1[10], eh_valido2[10]; //Recebe as idades para testar a validade idade_t idade_min, idade_max; //Idades mínima e máxima para a busca genero_t genero_pesq[GENSIZE]; //Gênero a ser pesquisado id_type *id_result; //Ponteiro para o vetor de IDs resultados da pesquisa titulo("Buscar usuários por idade e gênero"); //Lê e valida as idades mínima e máxima #ifdef MENU_IU printf("Idade mínima:"); #endif // MENU_IU _scanf_s(eh_valido1, 10); #ifdef MENU_IU printf("Idade máxima:"); #endif // MENU_IU _scanf_s(eh_valido2, 10); if(teste_idade(eh_valido1) && teste_idade(eh_valido2)){ idade_min = atoi(eh_valido1); idade_max = atoi(eh_valido2); }else{ printf("Falha: Idade em formato inválido.\n"); system_pause(); return; } //Lê a string de gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(genero_pesq, GENSIZE); if(genero_pesq[0] == '\0') { return; } //Transforma a string dos gêneros em um vetor de códigos generosStrToCod(db, genero_pesq); //Busca //Obs: É usada apenas a primeira posição do vetor genero_pesq id_result = usariosPorGenero(db, (*genero_pesq), idade_min, idade_max); //Imprime os IDs #ifdef MENU_IU printf("\nIDs:\n"); #endif // MENU_IU int i = 0; while(id_result[i]){ printf("%d\n", id_result[i]); i++; } free(id_result); //Malloc feito na função usuariosPorGenero system_pause(); return; }
/* Funcao main apenas pega a opcao do usuario e direciona o programa para a funcao correspondente Variaveis: opc- opcao digitada pelo usuario btree- arvore binaria reg- possivel arquivo de registros ja existente */ int main(void) { int opc; arvoreb_t *btree; btree = createArvoreB(); if (file_exists(FILE_REG) && isEmptyArvoreB(btree)) { //arquivo de registros ja existe e deve ser carregado FILE *reg; reg = fopen(FILE_REG, "r"); Load_reg(reg, btree); fclose(reg); } opc = 1; while (opc) { clearScreen(); main_menu(); opc = _scanf_int(); printf("==========================================================\n"); switch (opc) { case 1: Insere_usuario(btree); break; case 2: Remove_usuario(btree); break; case 3: Busca_usuario(btree); break; case 4: clearScreen(); printArvoreB(btree); system_pause(); break; case 5: clearScreen(); printf("Fechando o programa...\n"); freeArvoreB(btree); opc = 0; break; default: printf("Opcao invalida, tente novamente\n"); opc = 1; //Garante que o usuario podera escolher novamente system_pause(); break; } } return 0; }
/** * Menu "Buscar usuários mais jovens" * @param db: ponteiro para database */ void menu_5(database_t *db){ genero_t generos_pesq[GENSIZE]; //Lista de gêneros a serem pesquisados char eh_valido[15]; //Tipo do usuário que precisa ser validado tu_t tu_pesq; //Tipo de usuário válido a ser pesquisado id_type *id_result; //Ponteiro para o vetor de IDs resultados da pesquisa titulo("Buscar usuários mais jovens"); //Lê a string de gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(generos_pesq, GENSIZE); if(generos_pesq[0] == '\0') { return; } //Lê o tipo de usuário #ifdef MENU_IU printf("Tipo de usuário:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_tu(eh_valido)) { tu_pesq = atoi(eh_valido); } else{ printf("Falha: Tipo do usuário em formato inválido.\n"); system_pause(); return; } //Transforma a string dos gêneros em um vetor de códigos generosStrToCod(db, generos_pesq); //Busca os usuários mais jovens id_result = usuariosMaisJovems(db, generos_pesq, tu_pesq); //Imprime os IDs #ifdef MENU_IU printf("\nIDs:\n"); #endif // MENU_IU int i = 0; while(i < 10) { if(id_result[i] == 0) { break; } printf("%d\n", id_result[i]); i++; } free(id_result); //Malloc feito na função usuariosMaisJovens system_pause(); return; }
/* Funcao que insere um usuario na btree e no arquivo de registro, se necessario Variaveis: btree- arvore binária id- numero da id a ser inserida pos- posicao do registro no arquivo de registros reg- arquivo de registros tu- tipo de usuario a ser inserido buff- guarda o tamanho da string a ser armazenada no arquivo de registros usr_name- nome do usuario a ser inserido buffer- string que guarda todo o registro */ void Insere_usuario (arvoreb_t *btree) { id_type id; offset_t pos; FILE *reg; int tu; char buff; char usr_name[MAX_USR_NM]; char buffer[MAX_REG]; printf("Digite a id do usuario: "); id = _scanf_int(); if (searchArvoreB(btree, id) >= 0) { //Registro com mesmo nome ja existe printf("Usuario ja existente.\n"); system_pause(); return; } printf("Digite o nome do usuario: "); _scanf_s(usr_name, MAX_USR_NM); printf("Digite o tipo do usuario: "); tu = _scanf_int(); printf("\n"); switch(tu) { case 1: case 2: case 3: debug("Tipo de usuario adicionado: %d\n", tu); break; default: printf("Tipo de usuario invalido\n"); system_pause(); return; } //Insere no arquivo de registro reg = fopen(FILE_REG, "ab"); sprintf(buffer, "%d|%s|%d|", id, usr_name, tu); pos = ftell(reg); buff = strlen(buffer); fwrite(&buff, sizeof(char), 1, reg); fwrite(buffer, sizeof(char), buff, reg); fclose(reg); //Insere na arvore binaria file_log("Execucao de operacao de INSERCAO de %d, %s, %d.\n", id, usr_name, tu); insertArvoreB(btree, id, pos); printf("Insercao feita com sucesso\n"); system_pause(); }
/** * Menu "Pesquisar usuário" * @param db: ponteiro para database */ void menu_3(database_t *db){ char eh_valido[15]; //Recebe o ID para testar a validade id_type id; //ID já validada para a remoção offset_t offset_pesq; //Offset do registro pesquisado registro_t reg_pesq; //Registro que foi pesquisado titulo("Pesquisar usuário"); //Ler e validar ID #ifdef MENU_IU printf("ID:"); #endif // MENU_IU _scanf_s(eh_valido, 15); if(!teste_id(eh_valido)){ printf("Falha: ID em formato invalido\n"); system_pause(); return; } id = atoi(eh_valido); //Pesquisar usuario e verificar se o mesmo existe // ordena antes de pesquisar setOrdenado(db, 1); offset_pesq = idToRegistro(db, id, ®_pesq); if(offset_pesq == -1){ printf("Falha: ID nao encontrado\n"); system_pause(); return; } #ifdef MENU_IU printf("%ld\n\n", offset_pesq); #endif // MENU_IU //Deslocar db para a posição offset_pesq, //ler o registro e imprimir os dados printf("%d\n", reg_pesq.id); printf("%s\n", reg_pesq.nome); printf("%d\n", reg_pesq.idade); printf("%c\n", reg_pesq.sexo); generosCodToStr(db, reg_pesq.generos); //Transforma o vetor de códigos na string dos gêneros printf("%s\n", reg_pesq.generos); printf("%d\n", reg_pesq.tu); system_pause(); return; }
void menu_borrar_regla(){ long int puerto; long int ip; char sentido[1]; new_comunication(); if(read_data(&ip,&puerto, sentido, print_borrar_header)){ del_rule(); send_msg(ip,puerto,sentido[0]); system_pause(); } }
/** * Menu "Buscar gostos musicais semelhantes" * @param db: ponteiro para database */ void menu_4(database_t *db){ genero_t generos_pesq[GENSIZE]; //Lista de gêneros a serem pesquisados genero_t *generos_cod_result; //Lista de códigos de gêneros resultados da pesquisa char generos_result[GENSIZE]; //String com os gêneros resultados da pesquisa titulo("Buscar gostos musicais semelhantes"); //Lê a string de gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(generos_pesq, GENSIZE); if(generos_pesq[0] == '\0') { return; } //Transforma a string dos gêneros em um vetor de códigos generosStrToCod(db, generos_pesq); //É feita a busca generos_cod_result = generosPopularesGenero(db, generos_pesq); //A imformação é passada de generos_cod_result para generos_result strcpy(generos_result, generos_cod_result); free(generos_cod_result); //Malloc foi feito na função generosPopularesGenero // se há generos para imprimir if(generos_result[0] != 0) { //Transforma o vetor de códigos na string dos gêneros e imprime generosCodToStr(db, generos_result); //Imprime uma gênero por linha #ifdef MENU_IU printf("\nResultado:\n"); #endif // MENU_IU int i=0; while(generos_result[i]){ if(generos_result[i] != '@') { putchar(generos_result[i]); } else { putchar('\n'); } i++; } putchar('\n'); } system_pause(); }
/** * Menu "Buscar gêneros mais populares" * @param db: ponteiro para database */ void menu_6(database_t *db){ char eh_valido1[10], eh_valido2[10]; //Recebe as idades para testar a validade idade_t idade_min, idade_max; //Idades mínima e máxima para a busca genero_t *generos_cod_result; //Lista de códigos de gêneros resultados da pesquisa char generos_result[GENSIZE]; //String com os gêneros resultados da pesquisa titulo("Buscar gêneros mais populares"); //Lê e valida as idades mínima e máxima #ifdef MENU_IU printf("Idade mínima:"); #endif // MENU_IU _scanf_s(eh_valido1, 10); #ifdef MENU_IU printf("Idade máxima:"); #endif // MENU_IU _scanf_s(eh_valido2, 10); if(teste_idade(eh_valido1) && teste_idade(eh_valido2)){ idade_min = atoi(eh_valido1); idade_max = atoi(eh_valido2); }else{ printf("Falha: Idade em formato inválido.\n"); system_pause(); return; } //Busca generos_cod_result = generosPopularesIdade(db, idade_min, idade_max); if (generos_cod_result == NULL) { return; } //A informação é passada de generos_cod_result para generos_result memcpy(generos_result, generos_cod_result, 10); generos_result[10] = 0; // garante q o ultimo elemnto vai ser zero free(generos_cod_result); //Malloc foi feito na função generosPopularesIdade // se há generos para imprimir if(generos_result[0] != 0) { //Transforma o vetor de códigos na string dos gêneros e imprime generosCodToStr(db, generos_result); //Imprime uma gênero por linha #ifdef MENU_IU printf("\nResultado:\n"); #endif // MENU_IU int i=0; while(generos_result[i]){ if(generos_result[i] != '@') { putchar(generos_result[i]); } else { putchar('\n'); } i++; } putchar('\n'); } system_pause(); }
/** * Menu "Inserir usuário" * @param db: ponteiro para database */ void menu_1(database_t *db){ registro_t new_reg; //Novo registro char eh_valido[15]; //Recebe variáveis que precisa testar a validade char ok = 1; //Se =1 ao final da função, todos os dados estão dentro do padrão esperado titulo("Inserir usuário"); //ID #ifdef MENU_IU printf("\nID:"); #endif // MENU_IU _scanf_s(eh_valido, 15); if(teste_id(eh_valido)) { new_reg.id = atoi(eh_valido); } else { printf("ID em formato inválido.\n"); ok = 0; } //Nome #ifdef MENU_IU printf("Nome:"); #endif // MENU_IU _scanf_s(new_reg.nome, NOMESIZE); //Idade #ifdef MENU_IU printf("Idade:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_idade(eh_valido)) { new_reg.idade = atoi(eh_valido); } else{ printf("Idade em formato inválido.\n"); ok = 0; } //Sexo #ifdef MENU_IU printf("Sexo:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_sexo(eh_valido)) { new_reg.sexo = eh_valido[0]; } else{ printf("Sexo em formato inválido.\n"); ok = 0; } //Gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(new_reg.generos, GENSIZE); if(new_reg.generos[0] == '\0') { strcpy(new_reg.generos, "unknown"); } //Tipo de usuário #ifdef MENU_IU printf("Tipo de usuário:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_tu(eh_valido)) { new_reg.tu = atoi(eh_valido); } else{ printf("Tipo do usuário em formato inválido.\n"); ok = 0; } //Confere se algum campo era inválido if(!ok){ printf("Falha: Campo(s) invalido(s)\n"); system_pause(); return; } //Transforma a string dos gêneros em um vetor de códigos //Adiciona, se necessário, o gênero na tabela de gêneros generosStrToCod(db, new_reg.generos); //Adiciona o registro if(novoRegistro(db, &new_reg) != EOF){ //Confere se o ID já existe //nesse caso, houve erro printf("Operacao realizada com sucesso\n"); system_pause(); return; } printf("Falha: ID ja cadastrado\n"); system_pause(); return; }