Ir ao conteúdo
  • Cadastre-se

Brunno 633

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

2
  1. Já consegui resolver, obrigado pra quem tentou me ajudar.
  2. @Herbertbahia ué a mensagem veio vazia pra mim kkkkkkk, pode repetir por favor?
  3. 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

×
×
  • Criar novo...