Ir ao conteúdo
  • Cadastre-se

marechalmelo

Membro Pleno
  • Posts

    23
  • Cadastrado em

  • Última visita

Reputação

12
  1. Preciso exportar do meu codigo o seguinte arquivo: Cp <- c(T,T,F,F,T,F,F,F,T,F,T,T,T,T) # Vetor com os indices das atividades K <- c(0,1,2,3,4,5,6,7,8,9,10,11,12,13) # Vetor com os tempos de início das atividades Sk <- c(0,0,3,3,3,3,0,1,10,12,12,15,20,Makespan) # Vetor com os tempos de termino das atividades Tk <- c(0,3,7,9,10,6,1,3,12,14,15,20,20.5,Makespan) Bom tenho um algoritmo generico. Em que exemplo: SK e um vetor generico, cada projeto sk tera um valor diferente. genericamente SK tem aqueles valores dentro dele: (0,0,3,3,3,3,0,1,10,12,12,15,20,). porém preciso exportar meu arquivo no formato que esta ali ou seja, nao so colocar SK[TAMAHO], preciso colocar SK e todo o conteudo dele separado por ( 0,1.....) nao tenho ideia como posso separar isso dentro deu um arquivo
  2. Bom tenho o seguinte arquivo: #Exemplo de projeto simples de montagem de cadeira # # Total de atividades, incluindo INI e FIM T 14 # Listagem das atividades n 0 0.0 INI n 1 3.0 SelecaoMadeira n 2 4.0 EntalhamentoDosArcos n 3 6.0 EntalhamentoAcentos n 4 7.0 EntalhamentoEncostos n 5 3.0 EntalhamentoBracos n 6 1.0 EscolhaTecidos n 7 2.0 CosturaAlmofadas n 8 2.0 MontagemAcentoEncostos n 9 2.0 FixacaoBracos n 10 3.0 FixacaoArcos n 11 5.0 Verniz n 12 0.5 InstalacaoAlmofadas n 13 0.0 FIM # Listagem das precedencias a 0 1 a 1 2 a 1 3 a 1 4 a 1 5 a 6 7 a 3 8 a 4 8 a 5 9 a 8 9 a 2 10 a 8 10 a 9 11 a 10 11 a 7 12 a 11 12 a 12 13 # Fim de arquivo f T = Numero de Atividades A - Predecessores N = Atividades Preciso implementar o seguinte pseucodogio e passa-lo para C C {Aqui começa o cálculo do agendamento} 2: T ← R ⊲ Mantém R original 3: s0 ← 0 ⊲ a0 começa e termina em t = 0 4: t0 ← 0 5: T ← T − {(a0,aj)|a0 precede aj na rede } ⊲ Libera os sucessores de a0 6: while (T 6= ∅) do 7: M ← {ak |ak é uma atividade minimal em T} ⊲ Descobre quem já pode ser agendada 8: repeat 9: Escolher alguma atividade aj ∈ M ⊲ Não importa a ordem 10: P(aj) ← {ai |(ai,aj) ∈ R} ⊲ Descobre predecessores de aj 11: sj ← max ai∈P(aj) {ti} ⊲ Descobre qual predecessor termina mais tarde e agenda aj 12: tj ← sj + dj ⊲ Calcula quando aj termina 13: T ← T − {(aj,ak)|aj precede ak na rede } ⊲ Libera os sucessores de aj 14: M ← M − {aj} ⊲ Marca que aj já foi agendado 15: until (M = ∅) 16: end while 17: {Início do cálculo de um dos caminhos críticos} 18: C ← {an} ⊲ an sempre está no caminho crítico 19: ak ← an ⊲ Atividade corrente ak é o an, inicialmente 20: P(ak) ← {ai |(ai,ak) ∈ R} ⊲ Descobre quem precede a última atividade 21: while (P(ak) 6= ∅) do 22: Selecione ai tal que ai ∈ P(ak) e ti = sk ⊲ Descobre quem está no caminho crítico com ak 23: C ← C ∪ {ai} ⊲ Inclui ai no caminho crítico 24: ak ← ai ⊲ Faz com que ai seja a atividade corrente 25: P(ak) ← {ai |(ai,ak) ∈ R} ⊲ Descobre quem precede nova atividade corrente 26: end while 27: return (sk,tk,C) ⊲ Retorna agendamentos e quem está no caminho crítico Conforme mencionado neste documento, o diagrama de redes PERT/CPM pode ser entendido como um diagrama de Hasse da ordenação parcial gerada sobre o conjunto A de atividades que diz que o par ordenado (i,j) ∈4 quando a atividade i precede a atividade j no respectivo projeto. Dessa forma, desenhando o diagrama da esquerda para a direita, teremos que as atividades sem predecessores à esquerda são elementos minimais do diagrama de Hasse, enquanto que as atividades à direita sem sucessores serão os elementos maximais do diagrama. Com base nesta observação é possível esboçar, em pseudocódigo, um procedimento computacional capaz de calcular o caminho crítico de um projeto. Um esboço do procedimento é dado em pseudocódigo do Algoritmo 1. Em termos de notação, A representa o conjunto com todas as atividades do projeto, que inicia-se na atividade a0 e encerra em an; R representa a rede de atividades original do projeto, codificada sob a forma de uma matriz de incidência (isto é, se a atividade i precede a atividade j, então na linha R[i,j] = 1) e deve também ser entendida matematicamente como o conjunto R = {(i,j)|i precede j}; T é o conjunto dos arcos que representam a rede de atividades, mas que é modificada ao longo do algoritmo para eliminar atividades já processadas; M guarda o conjunto dos elementos minimais de T e é reconstruído sempre que T sofre alterações; P(ak) refere-se ao conjunto das atividades que precedem ak na rede; e C é o conjunto que contém todas as atividades que estão presentes em um dos caminhos críticos da rede (se houver apenas um, conterá o caminho crítico). O algoritmo é descrito em notação de conjuntos. Observe que no pseudocódigo dado, assume-se que a atividade 0 é a atividade fantasma INI, e que a atividade n é a atividade fantasma FIM. Desta forma, toda atividade real tem como predecessora a atividade a0, e a última atividade do cronograma será an. O makespan do cronograma pode ser obtido consultado o valor de O algoritmo funciona como segue, dividido em duas partes, mais especificamente que lidam com o agendamento de início e término de cada atividade da rede (linhas 1 à 16) e cálculo de que atividades estão no caminho crítico (linhas 17 à 27). Comentaremos primeiramente o agendamento das atividades. Ela inicia na linha 2, onde copia-se a matriz de incidência R para uma matriz temporária T, que será modificada ao longo do algoritmo para expressar o pedaço da rede que contém as atividades que ainda não foram agendadas no tempo. Nas linhas 3 e 4 define-se o agendamento da atividade INI, que é zero por não ter duração real e marcar simplesmente o início do projeto. Na linha 5 elimina-se da matriz T todos os arcos que partem de a0 e chega nas primeiras atividades reais do projeto. Fazemos isso para que estas atividades sejam as próximas minimais a serem consideradas, ou seja, quais atividades já estão aptas a serem agendadas. São atividades aptas para o agendamento todas aquelas em que os seus predecessores já foram agendados e, portanto, conhece-se o 10 tempo de encerramento dos mesmos. Isso é calculado na linha 7 do algoritmo. Para realizar a operação da linha 5 pode-se simplesmente varrer a linha 0 da matriz T, eliminando-se entradas iguais à 1 (em outras palavras, retirando da matriz T todos os registros de arcos que partem de a0 e chegam em alguma atividade). Ao realizar essa operação é fácil perceber que as atividades que serão consideradas minimais são aquelas que não tem predecessor registrado em T, ou seja, aquelas em que não chegam nenhum arco nelas (o que pode ser facilmente verificado checando-se quais delas não possuem nenhum valor 1 na coluna correspondente em T), sendo esta a lógica de construção do conjunto M, conforme linha 7. Para cada elemento minimal iremos realizar as operações contidas entre as linhas 9 e 15. Em 9, escolhe-se alguma atividade contida no conjunto M (não importa a ordem, pois todas estão aptas e todas serão processadas antes do algoritmo avançar). Descobre-se, na linha 10, quem são os predecessores da atividade aj escolhida. Isso é feito verificando-se na matriz da rede original (isto é, na matriz R, não em T) quais são as entradas da coluna j que possuem valor 1. Para cada uma destas atividades ai espera-se que já tenham sido escalonadas; logo os valores de ti são conhecidos. A atividade aj selecionada irá iniciar no mesmo instante de tempo que a sua predecessora mais tardia ai encerrar, o que está denotado na linha 11 do algoritmo. Tendo a duração da atividade aj é possível determinar, com base em seu início, quando irá terminar no tempo (linha 12). Temos, portanto, a atividade aj agendada, de forma que para prosseguir devemos eliminar os arcos que partem de aj para as demais atividades para que estas estejam aptas a serem agendadas (caso que ocorre se todas as suas predecessoras também estiverem agendadas). Isso é feito na linha 13, novamente eliminando todas as entradas da matriz T em cuja linha j possuem colunas com valor 1. Eliminamos também na linha 14 o registro de que aj é minimal, para que não seja novamente calculada, visto que já foi agendada e não precisa mais ser tratada pelo algoritmo. Se todas as atividades minimais já foram processadas, então o algoritmo já agendou todas as atividades e pode seguir para a linha 17, onde inicia-se o cálculo para descobrir que atividades compõem o caminho crítico; caso contrário o processo segue, repetindo as linhas 6 à 15, até agendar todas as atividades no tempo. A segunda parte do algoritmo dá-se início efetivo na linha 18, em que o conjunto C é criado contendo, inicialmente, apenas a última atividade do projeto (atividade an, ou FIM). Como ela sempre encerra o cronograma então ela faz parte do caminho mínimo, naturalmente. Para determinar que outras atividades também compõem o caminho crítico, temos que varrer a rede ao contrário, das atividades maximais em direção às minimais. O algoritmo apresentado irá guardar em C as atividades de algum caminho crítico existente; entretanto ele não consegue lidar com a situação onde mais de um caminho existe. É uma simplificação razoável visto que o objetivo do trabalho é também demonstrar que uma estrutura puramente matemática como relações e ordenações parciais podem ser úteis como modelos para tratar situações e problemas reais não tendo este trabalho, portanto, a ousadia de cobrir todos os casos tais como ocorre em programas comerciais. Na linha 19 iremos assumir que a atividade atual ak será, inicialmente, an. Na linha 20 descobre-se quem precede ak, e na linha 22 descobre-se qual foi a predecessora ai de ak que foi responsável por agendar ak em sk. Se ak está no caminho crítico e ai precede ak de forma que quando ai termina ak começa, então ela também está no caminho crítico, portanto devemos guardá-la no conjunto C, como descrito na linha 23. A partir daqui o 11 processo recomeça, partindo agora de ai (que torna-se a nova atividade ak corrente, linha 24) recalculando as predecessoras da nova atividade corrente (linha 25), até que esse caminhamento atinja a atividade a0, que não tem predecessores. Essa será a condição de saída do laço controlado na linha 21. Se ainda não atingimos a atividade a0, então executa-se mais uma iteração com as operações descritas entre as linhas 22 e 25; caso contrário já descobrimos todas as atividades de um dos caminhos críticos e podemos, enfim, retornar o agendamento das tarefas e o próprio caminho crítico computado (linha 27). Eu ja realizei ISSO ate o momento: // Estudo de Caso matematica Discreta #include <string.h> #include <stdio.h> #include <string.h> #include <stdlib.h> // Declaracao da struct de dados auxiliar typedef struct criar_Dados { int id; // Armazena o ID de todas as atividades int duracao; // Armazena a duracao das atividades char nome[100]; // Guarda o nome de todas as atividades realizadas } criar_Dados; // Define o tipo da struct void CadastrarDados(criar_Dados *cadastrar, criar_Dados *dados, int *contador); // Essa struct realiza o cadastramento de todos os dados na struct principal int main() { int aj; int verificacao; char *t; // Variavel utilizada para receber os valores das linhas int ini; // Declara a variavel de inicio do calculo de Perc int j; // Variavel Utilizada como Contadora int h; // Variavel auxiliar de t int *P; // variavel que capta os caminhos criticos int z, q; // Variaveis contadoras int *M; // Vetor auxiliar para guardar conjunto de atividades int **R; // Declara a Matriz R de duas dimensoes int **T; // Declara a Matriz T que e auxiliar a R int contar_m; // Variavel para Contar M int contador; // Cria um contador criar_Dados *cadastrar; // Declara struct de cadastro cadastrar = malloc(sizeof (criar_Dados)); // Realiza a locacao de memoria do cadastrar criar_Dados dados; // Declara struct de receber dados contar_m = 0; FILE* arquivo = fopen("arquivo.txt", "r"); if (arquivo == NULL) { printf("Erro ao abrir o arquivo.txt."); /* imprimir na tela para visualizar */ return 1; /* retorna */ } int i; char linha[50]; //Inicio da leitura de dados while (fgets(linha, 150, arquivo) != NULL) { /* lê uma linha no arquivo até encontrar o EOF */ if (linha[0] == 'T') { t = strtok(linha, " "); // Remove o A t = strtok(NULL, " "); // Remove o espaco depois do A h = atoi(t); // Atribui o Valor ao H R = malloc(h * sizeof (int *)); // Aloca a matriz R do tamanho de T T = malloc(h * sizeof (int *)); // Aloca a matriz R do tamanho de T auxiliar M = malloc(sizeof (int *)); // Aloca a matriz R do tamanho de T auxiliar for (i = 0; i < h; i++) { R[i] = malloc(h * sizeof (int *)); // Realoca a Coluna da Matriz T[i] = malloc(h * sizeof (int *)); // Realoca a Coluna da Matriz for (j = 0; j < h; j++) { R[i][j] = 0; // Zera todos Componentes da Matriz T[i][j] = 0; // Zera todos Componentes da Matriz auxilias } } } if (linha[0] == 'n') { // Localiza o caracter inicial a t = strtok(linha, " "); // Pula o caracter A t = strtok(NULL, " "); // Pula o espaço dados.id = atoi(t); // Atribui a Struct dados t = strtok(NULL, " "); // Pula espaco dados.duracao = atoi(t); // atribui a duracao t = strtok(NULL, " "); // Pula espaco strcpy(dados.nome, t); // Atribui o nome cadastrar = realloc(cadastrar, (contador + 1) * sizeof (criar_Dados)); // Realiza uma relocacao no tamanho da struct CadastrarDados(cadastrar, &dados, &contador); // Realiza o cadastramento na struct principal } if (linha[0] == 'a') { // Localiza o caracter inicial a t = strtok(linha, " "); // Pula o caracter A t = strtok(NULL, " "); // Pula o espaço z = atoi(t); // Atribui a p t = strtok(NULL, " "); // Pula espaco q = atoi(t); // Atribui a Q R[z][q] = 1; // Preenche as dependencias com 1 T[z][q] = 1; // Preenche as dependencias da matriz Auxiliar com 1 } if (linha[0] == 'f') { // Localiza o caracter inicial f fclose(arquivo); // Realiza o fechamento do arquivo } } // Fim da leitura de dados //Inicio do Calculo de agendamento e caminhos criticos ini = 0; for (i = 0; i < h; i++) { // Realiza o Varrimento da Matriz a0 , aj eliminando o que tiver de 1 if (T[0][i] == 1) { // Zera a Matriz na Posicao 0 em que eles encontram 1 T[0][i] = 0; // Zerando onde foi encontrado o 1 } // Fecha o IF } // Fecha o For // Inicio do laco do { for (i = 0; i < h; i++) { // Varre o primeiro para pegar a coluna verificacao = 0; // Define a variavel de verificacao como 0 for (j = 0; j < h; j++) { // Segundo for para atribuir a linha if (T[j][i] == 1) { // Verifica se nao tem nenhum 1 na coluna verificacao = 1; // Se tiver um define verificacao como 1 } // }// if (verificacao != 1) { // Se a verificacao for diferente de 1 atribui a M M[contar_m] = i; // Define M como i contar_m++; // Aumenta 1 no M M = (int *) realloc(M, sizeof (int)*contar_m); } } while(M[0]!=0){ aj = M[contar_m - 1]; for (i = 0; i < (contar_m - 1); i++) { M[i] = M[i + 1]; } contar_m--; M = (int *) realloc(M, sizeof (int)*contar_m); printf("%d",M[contar_m]); } break; } while (T != 0); // Inicia o laco ate o T nao se tornar 0 // Fim do calculo de agendamento e caminhos criticos return 0; // Fecha o main } // Funcoes void CadastrarDados(criar_Dados *cadastrar, criar_Dados *dados, int *contador) { (*(cadastrar + (*contador))).id = dados->id; // Envia os arquivos dos dados ID para a struct principal (*(cadastrar + (*contador))).duracao = dados->duracao; // Envia os arquivos dos dados duracao para a struct principal strcpy((*(cadastrar + (*contador))).nome, dados->nome); // Envia os arquivos dos dados nome para a struct principal (*contador)++; // Acresce 1 no valor do contador } Alguem poderia me ajudar travei agora
  3. @devair1010 Ola, obrigado pela ajuda. Poderia me informar que: Quando for # Ele leia e nao faça nada e um comentario Quando for T sera total de atividades . Ou seja Iria criar uma matriz 14x14, quando for A. R[j] = Primeiro Valor de A , j = Segundo Valor de A R[j] = ( 1, se a atividade i preceder j na rede PERT/CPM; 0, caso contrário ) É importante destacar que todo projeto começará na atividade 0, que marca seu início, e terminará na atividade FIM. A função de cada caracter é: # : Indica linha de comentários, que deve ser ignorada; T : Indica o total de atividades da rede (inteiro), incluindo INI e FIM; n : Indica o ID da atividade (inteiro), sua duração (ponto flutuante) e nome da atividade (string); a : Indica o ID de um predecessor (inteiro) e de um sucessor (inteiro) no dia- grama de Hasse correspondente; f : Indica fim de arquivo, ou seja, não se esperam mais dados a seguir.
  4. Galera Preciso ler um Arquivo em C com a seguinte formatacao: #Exemplo de projeto simples de montagem de cadeira # # Total de atividades, incluindo INI e FIM T 14 # Listagem das atividades n 0 0.0 INI n 1 3.0 SelecaoMadeira n 2 4.0 EntalhamentoDosArcos n 3 6.0 EntalhamentoAcentos n 4 7.0 EntalhamentoEncostos n 5 3.0 EntalhamentoBracos n 6 1.0 EscolhaTecidos n 7 2.0 CosturaAlmofadas n 8 2.0 MontagemAcentoEncostos n 9 2.0 FixacaoBracos n 10 3.0 FixacaoArcos n 11 5.0 Verniz n 12 0.5 InstalacaoAlmofadas n 13 0.0 FIM # Listagem das precedencias a 0 1 a 1 2 a 1 3 a 1 4 a 1 5 a 6 7 a 3 8 a 4 8 a 5 9 a 8 9 a 2 10 a 8 10 a 9 11 a 10 11 a 7 12 a 11 12 a 12 13 # Fim de arquivo f Preciso que quando for # ele ignore a linha e continue , se for T pega o que esta ao lado e armazene assim sucessivamente ate chegar em f que e o fim do arquivo. porém nao estou conseguindo realizar essas buscar alguem poderia me ajudar. eu estava fazendo teste mas nada dava certo. char asd[50]; FILE* arquivo = fopen("arquivo.txt", "r"); if (arquivo == NULL) { fprintf(stderr, "Erro ao abrir o arquivo.txt."); return 1; } int boa[50]; int i; int contagem = 0; int caractere; do { caractere = fgetc(arquivo); if (caractere == '#') { } if(caractere == 'a' && caractere != ' ' && caractere != 'n'){ fscanf(arquivo, "%[^\n]s", &asd); printf(" achei a %s\n", asd); i++; } } while (caractere != EOF); printf("O arquivo possui %d linhas.\n", contagem); fclose(arquivo);
  5. Bom estou gerando um arquivo xml em c estou recebendo os dados: Quando eu gero ele esta saindo: <dados> <tabela=hospede> <registro> <codigo>123</codigo> <nome>Emanuel Melo </nome> <email>marechalmelo </email> <sexo>masculino </sexo> <Estado_Civil>Solteiro </Estado_Civil> <Data_Nascimento>4/2/2001</Data_Nascimento> <cpf>136997445632.000000</cpf> <telefone>35997143040.000000</telefone> <endereco>Osmindo Bastos Garcia </endereco> </registro> <registro> <codigo>155</codigo> <nome>marco tulio </nome> <email>xunaoooo </email> <sexo>masculino </sexo> <Estado_Civil>solteiro </Estado_Civil> <Data_Nascimento>4/10/1994</Data_Nascimento> <cpf>87965409280.000000</cpf> <telefone>35991732224.000000</telefone> <endereco>abilio machado </endereco> </registro> <registro> <codigo>777</codigo> <nome>edson </nome> <email>edinho </email> <sexo>masculino </sexo> <Estado_Civil>solteiro </Estado_Civil> <Data_Nascimento>4/3/1991</Data_Nascimento> <cpf>16578965.000000</cpf> <telefone>3599757056.000000</telefone> <endereco>centro </endereco> </registro> <registro> <codigo>699</codigo> <nome>marcio </nome> <email>marechalmelo </email> <sexo>masculino </sexo> <Estado_Civil>solteiro </Estado_Civil> <Data_Nascimento>15/1/1973</Data_Nascimento> <cpf>136889456.000000</cpf> <telefone>35999399936.000000</telefone> <endereco>campo belo </endereco> </registro> </tabela=hospede> </dados> gostaria que saisse tudo um do lado do outro tipo <endereco>campobelo</endereco> poderiam me ajudar exportar_hospede = fopen("exportar_hospede.xml", "w+"); fprintf(exportar_hospede, "<dados>\n" "\t<tabela=hospede>\n"); fflush(exportar_hospede); fclose(exportar_hospede); exportar_hospede = fopen("exportar_hospede.xml", "a"); for (mostrar_arquivo = 0; mostrar_arquivo < contador_hospede; mostrar_arquivo++) { fprintf(exportar_hospede, "\t\t<registro>\n" "\t\t\t<codigo>%d</codigo>\n" "\t\t\t<nome>%s</nome>\n" "\t\t\t<email>%s</email>\n" "\t\t\t<sexo>%s</sexo>\n" "\t\t\t<Estado_Civil>%s</Estado_Civil>\n" "\t\t\t<Data_Nascimento>%d/%d/%d</Data_Nascimento>\n" "\t\t\t<cpf>%f</cpf>\n" "\t\t\t<telefone>%f</telefone>\n" "\t\t\t<endereco>%s</endereco>\n" "\t\t</registro>\n", cadastro_hospede[mostrar_arquivo].codigo, (cadastro_hospede + mostrar_arquivo)->nome_social, (cadastro_hospede + mostrar_arquivo)->email, (cadastro_hospede + mostrar_arquivo)->sexo, (cadastro_hospede + mostrar_arquivo)->estado_civil, (cadastro_hospede + mostrar_arquivo)->dia, (cadastro_hospede + mostrar_arquivo)->mes, (cadastro_hospede + mostrar_arquivo)->ano, (cadastro_hospede + mostrar_arquivo)->cpf, (cadastro_hospede + mostrar_arquivo)->telefone, (cadastro_hospede + mostrar_arquivo)->endereco); }// FECHA O FOr"<dados>\n" fprintf(exportar_hospede, "\t</tabela=hospede>\n" "</dados>"); fflush(exportar_hospede); fclose(exportar_hospede); printf(" Digite os novos dados \n"); printf(" Digite o nome do Hospede \n"); setbuf(stdin, NULL); scanf("%[^\n]s",&cadastro_hospede_dados.nome_social); printf(" Digite o sexo \n "); setbuf(stdin, NULL); scanf("%[^\n]s",&cadastro_hospede_dados.sexo); printf(" Digite o Estado Civil \n "); setbuf(stdin, NULL); scanf("%[^\n]s",&cadastro_hospede_dados.estado_civil); printf(" Digite o Endereco \n "); setbuf(stdin, NULL); scanf("%[^\n]s",&cadastro_hospede_dados.endereco); printf(" Digite o E-mail \n "); setbuf(stdin, NULL); scanf("%[^\n]s",&cadastro_hospede_dados.email); printf(" Digite o CPF \n "); scanf("%f", &cadastro_hospede_dados.cpf); printf(" Digite o Telefone \n "); scanf("%f", &cadastro_hospede_dados.telefone); printf(" Digite a data de nascimento \n "); scanf("%d/%d/%d", &cadastro_hospede_dados.dia, &cadastro_hospede_dados.mes, &cadastro_hospede_dados.ano); atualizaHospede(cadastro_hospede, &cadastro_hospede_dados, contador_hospede, posicao_hospede);
  6. @arfneto eu estou com problema exclusivamente no erro de carregar a struct eu não sei qual é o comando que eu utilizo para recarrerelarregada como estava quando fecho o programa poderia me ajudar adicionado 0 minutos depois @KXSY pode me explicar qual é esse comando de receber a struct do arquivo é salvala? Esse carregamento
  7. @KXSY typedef struct criar_Hotel { // declara todas as variaveis do cadastro dos dados do hotel // char nome_social[100]; char razao_social[100]; char inscricao_estadual[100]; float cnpj; char endereco[100]; float telefone; char email[100]; char nome_dono[100]; float telefone_dono; float horario_chegar; float horario_sair; float lucro_produtos_vendidos; // } criar_Hotel; void CadastroHotel(criar_Hotel *cadastro_hotel, int *contador) { criar_Hotel cadastro_hotel_dadosx; FILE* arquivo_hotel; arquivo_hotel = fopen("hotel.txt", "ab"); if (arquivo_hotel == NULL) { printf("Problemas na abertura do arquivo"); } else { printf("Digite o nome Fantasia\n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.nome_social, 100, stdin); printf(" Digite a Razao Social \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.razao_social, 100, stdin); printf(" Inscricao Estadual \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.inscricao_estadual, 100, stdin); printf(" Digite o Endereco \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.endereco, 100, stdin); printf(" Digite o E-mail \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.email, 100, stdin); printf(" Digite o nome do dono \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.nome_dono, 100, stdin); printf(" Digite o CNPJ \n "); scanf("%f", &cadastro_hotel_dadosx.cnpj); printf(" Digite o Telefone do dono \n "); scanf("%f", &cadastro_hotel_dadosx.telefone_dono); printf(" Digite o Telefone do Hotel \n "); scanf("%f", &cadastro_hotel_dadosx.telefone); printf(" Horario Check-in \n "); scanf("%f", &cadastro_hotel_dadosx.horario_chegar); printf(" Horario Check-out \n "); scanf("%f", &cadastro_hotel_dadosx.horario_sair); printf(" Lucro Produtos Vendidos \n "); scanf("%f", &cadastro_hotel_dadosx.lucro_produtos_vendidos); fwrite(&cadastro_hotel_dadosx, sizeof (criar_Hotel), 1, arquivo_hotel); system("cls"); printf(" --------------------------------------- \n"); printf(" Hotel Cadastrado Com Sucesso \n"); printf(" --------------------------------------- \n\n"); } fclose(arquivo_hotel); (*(cadastro_hotel + (*contador))).cnpj = cadastro_hotel_dadosx.cnpj; (*(cadastro_hotel + (*contador))).horario_chegar = cadastro_hotel_dadosx.horario_chegar; (*(cadastro_hotel + (*contador))).horario_sair = cadastro_hotel_dadosx.horario_sair; (*(cadastro_hotel + (*contador))).lucro_produtos_vendidos = cadastro_hotel_dadosx.lucro_produtos_vendidos; (*(cadastro_hotel + (*contador))).telefone_dono = cadastro_hotel_dadosx.telefone_dono; (*(cadastro_hotel + (*contador))).telefone = cadastro_hotel_dadosx.telefone; strcpy((*(cadastro_hotel + (*contador))).nome_social, cadastro_hotel_dadosx.nome_social); strcpy((*(cadastro_hotel + (*contador))).razao_social, cadastro_hotel_dadosx.razao_social); strcpy((*(cadastro_hotel + (*contador))).inscricao_estadual, cadastro_hotel_dadosx.inscricao_estadual); strcpy((*(cadastro_hotel + (*contador))).endereco, cadastro_hotel_dadosx.endereco); strcpy((*(cadastro_hotel + (*contador))).nome_dono, cadastro_hotel_dadosx.nome_dono); strcpy((*(cadastro_hotel + (*contador))).email, cadastro_hotel_dadosx.email); (*contador)++; } // Verifica os hoteis void atualizaHotel() { criar_Hotel cadastro_hotel_dadosx; int posicao = 0; FILE* arquivo_hotel; arquivo_hotel = fopen("hotel.txt", "w"); fseek(arquivo_hotel, posicao, SEEK_SET); if (arquivo_hotel == NULL) { printf("Problemas na abertura do arquivo"); } else { printf("Digite o nome Fantasia\n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.nome_social, 100, stdin); printf(" Digite a Razao Social \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.razao_social, 100, stdin); printf(" Inscricao Estadual \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.inscricao_estadual, 100, stdin); printf(" Digite o Endereco \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.endereco, 100, stdin); printf(" Digite o E-mail \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.email, 100, stdin); printf(" Digite o nome do dono \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.nome_dono, 100, stdin); printf(" Digite o CNPJ \n "); scanf("%f", &cadastro_hotel_dadosx.cnpj); printf(" Digite o Telefone do dono \n "); scanf("%f", &cadastro_hotel_dadosx.telefone_dono); printf(" Digite o Telefone do Hotel \n "); scanf("%f", &cadastro_hotel_dadosx.telefone); printf(" Horario Check-in \n "); scanf("%f", &cadastro_hotel_dadosx.horario_chegar); printf(" Horario Check-out \n "); scanf("%f", &cadastro_hotel_dadosx.horario_sair); printf(" Lucro Produtos Vendidos \n "); scanf("%f", &cadastro_hotel_dadosx.lucro_produtos_vendidos); fseek(arquivo_hotel, posicao, SEEK_SET); fwrite(&cadastro_hotel_dadosx, sizeof (criar_Hotel), 1, arquivo_hotel); system("cls"); printf(" --------------------------------------- \n"); printf(" Hotel Atualizado Com Sucesso \n"); printf(" --------------------------------------- \n\n"); } fclose(arquivo_hotel); } // Mostra os hoteis void verHotel(criar_Hotel *cadastro_hotel, int contador) { int i; for (i = 0; i < contador; i++) { printf("Nome Social: %s ", (cadastro_hotel + i)->nome_social); printf("Razao Social: %s ", (cadastro_hotel + i)->razao_social); printf("Inscricao Estadual: %s ", (cadastro_hotel + i)->inscricao_estadual); printf("CNPJ: %f \n", (cadastro_hotel + i)->cnpj); printf("Endereco: %s ", (cadastro_hotel + i)->endereco); printf("Nome dono: %s ", (cadastro_hotel + i)->nome_dono); printf("Telefone Dono: %f \n", (cadastro_hotel + i)->telefone_dono); printf("E-mail: %s ", (cadastro_hotel + i)->email); printf("Horario Check-in: %f \n", (cadastro_hotel + i)->horario_chegar); printf("Horario Check-out: %f \n", (cadastro_hotel + i)->horario_sair); printf("Lucro Produtos Vendidos: %f \n", (cadastro_hotel + i)->lucro_produtos_vendidos); printf("Endereco: %s \n", (cadastro_hotel + i)->endereco); } } void passar(criar_Hotel *cadastro_hotel, int *contador) { criar_Hotel cadastro_hotel_dadosx; FILE* arquivo_hotel; arquivo_hotel = fopen("hotel.txt", "rb"); if (arquivo_hotel == NULL) { printf("Problemas na abertura do arquivo"); } else { while (fread(&cadastro_hotel_dadosx, sizeof (criar_Hotel), 1, arquivo_hotel) == 1) { fscanf(arquivo_hotel, "%f", (cadastro_hotel + contador)); (*(cadastro_hotel + (contador))).cnpj = cadastro_hotel_dadosx.cnpj; (*(cadastro_hotel + (contador))).horario_chegar = cadastro_hotel_dadosx.horario_chegar; (*(cadastro_hotel + (contador))).horario_sair = cadastro_hotel_dadosx.horario_sair; (*(cadastro_hotel + (contador))).lucro_produtos_vendidos = cadastro_hotel_dadosx.lucro_produtos_vendidos; (*(cadastro_hotel + (contador))).telefone_dono = cadastro_hotel_dadosx.telefone_dono; (*(cadastro_hotel + (contador))).telefone = cadastro_hotel_dadosx.telefone; strcpy((*(cadastro_hotel + (contador))).nome_social, cadastro_hotel_dadosx.nome_social); strcpy((*(cadastro_hotel + (contador))).razao_social, cadastro_hotel_dadosx.razao_social); strcpy((*(cadastro_hotel + (contador))).inscricao_estadual, cadastro_hotel_dadosx.inscricao_estadual); strcpy((*(cadastro_hotel + (contador))).endereco, cadastro_hotel_dadosx.endereco); strcpy((*(cadastro_hotel + (contador))).nome_dono, cadastro_hotel_dadosx.nome_dono); strcpy((*(cadastro_hotel + (contador))).email, cadastro_hotel_dadosx.email); (*contador)++; } printf(" Todos os dados foram passados"); } fclose(arquivo_hotel); (*(cadastro_hotel + (*contador))).cnpj = cadastro_hotel_dadosx.cnpj; (*(cadastro_hotel + (*contador))).horario_chegar = cadastro_hotel_dadosx.horario_chegar; (*(cadastro_hotel + (*contador))).horario_sair = cadastro_hotel_dadosx.horario_sair; (*(cadastro_hotel + (*contador))).lucro_produtos_vendidos = cadastro_hotel_dadosx.lucro_produtos_vendidos; (*(cadastro_hotel + (*contador))).telefone_dono = cadastro_hotel_dadosx.telefone_dono; (*(cadastro_hotel + (*contador))).telefone = cadastro_hotel_dadosx.telefone; strcpy((*(cadastro_hotel + (*contador))).nome_social, cadastro_hotel_dadosx.nome_social); strcpy((*(cadastro_hotel + (*contador))).razao_social, cadastro_hotel_dadosx.razao_social); strcpy((*(cadastro_hotel + (*contador))).inscricao_estadual, cadastro_hotel_dadosx.inscricao_estadual); strcpy((*(cadastro_hotel + (*contador))).endereco, cadastro_hotel_dadosx.endereco); strcpy((*(cadastro_hotel + (*contador))).nome_dono, cadastro_hotel_dadosx.nome_dono); strcpy((*(cadastro_hotel + (*contador))).email, cadastro_hotel_dadosx.email); (*contador)++; } int main(int argc, char** argv) { hotel_Home = 0; while (hotel_Home != 5) { printf(" 1 - Cadastrar Hotel \n"); printf(" 2 - Ver Hotel \n"); printf(" 3 - Editar Hotel \n"); printf(" 4 - Excluir Hotel \n"); printf(" 5 - Sair \n"); scanf("%d", &hotel_Home); //Switch do Menu switch (hotel_Home) { // Caso 1 para cadastrar Produtos case 1: CadastroHotel(cadastro_hotel, &contador_hotel); cadastro_hospede = realloc(cadastro_hospede, (contador_hospede + 2) * sizeof (criar_Hospede)); break; // Fecha o case do switch principal case 2: // Parte para listar todos hoteis printf("----- Ver Hotel -----\n"); verHotel(cadastro_hotel, contador_hotel); break; // Fecha o case 1 case 3: atualizaHotel(); break; // Fecha o case 3 } Bom esta seperado em bibliotecas, essa e a parte que estou tentando colocar com arquivos, vou postar sem pra voce ver tambem adicionado 2 minutos depois @KXSY #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct criar_Hotel { // declara todas as variaveis do cadastro dos dados do hotel // char nome_social[100]; char razao_social[100]; char inscricao_estadual[100]; float cnpj; char endereco[100]; float telefone; char email[100]; char nome_dono[100]; float telefone_dono; float horario_chegar; float horario_sair; float lucro_produtos_vendidos; // } criar_Hotel; // Cadastra os hoteis void CadastroHotel(criar_Hotel *cadastro_hotel, criar_Hotel *cadastro_hotel_dados, int *contador) { (*(cadastro_hotel + (*contador))).cnpj = cadastro_hotel_dados->cnpj; (*(cadastro_hotel + (*contador))).horario_chegar = cadastro_hotel_dados->horario_chegar; (*(cadastro_hotel + (*contador))).horario_sair = cadastro_hotel_dados->horario_sair; (*(cadastro_hotel + (*contador))).lucro_produtos_vendidos = cadastro_hotel_dados->lucro_produtos_vendidos; (*(cadastro_hotel + (*contador))).telefone_dono = cadastro_hotel_dados->telefone_dono; (*(cadastro_hotel + (*contador))).telefone = cadastro_hotel_dados->telefone; strcpy((*(cadastro_hotel + (*contador))).nome_social, cadastro_hotel_dados->nome_social); strcpy((*(cadastro_hotel + (*contador))).razao_social, cadastro_hotel_dados->razao_social); strcpy((*(cadastro_hotel + (*contador))).inscricao_estadual, cadastro_hotel_dados->inscricao_estadual); strcpy((*(cadastro_hotel + (*contador))).endereco, cadastro_hotel_dados->endereco); strcpy((*(cadastro_hotel + (*contador))).nome_dono, cadastro_hotel_dados->nome_dono); strcpy((*(cadastro_hotel + (*contador))).email, cadastro_hotel_dados->email); (*contador)++; } // Verifica os hoteis int VerificarHotel(criar_Hotel *cadastro_hotel, criar_Hotel *cadastro_hotel_dados, int contador) { int i, verificacao = 0; for (i = 0; i < contador; i++) { if (strcmp(cadastro_hotel_dados->nome_social, (*(cadastro_hotel + i)).nome_social) == 0) verificacao = 1; } return verificacao; } // Busca a posicao do vetor do hotel int PosicaoHotel(criar_Hotel *cadastro_hotel, criar_Hotel *cadastro_hotel_dados, int contador) { int posicao = -1, i; for (i = 0; i <= contador; i++) { if (strcmp(cadastro_hotel_dados->nome_social, (*(cadastro_hotel + i)).nome_social) == 0) posicao = i; } return posicao; } // Atualiza o hotel void atualizaHotel(criar_Hotel *cadastro_hotel, criar_Hotel *cadastro_hotel_dados, int contador, int posicao) { cadastro_hotel[posicao].cnpj = cadastro_hotel_dados->cnpj; cadastro_hotel[posicao].telefone = cadastro_hotel_dados->telefone; cadastro_hotel[posicao].telefone_dono = cadastro_hotel_dados->telefone_dono; cadastro_hotel[posicao].horario_chegar = cadastro_hotel_dados->horario_chegar; cadastro_hotel[posicao].horario_sair = cadastro_hotel_dados->horario_sair; cadastro_hotel[posicao].lucro_produtos_vendidos = cadastro_hotel_dados->lucro_produtos_vendidos; strcpy(cadastro_hotel[posicao].nome_social, cadastro_hotel_dados->nome_social); strcpy(cadastro_hotel[posicao].razao_social, cadastro_hotel_dados->razao_social); strcpy(cadastro_hotel[posicao].email, cadastro_hotel_dados->email); strcpy(cadastro_hotel[posicao].nome_dono, cadastro_hotel_dados->nome_dono); strcpy(cadastro_hotel[posicao].endereco, cadastro_hotel_dados->endereco); } // Mostra os hoteis void verHotel(criar_Hotel *cadastro_hotel, int contador) { int i; for (i = 0; i < contador; i++) { printf("Nome Social: %s ", (cadastro_hotel + i)->nome_social); printf("Razao Social: %s ", (cadastro_hotel + i)->razao_social); printf("Inscricao Estadual: %s ", (cadastro_hotel + i)->inscricao_estadual); printf("CNPJ: %f \n", (cadastro_hotel + i)->cnpj); printf("Endereco: %s ", (cadastro_hotel + i)->endereco); printf("Nome dono: %s ", (cadastro_hotel + i)->nome_dono); printf("Telefone Dono: %f \n", (cadastro_hotel + i)->telefone_dono); printf("E-mail: %s ", (cadastro_hotel + i)->email); printf("Horario Check-in: %f \n", (cadastro_hotel + i)->horario_chegar); printf("Horario Check-out: %f \n", (cadastro_hotel + i)->horario_sair); printf("Lucro Produtos Vendidos: %f \n", (cadastro_hotel + i)->lucro_produtos_vendidos); printf("Endereco: %s \n", (cadastro_hotel + i)->endereco); } } int main(){ // Menu inicial do Programa while (menu_principal != 6) { printf(" ----- Escolha uma opcao ----- \n"); printf("----- 1 - Modulo de Cadastro e Gestao de Dados -----\n"); printf("----- 2 - Modulo de Reservas -----\n"); printf("----- 3 - Modulo de Transacoes -----\n"); printf("----- 4 - Modulo de Feedback -----\n"); printf("----- 5 - Modulo de Importacao/Exportacao -----\n"); printf("----- 6 - Fechar Programa -----\n"); scanf("%d", &menu_principal); switch (menu_principal) { case 6: printf(" ----- Programa Encerrado -----\n"); //verificar_login_final = 0; break; default: printf(" Opcao Invalida"); break; case 1: /* verificar_acesso0 = verificar_acessos(cadastro_operadores ,verificar_Posicao_login); verificar_acesso1 = verificar_acessos(cadastro_operadores ,verificar_Posicao_login); if(verificar_acesso0 == 0 & verificar_acesso1 == 0){ printf(" Acesso Negado"); break; } */ sub_menu_principal_cadastro = 0; printf(" ----- Area de Cadastro -----\n"); printf(" Selecione uma opcao \n"); printf("1 - Hotel\n"); printf("2 - Hospede\n"); printf("3 - Fornecedor\n"); printf("4 - Produtos\n"); printf("5 - Categoria de Acomodacao\n"); printf("6 - Acomodacao\n"); printf("7 - Operador\n"); printf("8 - Sair\n"); scanf("%d", &sub_menu_principal_cadastro); switch (sub_menu_principal_cadastro) { case 8: printf("Retornado\n"); break; case 1: // Inicio codigo do cadastro de Hotel hotel_Home = 0; while (hotel_Home != 5) { printf(" 1 - Cadastrar Hotel \n"); printf(" 2 - Ver Hotel \n"); printf(" 3 - Editar Hotel \n"); printf(" 4 - Excluir Hotel \n"); printf(" 5 - Sair \n"); scanf("%d", &hotel_Home); //Switch do Menu switch (hotel_Home) { // Caso 1 para cadastrar Produtos case 1: printf("Digite o nome Fantasia\n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_social, 100, stdin); verificar_hotel = VerificarHotel(cadastro_hotel, &cadastro_hotel_dados, contador_hotel); if (verificar_hotel == 1) { printf(" Nome ja cadastrado tente outro \n"); break; } printf(" Digite a Razao Social \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.razao_social, 100, stdin); printf(" Inscricao Estadual \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.inscricao_estadual, 100, stdin); printf(" Digite o Endereco \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.endereco, 100, stdin); printf(" Digite o E-mail \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.email, 100, stdin); printf(" Digite o nome do dono \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_dono, 100, stdin); printf(" Digite o CNPJ \n "); scanf("%f", &cadastro_hotel_dados.cnpj); printf(" Digite o Telefone do dono \n "); scanf("%f", &cadastro_hotel_dados.telefone_dono); printf(" Digite o Telefone do Hotel \n "); scanf("%f", &cadastro_hotel_dados.telefone); printf(" Horario Check-in \n "); scanf("%f", &cadastro_hotel_dados.horario_chegar); printf(" Horario Check-out \n "); scanf("%f", &cadastro_hotel_dados.horario_sair); printf(" Lucro Produtos Vendidos \n "); scanf("%f", &cadastro_hotel_dados.lucro_produtos_vendidos); CadastroHotel(cadastro_hotel, &cadastro_hotel_dados, &contador_hotel); //Soma um na variavel Contadora cadastro_hotel = realloc(cadastro_hotel, (contador_hotel + 2) * sizeof (criar_Hotel)); printf(" ----- Cadastrado com Sucesso ----- \n"); break; // Fecha o case do switch principal case 2: if (contador_hotel == 0) { printf(" ----- Nenhum Hotel Cadastrado\n"); break; } // Parte para listar todos hoteis printf("----- Ver Hoteis -----\n"); printf(" 1 - Ver todos\n"); printf(" 2 - Pesquisar por Nome\n"); scanf("%d", &listar_hoteis); switch (listar_hoteis) { case 1: verHotel(cadastro_hotel, contador_hotel); break; // Fecha o case 1 case 2: printf(" ----- Pesquisar por Nome -----\n"); printf(" ----- Digite o Nome do Hotel ----- \n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_social, 100, stdin); posicao_hotel = PosicaoHotel(cadastro_hotel, &cadastro_hotel_dados, contador_hotel); if (posicao_hotel == -1) { printf("----- Hotel nao encontrado -----\n"); break; } printf(" Nome Fantasia %s ", cadastro_hotel[posicao_hotel].nome_social); printf(" Razao Social %s ", cadastro_hotel[posicao_hotel].razao_social); printf(" Inscricao Estadual %s ", cadastro_hotel[posicao_hotel].inscricao_estadual); printf(" Endereco %s ", cadastro_hotel[posicao_hotel].endereco); printf(" E-mail %s ", cadastro_hotel[posicao_hotel].email); printf(" Nome do Dono %s ", cadastro_hotel[posicao_hotel].nome_dono); printf(" CNPJ %f \n ", cadastro_hotel[posicao_hotel].cnpj); printf(" Telefone do Dono %f \n ", cadastro_hotel[posicao_hotel].telefone_dono); printf(" Telefone do Hotel %f \n ", cadastro_hotel[posicao_hotel].telefone); printf(" Horario Check-in %f \n ", cadastro_hotel[posicao_hotel].horario_chegar); printf(" Horario Check-out %f \n ", cadastro_hotel[posicao_hotel].horario_sair); printf(" Lucro Produtos %f \n ", cadastro_hotel[posicao_hotel].lucro_produtos_vendidos); break; // fecha o case 2 }// Fecha o switch de ver os produtos break; // Fecha o case 2 case 3: if (contador_hotel == 0) { printf(" ----- Nenhum Hotel cadastrado ----- \n"); break; } // Realiza a atualizacao do hotel posicao_hotel = -1; printf(" ----- Editar Hoteis -----\n"); // Pesquisa o hotel printf(" Digite o Nome Fantasia Hotel \n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_social, 100, stdin); posicao_hotel = PosicaoHotel(cadastro_hotel, &cadastro_hotel_dados, contador_hotel); if (posicao_hotel == -1) { printf(" Hotel nao cadastrado \n"); break; } printf(" ----- Hotel Encontrado ----- \n"); printf(" Digite os novos dados \n"); printf(" Digite o Nome Social \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_social, 100, stdin); printf(" Digite a Razao Social \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.razao_social, 100, stdin); printf(" Inscricao Estadual \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.inscricao_estadual, 100, stdin); printf(" Digite o Endereco \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.endereco, 100, stdin); printf(" Digite o E-mail \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.email, 100, stdin); printf(" Digite o nome do dono \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_dono, 100, stdin); printf(" Digite o CNPJ \n "); scanf("%f", &cadastro_hotel_dados.cnpj); printf(" Digite o Telefone do dono \n "); scanf("%f", &cadastro_hotel_dados.telefone_dono); printf(" Digite o Telefone do Hotel \n "); scanf("%f", &cadastro_hotel_dados.telefone); printf(" Horario Check-in \n "); scanf("%f", &cadastro_hotel_dados.horario_chegar); printf(" Horario Check-out \n "); scanf("%f", &cadastro_hotel_dados.horario_sair); printf(" Lucro Produtos Vendidos \n "); scanf("%f", &cadastro_hotel_dados.lucro_produtos_vendidos); atualizaHotel(cadastro_hotel, &cadastro_hotel_dados, contador_hotel, posicao_hotel); printf(" ----- Atualizado com Sucesso ----- \n"); break; // Fecha o case 3 case 4: posicao_hotel = -1; deletar_hotel = 0; if (contador_hotel == 0) { printf(" ----- Nenhum Hotel Cadastrado ----- \n"); break; } printf(" ----- Deletar Hotel ----- \n"); printf(" Para deletar o Nome: \n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dados.nome_social, 100, stdin); posicao_hotel = PosicaoHotel(cadastro_hotel, &cadastro_hotel_dados, contador_hotel); if (posicao_hotel == -1) { printf(" ----- Hotel nao Cadastrado ----- \n"); break; } printf(" ----- Hotel encontrado -----\n"); printf(" ----- Deseja Realmente deletar? \n"); printf(" 1 - Sim \n"); printf(" 2 - Nao \n "); scanf("%d", &deletar_hotel); switch (deletar_hotel) { case 1: printf(" ----- Hotel Deletado -----\n"); for (deletar_busca_hotel = 0; deletar_busca_hotel <= contador_hotel; deletar_busca_hotel++) { cadastro_hotel[posicao_hotel + deletar_busca_hotel].cnpj = cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].cnpj; cadastro_hotel[posicao_hotel + deletar_busca_hotel].telefone = cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].telefone; cadastro_hotel[posicao_hotel + deletar_busca_hotel].telefone_dono = cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].telefone_dono; cadastro_hotel[posicao_hotel + deletar_busca_hotel].horario_sair = cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].horario_sair; cadastro_hotel[posicao_hotel + deletar_busca_hotel].horario_chegar = cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].horario_chegar; cadastro_hotel[posicao_hotel + deletar_busca_hotel].lucro_produtos_vendidos = cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].lucro_produtos_vendidos; strcpy(cadastro_hotel[posicao_hotel + deletar_busca_hotel].nome_social, cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].nome_social); strcpy(cadastro_hotel[posicao_hotel + deletar_busca_hotel].razao_social, cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].razao_social); strcpy(cadastro_hotel[posicao_hotel + deletar_busca_hotel].email, cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].email); strcpy(cadastro_hotel[posicao_hotel + deletar_busca_hotel].inscricao_estadual, cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].inscricao_estadual); strcpy(cadastro_hotel[posicao_hotel + deletar_busca_hotel].nome_dono, cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].nome_dono); strcpy(cadastro_hotel[posicao_hotel + deletar_busca_hotel].endereco, cadastro_hotel[posicao_hotel + deletar_busca_hotel + 1].endereco); } contador_hotel--; cadastro_hotel = realloc(cadastro_hotel, (contador_hotel + 2) * sizeof (criar_Hotel)); break; case 2: printf(" Produto nao deletado \n"); break; default: printf(" Comando invalido \n"); } break; // Fecha o case 4 default: printf(" Comando Invalido \n"); break; case 5: printf(" ----- Retornado -----"); break; } } break; } Eu quero implementar a mesma funcionalidade que faz ai so que com arquivos, a solução que pensei seria toda vez que abrisse o programa as struct voltassem como estavam e continuaria normal o programa
  8. @KXSY Ja tenho o algoritmo pronto funcionando porém sem a introduçao de arquivos. Meu algoritmo nessa parte esta assim, nao sei como implementar corretamente arquivos. funcao do cadastro void CadastroHotel(criar_Hotel *cadastro_hotel, int *contador) { criar_Hotel cadastro_hotel_dadosx; FILE* arquivo_hotel; arquivo_hotel = fopen("hotel.txt", "ab"); if (arquivo_hotel == NULL) { printf("Problemas na abertura do arquivo"); } else { printf("Digite o nome Fantasia\n"); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.nome_social, 100, stdin); printf(" Digite a Razao Social \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.razao_social, 100, stdin); printf(" Inscricao Estadual \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.inscricao_estadual, 100, stdin); printf(" Digite o Endereco \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.endereco, 100, stdin); printf(" Digite o E-mail \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.email, 100, stdin); printf(" Digite o nome do dono \n "); setbuf(stdin, NULL); fgets(cadastro_hotel_dadosx.nome_dono, 100, stdin); printf(" Digite o CNPJ \n "); scanf("%f", &cadastro_hotel_dadosx.cnpj); printf(" Digite o Telefone do dono \n "); scanf("%f", &cadastro_hotel_dadosx.telefone_dono); printf(" Digite o Telefone do Hotel \n "); scanf("%f", &cadastro_hotel_dadosx.telefone); printf(" Horario Check-in \n "); scanf("%f", &cadastro_hotel_dadosx.horario_chegar); printf(" Horario Check-out \n "); scanf("%f", &cadastro_hotel_dadosx.horario_sair); printf(" Lucro Produtos Vendidos \n "); scanf("%f", &cadastro_hotel_dadosx.lucro_produtos_vendidos); fwrite(&cadastro_hotel_dadosx, sizeof (criar_Hotel), 1, arquivo_hotel); system("cls"); printf(" --------------------------------------- \n"); printf(" Hotel Cadastrado Com Sucesso \n"); printf(" --------------------------------------- \n\n"); } fclose(arquivo_hotel); (*(cadastro_hotel + (*contador))).cnpj = cadastro_hotel_dadosx.cnpj; (*(cadastro_hotel + (*contador))).horario_chegar = cadastro_hotel_dadosx.horario_chegar; (*(cadastro_hotel + (*contador))).horario_sair = cadastro_hotel_dadosx.horario_sair; (*(cadastro_hotel + (*contador))).lucro_produtos_vendidos = cadastro_hotel_dadosx.lucro_produtos_vendidos; (*(cadastro_hotel + (*contador))).telefone_dono = cadastro_hotel_dadosx.telefone_dono; (*(cadastro_hotel + (*contador))).telefone = cadastro_hotel_dadosx.telefone; strcpy((*(cadastro_hotel + (*contador))).nome_social, cadastro_hotel_dadosx.nome_social); strcpy((*(cadastro_hotel + (*contador))).razao_social, cadastro_hotel_dadosx.razao_social); strcpy((*(cadastro_hotel + (*contador))).inscricao_estadual, cadastro_hotel_dadosx.inscricao_estadual); strcpy((*(cadastro_hotel + (*contador))).endereco, cadastro_hotel_dadosx.endereco); strcpy((*(cadastro_hotel + (*contador))).nome_dono, cadastro_hotel_dadosx.nome_dono); strcpy((*(cadastro_hotel + (*contador))).email, cadastro_hotel_dadosx.email); (*contador)++; } fim da funcao do cadastro int main(){ hotel_Home = 0; while (hotel_Home != 5) { printf(" 1 - Cadastrar Hotel \n"); printf(" 2 - Ver Hotel \n"); printf(" 3 - Editar Hotel \n"); printf(" 4 - Excluir Hotel \n"); printf(" 5 - Sair \n"); scanf("%d", &hotel_Home); //Switch do Menu switch (hotel_Home) { // Caso 1 para cadastrar Produtos case 1: CadastroHotel(cadastro_hotel, &contador_hotel); cadastro_hotel = realloc(cadastro_hotel, (contador_hotel + 2) * sizeof (criar_Hotel)); break; // Fecha o case do switch principal } fim main Eu gostaria que toda vez que iniciasse o programa o arquivo carregase e mandasse novamente para a struct tipo algo assim: sei que esta errado mas e nesse raciocinio void passar(criar_Hotel *cadastro_hotel, int *contador) { criar_Hotel cadastro_hotel_dadosx; FILE* arquivo_hotel; arquivo_hotel = fopen("hotel.txt", "rb"); if (arquivo_hotel == NULL) { printf("Problemas na abertura do arquivo"); } else { while (fread(&cadastro_hotel_dadosx, sizeof (criar_Hotel), 1, arquivo_hotel) == 1) { fscanf(arquivo_hotel, "%f", (cadastro_hotel + contador)); (*(cadastro_hotel + (contador))).cnpj = cadastro_hotel_dadosx.cnpj; (*(cadastro_hotel + (contador))).horario_chegar = cadastro_hotel_dadosx.horario_chegar; (*(cadastro_hotel + (contador))).horario_sair = cadastro_hotel_dadosx.horario_sair; (*(cadastro_hotel + (contador))).lucro_produtos_vendidos = cadastro_hotel_dadosx.lucro_produtos_vendidos; (*(cadastro_hotel + (contador))).telefone_dono = cadastro_hotel_dadosx.telefone_dono; (*(cadastro_hotel + (contador))).telefone = cadastro_hotel_dadosx.telefone; strcpy((*(cadastro_hotel + (contador))).nome_social, cadastro_hotel_dadosx.nome_social); strcpy((*(cadastro_hotel + (contador))).razao_social, cadastro_hotel_dadosx.razao_social); strcpy((*(cadastro_hotel + (contador))).inscricao_estadual, cadastro_hotel_dadosx.inscricao_estadual); strcpy((*(cadastro_hotel + (contador))).endereco, cadastro_hotel_dadosx.endereco); strcpy((*(cadastro_hotel + (contador))).nome_dono, cadastro_hotel_dadosx.nome_dono); strcpy((*(cadastro_hotel + (contador))).email, cadastro_hotel_dadosx.email); (*contador)++; } printf(" Todos os dados foram passados"); } fclose(arquivo_hotel); }
  9. Estou com um algoritmo que: Ele esta salvando os dados recebidos de uma struct em um arquivo binario, ate ai tudo bem. So que necessito que: quando eu iniciar de novo esse algoritmo os dados que estão salvos no arquivo, exemplo: nome endereco idade, voltem para a struct na posicao que esta salvo no arquivo exemplo: no arquivo foi salvo: nome: Joao endereco: centro idade,: 18 nome: rafael endereco: beco idade,: 20 quando eu iniciar novamente o software necessito que tenha uma funcao que ja faz automaticamente o envio do arquivo para a struct nas devidas posições: struct cadastro: posicao 0 nome: Joao endereco: centro idade,: 18 posicao 1 nome: rafael endereco: beco idade,: 20 alguem poderia me ajudar?
  10. Desta vez deu certo mano, muito obrigado adicionado 48 minutos depois @Mauro Britivaldo
  11. porém continuou adicionado 0 minutos depois @Mauro Britivaldo
  12. porém eu cadastro uma data exemplo: e qualquer outra que vou cadastrar ja da cadastrada @Mauro Britivaldox

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...