Exemplo n.º 1
0
/**
 * 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;	
}
Exemplo n.º 2
0
/*
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);
	}
}
Exemplo n.º 3
0
/*
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();
}
Exemplo n.º 4
0
/**
 * 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;
}
Exemplo n.º 5
0
/*
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;
}
Exemplo n.º 6
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;
}
Exemplo n.º 7
0
/*
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();
}
Exemplo n.º 8
0
/**
 * 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, &reg_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;
}
Exemplo n.º 9
0
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();
	}	
}
Exemplo n.º 10
0
/**
 * 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();
}
Exemplo n.º 11
0
/**
 * 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();
}
Exemplo n.º 12
0
/**
 * 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;
}