Brunno 633
Membro Júnior-
Posts
3 -
Cadastrado em
-
Última visita
Reputação
2-
Já consegui resolver, obrigado pra quem tentou me ajudar.
-
@Herbertbahia ué a mensagem veio vazia pra mim kkkkkkk, pode repetir por favor?
-
Olá estou com um trabalho da faculdade para fazer porém não consigo ordenar em ordem alfabética uma struct que está armazenada em um arquivo.dat. Preciso ordenar o arquivo para depois realizar uma busca binária para autenticar o login dos usuários no sistema. Alguém por favor pode me ajudar nessa ordenação o mais rápido possível? Segue o meu código abaixo: ============================================================================================= /* Bibliotecas */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #include <string.h> #include <ctype.h> /* Tipos pré-definidos (definição dos registros) */ typedef struct { char nome[45]; char prontuario[10]; } reg; //VARIÁVEIS GLOBAIS reg usuario[75]; int tamanho; //para passar como parametro na ordenação (tamanho do vetor de struct = 75) /* Protótipos de funções */ void insertionSort (reg *usuario, int tamanho); void captura_usuario(void); void grava_usuario(void); void cadastra_usuario(void); void consulta_usuario(void); void admin (void); /* Construçao das funçoes */ void insertionSort (reg *usuario, int tamanho) //tamanho = 75 { int i, j; reg aux; FILE *Arq; FILE *Arqtemp; Arq = fopen("USUARIOS.DAT","r"); for (i=0; i<tamanho; i++) { fgets (usuario.nome,45,Arq); fgets (usuario.prontuario,10,Arq); } //criando outro arquivo para ordenar Arqtemp = fopen("USUARIOSORD.DAT","w"); //ordenando as informações do arquivo /* saída strcmp(str1,str2) ==0 : str1 igual a str2 > 0 : str1 vem depois que str2 (str1 é maior que str2) < 0 : str1 vem antes que str2 (str1 é menor que str2) */ //INSERTION SORT for (i = 1; i < 75; i++) { aux = usuario; for (j=i; (j>0) && (strcmp (aux.nome, usuario[j-1].nome)<0); j--) { usuario[j] = usuario[j-1]; } usuario[j] = aux; } fclose (Arqtemp); fclose (Arq); /* Deleta o .DAT */ system ("DEL USUARIOS.DAT"); /* Renomeia o arquivo ordenado para .DAT */ system ("REN USUARIOSORD.DAT USUARIOS.DAT"); } void captura_usuario (void) { int indice; int i; char resp; for(i=0; resp != 'n' && resp != 'N'; i++) { system ("cls"); printf ("\nNome: "); fflush (stdin); gets(usuario.nome); _strupr(usuario.nome); printf ("\nProntuário: "); fflush (stdin); gets(usuario.prontuario); _strupr(usuario.prontuario); printf ("Quer registrar outro usuário?"); fflush (stdin); resp = getche(); } } void grava_usuario(void) { char resposta; FILE *Arq; /* Verifica se é para gravar ou não */ printf ("\n ================================================"); printf ("\n Deseja gravar este registro? [n/N = nao]"); fflush (stdin); resposta = getche(); /* se deseja gravar... (resposta != não) */ if ( resposta != 'n' && resposta != 'N' ) /* ... para gravar */ { Arq = fopen ( "USUARIOS.DAT" , "a" ); /* Abro o arquivo */ fflush (stdin); fwrite ( &usuario , sizeof(usuario), 1, Arq); /* grava no arquivo */ fclose (Arq); /* Fecha o arquivo */ } } void cadastra_usuario ( void ) { captura_usuario(); grava_usuario(); } void consulta_usuario(void) { insertionSort (usuario, 75); //EU ESTOU EM DÚVIDA DE COLOCAR A FUNÇÃO DE ORDENAÇÃO, NÃO SEI SE É AQUI MESMO FILE *Arq; int i; Arq = fopen ( "USUARIOS.DAT" , "r" ); /* abrir arquivo */ while ( !feof(Arq) ) /* enquanto não for fim do arquivo...*/ { fread ( &usuario, sizeof(usuario), 1, Arq); /*...lê e...*/ if ( !feof(Arq) ) { for(i=0; i<75; i++) { printf ("\n %5s \t %5s",usuario.prontuario,usuario.nome); } } } fclose (Arq);/* fecha arquivo */ getch(); } void admin (void) { char opc; do { /* Captura a opção desejada */ do { system ("cls"); printf ("\n=================== SISTEMA GERENCIADOR DE SUPERMERCADO =================="); printf ("\n 1. Abastecer Gôndolas"); printf ("\n 2. Caixa/PDV"); printf ("\n 3. Gerenciar usuários"); printf ("\n 0. SAIR"); printf ("\n=========================================================================="); printf ("\n Escolha: "); fflush(stdin); opc = getche(); } while ( opc != '1' && opc != '2' && opc != '3' && opc != '0'); /* dependendo da opção, faz uma das operaçoes */ switch ( opc ) { case '1' : printf ("Abastecer Gôndolas - Tem que fazer ainda"); getch(); break; case '2' : printf ("Caixa/PDV - Tem que fazer ainda"); getch(); break; case '3' : do { system ("cls"); printf ("\n=================== GERENCIAMENTO DE USUÁRIOS =================="); printf ("\n 1. Cadastro de usuários"); printf ("\n 2. Consulta de usuários"); printf ("\n 3. Alterar registro de usuário"); printf ("\n 4. Excluir registro de usuário"); printf ("\n 0. VOLTAR"); printf ("\n================================================================"); printf ("\n Escolha: "); fflush(stdin); opc = getche(); } while ( opc != '1' && opc != '2' && opc != '0'); /* dependendo da opção, faz uma das operaçoes */ switch ( opc ) { case '1' : cadastra_usuario(); break; case '2' : consulta_usuario(); break; //case '3' : altera_registro(); break; //case '4' : deleta_registro(); break; case '0' : admin(); break; } break; case '0' : exit(0); break; } } while ( opc != '0'); } main() { setlocale (LC_ALL, ""); admin (); }
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais