Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Nathalia Paul

Criação de arquivos em c

Recommended Posts

Bom dia, estou terminando um exercício da faculdade mas não consigo gerar arquivos. O programa é para gerar boletos para cada apartamento. Só que ele só  cria o primeiro.

 

#include <stdio.h>#include <string.h>#include <stdlib.h># define ARQ "condominio.bin"# define ARQUIVO "moradores.bin"# define NOME_ARQ "boleto.txt"# define TAM [100]struct Data{int mes, ano;};typedef struct {int cod;char nome[50];char endereco [120];float reserva;float obra;int vencimento;}condominio;typedef struct {char morador [40];int napto;float area;int cod;} moradores;typedef struct{struct Data dta;float rateio;}boleto;int aptos;void cadastro();void listar_condominios();void listar_moradores();void consultar_moradores();void alterar_moradores();void gera_boleto();void reimprime();int main(){int op;do{printf ("\n Administradora de Condominios \n");printf ("\n_________________________________________________\n");printf ("\n <1> Cadastrar um condominio \n");printf ("\n <2> Listar todos os condominios \n");printf ("\n <3> Listar os moradores de um condominio \n");printf ("\n <4> Consultar um morador \n");printf ("\n <5> Alterar os dados de um morador \n");printf ("\n <6> Gerar boleto \n");printf ("\n <7> Reimprimir boleto \n");printf ("\n <0> Sair do programa \n");printf ("\n_________________________________________________\n");printf ("\n");printf ("Opcao: ");scanf ("%d", &op);printf ("\n");switch (op){case 1: cadastro();break;case 2: listar_condominios();break;case 3: listar_moradores ();break;case 4: consultar_moradores();break;case 5: alterar_moradores();break;case 6: gera_boleto();break;case 7:break;case 0:break;default:printf ("\n Erro: opcao invalida!\n");}}while (op != 0);return 0;}void cadastro(){FILE *arq;FILE *arquivo;condominio c;moradores m;int i;if ((arq = fopen(ARQ, "a+b")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);return;}if ((arquivo = fopen(ARQUIVO, "a+b")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);return;}fseek(arq, 0, SEEK_END); // vai para o final do arquivoc.cod = ftell(arq) / sizeof(condominio) + 1;printf ("\n Informe os dados do condominio:\n");printf ("\n");printf ("\n Codigo do Condominio: %d\n", c.cod);printf ("\n Nome do condominio:");scanf(" %50[^\n]", &c.nome);printf ("\n Endereco:");scanf(" %120[^\n]", &c.endereco);printf ("\n Valor do fundo de reserva:");scanf(" %f", &c.reserva);printf ("\n Valor do fundo de obras:");scanf(" %f", &c.obra);printf ("\n Dia de vencomento do condominio:");scanf(" %d", &c.vencimento);fwrite (&c, sizeof (condominio), 1, arq);fclose (arq);printf ("\n Numero de apartamentos do condominio:");scanf(" %d", &aptos);printf ("\n Informe os dados dos moradores:");for (i=0; i < aptos; i++){fscanf (arq, "%d", c.cod);m.cod = c.cod;printf ("\n Nome do morador:");scanf(" %40[^\n]", &m.morador);printf ("\n Numero do apartamento:");scanf(" %d", &m.napto);printf ("\n Area do apartamento:");scanf(" %f", &m.area);fwrite (&m, sizeof (moradores), 1, arquivo);}fclose (arquivo);}void listar_condominios(){FILE * arq;condominio c;if ((arq = fopen(ARQ, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);return;}printf ("\n\t\t Condominios Cadastrados \n");printf ("______________________________________________________________________________\n");printf ("Codigo Nome Endereco Reserva Obras Dia de vencimento \n");printf ("______________________________________________________________________________\n");while (fread(&c, sizeof(condominio), 1, arq) > 0){printf ("%02d %05s %05s %10.2f %10.2f %5.02d\n", c.cod,c.nome, c.endereco, c.reserva, c.obra, c.vencimento);}printf("______________________________________________________________________________\n");fclose (arq);}void listar_moradores(){FILE * arq;condominio c;int a;float rea = 0;printf ("\n Informe o codigo do condominio:");scanf ("%d", &a);if ((arq = fopen(ARQ, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQ);return;}while (fread(&c, sizeof(condominio), 1, arq) > 0){if ( a == c.cod){printf ("Nome do condominio: %s\n", c.nome);}else{printf ("Não ha condominio com este codigo");}}fclose (arq);FILE * arquivo;moradores m;if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQUIVO);return;}printf ("\n\n\t\t Moradores Cadastrados \n");printf ("______________________________________________\n");printf ("Nome Num Apto Area Apto \n");printf ("______________________________________________\n");while (fread(&m, sizeof(moradores), 1, arquivo) > 0){if(a == m.cod){printf (" %5s %10.2d %10.2f \n", m.morador, m.napto, m.area);rea = rea + m.area;}}printf ("______________________________________________\n");printf("Area total: %0.2f\n", rea);fclose (arquivo);}void consultar_moradores(){FILE * arquivo;FILE * arq;moradores m;condominio c;char procura [50];int w = 0;if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQUIVO);return;}if ((arq = fopen(ARQ, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);return;}printf ("Informe o nome do morador:\n");scanf("%s", procura);while (fread(&m, sizeof(moradores), 1, arquivo) > 0){if (stricmp(procura, m.morador) == 0){while (fread(&c, sizeof(condominio), 1, arq) > 0){if(m.cod == c.cod){if(w==0){printf ("______________________________________________\n");printf ("Nome do Condominio Num Apto \n");printf ("______________________________________________\n");w++;}printf (" % 02s %01d \n", c.nome, m.napto);break;}}}}/*printf ("\n\n\t\t Moradores Cadastrados \n");printf ("______________________________________________\n");printf ("Nome do Condominio Num Apto \n");printf ("______________________________________________\n");}while (fread(&m, sizeof(moradores), 1, arquivo) > 0){printf (" % 02s %01d \n", c.nome, m.napto);}printf ("______________________________________________\n");//else {//printf ("Não ha morador com este nome");//}*/fclose (arquivo);}void alterar_moradores(){FILE * arquivo;FILE * arq;moradores m;condominio c;int a, b;char morado[40];float are;if ((arquivo = fopen(ARQUIVO, "rb+")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);return;}if ((arq = fopen(ARQ, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);return;}printf ("Informe o codigo do condominio:\n");scanf ("%d", &a);while (fread(&c, sizeof(condominio), 1, arq) > 0){if (a == c.cod){printf ("Nome do condominio: %s\n", c.nome);}else{//printf ("Nao ha condominio cadastrado com este codigo");}}fclose(arq);printf ("Informe o numero do apartamento\n");scanf ("%d", &;while (fread(&m, sizeof(moradores), 1, arquivo) > 0){if (a == m.cod && b == m.napto ){printf ("Nome do moraddor: %s\n", m.morador);printf ("Area do apartameto: %f", m.area);fseek(arquivo,&m.morador-1,SEEK_SET);printf("\n Nome: ");scanf("%s",&m.morador);printf("\n Area: ");scanf("%f",&m.area);fwrite(&m,sizeof(moradores),1,arquivo);break;}else{printf ("Nao ha morador nesse apartamento");}}fclose (arquivo);//if ((arquivo = fopen(ARQUIVO, "ab+")) == NULL) {//fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);// return;//}//else{//fread(&m, sizeof(moradores), 1, arquivo);//fseek(arquivo,sizeof(moradores),SEEK_SET);//while (fread(&m, sizeof(moradores), 1, arquivo) > 0){//printf("\n Nome: ");//scanf("%s",&m.morador);// m.morador = &morado;// fwrite(&m.morador,sizeof(moradores),1,arquivo);//printf("\n Area: ");//scanf("%f",&m.area);// m.area = are;// fwrite(&m,sizeof(moradores),1,arquivo);//fclose (arquivo);//}}void gera_boleto(){FILE * arquivo;FILE * arq;moradores m;condominio c;boleto b;int a, mes, ano, i, j;float rateio, rateio1, rateio2,rateio3;char boleto[40];printf ("Informe o codigo do condominio:\n");scanf ("%d", &a);if ((arq = fopen(ARQ, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);return;}while (fread(&c, sizeof(condominio), 1, arq) > 0){if (a == c.cod){printf ("Nome do condominio: %s\n", c.nome);}else{printf ("Nao ha condominio cadastrado com este codigo");}}printf ("\nInforme mes e ano (mm/aaaa):");scanf ("%d/%d", &mes, &ano);if ((mes >= 1 && mes <= 12) && (ano>= 1900 && ano <= 2100)){printf ("\nInforme o valor de rateio:");scanf ("%f", &rateio);}else{printf ("Mes ou ano invalido");}if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);return;}while (fread(&m, sizeof(moradores), 1, arquivo) > 0){        if(a== m.cod){sprintf(boleto, "%d_%d_%d_%d.txt", m.cod, m.napto, ano, mes);printf("%s", boleto);FILE *out = fopen(boleto, "w");fscanf(arq, "%s", &c.nome);fscanf(arquivo, "%s", &m.morador);fscanf(arq, "%s", &c.endereco);fscanf(arquivo, "%d", &m.napto);fscanf(arq, "%d/%d/%d", &c.vencimento, &mes, &ano);fwrite(&boleto, sizeof(boleto), 1, out );fclose(out);}}/*b.rateio = b.rateio + m.area;// formula que pega todas as areasrateio1 = rateio/b.rateio; // formula que mostra quanto é o rateio por arearateio3 = rateio1 * m.area;*//*printf ("%d\n", m.cod);printf ("%d\n", m.napto);printf ("%d\n", mes);printf ("%d\n", ano);}}printf("%f\n", b.rateio);printf("%f\n", rateio1);printf("%f\n", rateio3);rateio2 = rateio3 + c.reserva + c.obra;printf("%f\n", rateio2);*/fclose (arquivo);fclose (arq);}
Editado por dif
Usar a tag CODE. o tópico que ensina a usar está fixado nos tópicos em destaque no topo do fórum de C/C++

Compartilhar este post


Link para o post
Compartilhar em outros sites
CiroboyBR    271

nao da pra testar sem seu arquivo de entrara e sem o resto do código. Mas só de olhar ja detectei que você ta esquecendo de colocar os & no fscanf(), corrija isso e veja se era só esse o problema.

  fscanf(arquivo, "%d", m.napto);  fscanf(arq, "%d/%d/%d", c.vencimento, mes, ano);
Editado por dif
Usar a tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites
CiroboyBR    271

Como eu disse anteriormente, "nao da pra testar sem seu arquivo de entrara e sem o resto do código". Isso dificulta muito você receber ajuda, porque quem vai ajudar quebra a cabeça 10x mais pra poder encontrar o erro (dependendo do erro).
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
CiroboyBR    271

Não consegui resolver isso e to morto de sono, mas identifiquei que o erro está na leitura ou gravação dos arquivos, compila isso e da uma olhada

 

#include <stdio.h>#include <string.h>#include <stdlib.h># define ARQ "condominio.bin"# define ARQUIVO "moradores.bin"# define NOME_ARQ "boleto.txt"# define TAM [100]struct Data {  int mes, ano;};typedef struct {  int cod;  char nome[50];  char endereco [120];  float reserva;  float obra;  int vencimento;} condominio;typedef struct {  char morador [40];  int napto;  float area;  int cod;} moradores;typedef struct {  struct Data dta;  float rateio;} boleto;int aptos;void cadastro();void listar_condominios();void listar_moradores();void consultar_moradores();void alterar_moradores();void gera_boleto();void reimprime();int main() {  int op;  do {    printf ("\n Administradora de Condominios \n");    printf ("\n_________________________________________________\n");    printf ("\n <1> Cadastrar um condominio \n");    printf ("\n <2> Listar todos os condominios \n");    printf ("\n <3> Listar os moradores de um condominio \n");    printf ("\n <4> Consultar um morador \n");    printf ("\n <5> Alterar os dados de um morador \n");    printf ("\n <6> Gerar boleto \n");    printf ("\n <7> Reimprimir boleto \n");    printf ("\n <0> Sair do programa \n");    printf ("\n_________________________________________________\n");    printf ("\n");    printf ("Opcao: ");    scanf ("%d", &op);    printf ("\n");    switch (op) {    case 1:      cadastro();      break;    case 2:      listar_condominios();      break;    case 3:      listar_moradores ();      break;    case 4:      consultar_moradores();      break;    case 5:      alterar_moradores();      break;    case 6:      gera_boleto();      break;    case 7:      break;    case 0:      break;    default:      printf ("\n Erro: opcao invalida!\n");    }  } while (op != 0);  return 0;}void cadastro() {  FILE *arq;  FILE *arquivo;  condominio c;  moradores m;  int i;  if ((arq = fopen(ARQ, "a+b")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  if ((arquivo = fopen(ARQUIVO, "a+b")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);    return;  }  fseek(arq, 0, SEEK_END); // vai para o final do arquivo  c.cod = ftell(arq) / sizeof(condominio) + 1;  printf ("\n Informe os dados do condominio:\n");  printf ("\n");  printf ("\n Codigo do Condominio: %d\n", c.cod);  printf ("\n Nome do condominio:");  scanf(" %50[^\n]", &c.nome);  printf ("\n Endereco:");  scanf(" %120[^\n]", &c.endereco);  printf ("\n Valor do fundo de reserva:");  scanf(" %f", &c.reserva);  printf ("\n Valor do fundo de obras:");  scanf(" %f", &c.obra);  printf ("\n Dia de vencomento do condominio:");  scanf(" %d", &c.vencimento);  fwrite (&c, sizeof (condominio), 1, arq);  fclose (arq);  printf ("\n Numero de apartamentos do condominio:");  scanf(" %d", &aptos);  printf ("\n Informe os dados dos moradores:");  for (i=0; i < aptos; i++) {    fscanf (arq, "%d", c.cod);    m.cod = c.cod;    printf ("\n Nome do morador:");    scanf(" %40[^\n]", &m.morador);    printf ("\n Numero do apartamento:");    scanf(" %d", &m.napto);    printf ("\n Area do apartamento:");    scanf(" %f", &m.area);    fwrite (&m, sizeof (moradores), 1, arquivo);  }  fclose (arquivo);}void listar_condominios() {  FILE * arq;  condominio c;  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  printf ("\n\t\t Condominios Cadastrados \n");  printf ("______________________________________________________________________________\n");  printf ("Codigo Nome Endereco Reserva Obras Dia de vencimento \n");  printf ("______________________________________________________________________________\n");  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    printf ("%02d %05s %05s %10.2f %10.2f %5.02d\n", c.cod,            c.nome, c.endereco, c.reserva, c.obra, c.vencimento);  }  printf  ("______________________________________________________________________________\n");  fclose (arq);}void listar_moradores() {  FILE * arq;  condominio c;  int aaux;  float rea = 0;  printf ("\n Informe o codigo do condominio:");  scanf ("%d", &aaux);  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQ);    return;  }  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    if ( aaux == c.cod) {      printf ("Nome do condominio: %s\n", c.nome);    } else {      printf ("Não ha condominio com este codigo");    }  }  fclose (arq);  FILE * arquivo;  moradores m;  if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQUIVO);    return;  }  printf ("\n\n\t\t Moradores Cadastrados \n");  printf ("______________________________________________\n");  printf ("Nome Num Apto Area Apto \n");  printf ("______________________________________________\n");  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if(aaux == m.cod) {      printf (" %5s %10.2d %10.2f \n", m.morador, m.napto, m.area);      rea = rea + m.area;    }  }  printf ("______________________________________________\n");  printf("Area total: %0.2f\n", rea);  fclose (arquivo);}void consultar_moradores() {  FILE * arquivo;  FILE * arq;  moradores m;  condominio c;  char procura [50];  int w = 0;  if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQUIVO);    return;  }  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  printf ("Informe o nome do morador:\n");  scanf("%s", procura);  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if (stricmp(procura, m.morador) == 0) {      while (fread(&c, sizeof(condominio), 1, arq) > 0) {        if(m.cod == c.cod) {          if(w==0) {            printf ("______________________________________________\n");            printf ("Nome do Condominio Num Apto \n");            printf ("______________________________________________\n");            w++;          }          printf (" % 02s %01d \n", c.nome, m.napto);          break;        }      }    }  }  /*printf ("\n\n\t\t Moradores Cadastrados \n");  printf ("______________________________________________\n");  printf ("Nome do Condominio Num Apto \n");  printf ("______________________________________________\n");  }  while (fread(&m, sizeof(moradores), 1, arquivo) > 0)  {  printf (" % 02s %01d \n", c.nome, m.napto);  }  printf ("______________________________________________\n");  //else {  //printf ("Não ha morador com este nome");  //}*/  fclose (arquivo);}void alterar_moradores() {  FILE * arquivo;  FILE * arq;  moradores m;  condominio c;  int a, b;  char morado[40];  float are;  if ((arquivo = fopen(ARQUIVO, "rb+")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);    return;  }  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  printf ("Informe o codigo do condominio:\n");  scanf ("%d", &a);  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    if (a == c.cod) {      printf ("Nome do condominio: %s\n", c.nome);    }    else {//printf ("Nao ha condominio cadastrado com este codigo");    }  }  fclose(arq);  printf ("Informe o numero do apartamento\n");  scanf ("%d", &;  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if (a == m.cod && b == m.napto ) {      printf ("Nome do moraddor: %s\n", m.morador);      printf ("Area do apartameto: %f", m.area);      fseek(arquivo,&m.morador-1,SEEK_SET);      printf("\n Nome: ");      scanf("%s",&m.morador);      printf("\n Area: ");      scanf("%f",&m.area);      fwrite(&m,sizeof(moradores),1,arquivo);      break;    }    else {      printf ("Nao ha morador nesse apartamento");    }  }  fclose (arquivo);//if ((arquivo = fopen(ARQUIVO, "ab+")) == NULL) {//fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);// return;//}//else{//fread(&m, sizeof(moradores), 1, arquivo);//fseek(arquivo,sizeof(moradores),SEEK_SET);//while (fread(&m, sizeof(moradores), 1, arquivo) > 0){//printf("\n Nome: ");//scanf("%s",&m.morador);// m.morador = &morado;// fwrite(&m.morador,sizeof(moradores),1,arquivo);//printf("\n Area: ");//scanf("%f",&m.area);// m.area = are;// fwrite(&m,sizeof(moradores),1,arquivo);//fclose (arquivo);//}}void gera_boleto() {  FILE *arquivo;  FILE *arq;  FILE *out;  moradores m;  condominio c;  boleto b;  int aaux, mes, ano, i, j;  float rateio, rateio1, rateio2,rateio3;  char boleto[40];  printf ("Informe o codigo do condominio:\n");  scanf ("%d", &aaux);  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    if (aaux == c.cod) {      printf ("Nome do condominio: %s\n", c.nome);    }    else {      printf ("Nao ha condominio cadastarado com este codigo");    }  }  printf ("\nInforme mes e ano (mm/aaaa):");  scanf ("%d/%d", &mes, &ano);  if ((mes >= 1 && mes <= 12) && (ano>= 1900 && ano <= 2100)) {    printf ("\nInforme o valor de rateio:");    scanf ("%f", &rateio);  } else {    printf ("Mes ou ano invalido");  }  if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);    return;  }  int cc = 0;//para testes  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if(aaux == m.cod) {// não está entrando aki devido a uma leitura ou gravação errada no arquivo.      sprintf(boleto, "%d_%d_%d_%d.txt", m.cod, m.napto, ano, mes);      printf("%s", boleto);// para testes      out = fopen(boleto, "w");      fscanf(arq, "%s", c.nome);      fscanf(arquivo, "%s", m.morador);      fscanf(arq, "%s", c.endereco);      fscanf(arquivo, "%d", &m.napto);      fscanf(arq, "%d/%d/%d", &c.vencimento, &mes, &ano);      fwrite(&boleto, sizeof(boleto), 1, out );      printf("\nimrpimiu!", aaux, m.cod);      fclose(out);      printf("\n%d", cc);//contatdor para teste de contagem    } printf("\n\n%d == %d  ??\n\n", aaux, m.cod);//para testes  system("pause");//para testes  }  /*b.rateio = b.rateio + m.area;// formula que pega todas as areas  rateio1 = rateio/b.rateio; // formula que mostra quanto é o rateio por area  rateio3 = rateio1 * m.area;*/  /*printf ("%d\n", m.cod);  printf ("%d\n", m.napto);  printf ("%d\n", mes);  printf ("%d\n", ano);}}  printf("%f\n", b.rateio);  printf("%f\n", rateio1);  printf("%f\n", rateio3);  rateio2 = rateio3 + c.reserva + c.obra;  printf("%f\n", rateio2);*/  fclose (arquivo);  fclose (arq);}

Vou dormir. abrss e boa sorte =/

Compartilhar este post


Link para o post
Compartilhar em outros sites
CiroboyBR    271

Dessa maneira está imprimindo os boletos de todos os moradores:

 

#include <stdio.h>#include <string.h>#include <stdlib.h># define ARQ "condominio.bin"# define ARQUIVO "moradores.bin"# define NOME_ARQ "boleto.txt"# define TAM [100]struct Data {  int mes, ano;};typedef struct {  int cod;  char nome[50];  char endereco [120];  float reserva;  float obra;  int vencimento;} condominio;typedef struct {  char morador [40];  int napto;  float area;  int cod;} moradores;typedef struct {  struct Data dta;  float rateio;} boleto;int aptos;void cadastro();void listar_condominios();void listar_moradores();void consultar_moradores();void alterar_moradores();void gera_boleto();void reimprime();int main() {  int op;  do {    printf ("\n Administradora de Condominios \n");    printf ("\n_________________________________________________\n");    printf ("\n <1> Cadastrar um condominio \n");    printf ("\n <2> Listar todos os condominios \n");    printf ("\n <3> Listar os moradores de um condominio \n");    printf ("\n <4> Consultar um morador \n");    printf ("\n <5> Alterar os dados de um morador \n");    printf ("\n <6> Gerar boleto \n");    printf ("\n <7> Reimprimir boleto \n");    printf ("\n <0> Sair do programa \n");    printf ("\n_________________________________________________\n");    printf ("\n");    printf ("Opcao: ");    scanf ("%d", &op);    printf ("\n");    switch (op) {    case 1:      cadastro();      break;    case 2:      listar_condominios();      break;    case 3:      listar_moradores ();      break;    case 4:      consultar_moradores();      break;    case 5:      alterar_moradores();      break;    case 6:      gera_boleto();      break;    case 7:      break;    case 0:      break;    default:      printf ("\n Erro: opcao invalida!\n");    }  } while (op != 0);  return 0;}void cadastro() {  FILE *arq;  FILE *arquivo;  condominio c;  moradores m;  int i;  if ((arq = fopen(ARQ, "a+b")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  if ((arquivo = fopen(ARQUIVO, "a+b")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);    return;  }  fseek(arq, 0, SEEK_END); // vai para o final do arquivo  c.cod = ftell(arq) / sizeof(condominio) + 1;  printf ("\n Informe os dados do condominio:\n");  printf ("\n");  printf ("\n Codigo do Condominio: %d\n", c.cod);  printf ("\n Nome do condominio:");  scanf(" %50[^\n]", &c.nome);  printf ("\n Endereco:");  scanf(" %120[^\n]", &c.endereco);  printf ("\n Valor do fundo de reserva:");  scanf(" %f", &c.reserva);  printf ("\n Valor do fundo de obras:");  scanf(" %f", &c.obra);  printf ("\n Dia de vencomento do condominio:");  scanf(" %d", &c.vencimento);  fwrite (&c, sizeof (condominio), 1, arq);  fclose (arq);  printf ("\n Numero de apartamentos do condominio:");  scanf(" %d", &aptos);  printf ("\n Informe os dados dos moradores:");  for (i=0; i < aptos; i++) {    fscanf (arq, "%d", c.cod);    m.cod = c.cod;    printf ("\n Nome do morador:");    scanf(" %40[^\n]", &m.morador);    printf ("\n Numero do apartamento:");    scanf(" %d", &m.napto);    printf ("\n Area do apartamento:");    scanf(" %f", &m.area);    fwrite (&m, sizeof (moradores), 1, arquivo);  }  fclose (arquivo);}void listar_condominios() {  FILE * arq;  condominio c;  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  printf ("\n\t\t Condominios Cadastrados \n");  printf ("______________________________________________________________________________\n");  printf ("Codigo Nome Endereco Reserva Obras Dia de vencimento \n");  printf ("______________________________________________________________________________\n");  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    printf ("%02d %05s %05s %10.2f %10.2f %5.02d\n", c.cod,            c.nome, c.endereco, c.reserva, c.obra, c.vencimento);  }  printf  ("______________________________________________________________________________\n");  fclose (arq);}void listar_moradores() {  FILE * arq;  condominio c;  int aaux;  float rea = 0;  printf ("\n Informe o codigo do condominio:");  scanf ("%d", &aaux);  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQ);    return;  }  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    if ( aaux == c.cod) {      printf ("Nome do condominio: %s\n", c.nome);    } else {      printf ("Não ha condominio com este codigo");    }  }  fclose (arq);  FILE * arquivo;  moradores m;  if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQUIVO);    return;  }  printf ("\n\n\t\t Moradores Cadastrados \n");  printf ("______________________________________________\n");  printf ("Nome Num Apto Area Apto \n");  printf ("______________________________________________\n");  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if(aaux == m.cod) {      printf (" %5s %10.2d %10.2f \n", m.morador, m.napto, m.area);      rea = rea + m.area;    }  }  printf ("______________________________________________\n");  printf("Area total: %0.2f\n", rea);  fclose (arquivo);}void consultar_moradores() {  FILE * arquivo;  FILE * arq;  moradores m;  condominio c;  char procura [50];  int w = 0;  if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo \"%s\"!\n", ARQUIVO);    return;  }  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  printf ("Informe o nome do morador:\n");  scanf("%s", procura);  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if (stricmp(procura, m.morador) == 0) {      while (fread(&c, sizeof(condominio), 1, arq) > 0) {        if(m.cod == c.cod) {          if(w==0) {            printf ("______________________________________________\n");            printf ("Nome do Condominio Num Apto \n");            printf ("______________________________________________\n");            w++;          }          printf (" % 02s %01d \n", c.nome, m.napto);          break;        }      }    }  }  /*printf ("\n\n\t\t Moradores Cadastrados \n");  printf ("______________________________________________\n");  printf ("Nome do Condominio Num Apto \n");  printf ("______________________________________________\n");  }  while (fread(&m, sizeof(moradores), 1, arquivo) > 0)  {  printf (" % 02s %01d \n", c.nome, m.napto);  }  printf ("______________________________________________\n");  //else {  //printf ("Não ha morador com este nome");  //}*/  fclose (arquivo);}void alterar_moradores() {  FILE * arquivo;  FILE * arq;  moradores m;  condominio c;  int a, b;  char morado[40];  float are;  if ((arquivo = fopen(ARQUIVO, "rb+")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);    return;  }  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  printf ("Informe o codigo do condominio:\n");  scanf ("%d", &a);  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    if (a == c.cod) {      printf ("Nome do condominio: %s\n", c.nome);    }    else {//printf ("Nao ha condominio cadastrado com este codigo");    }  }  fclose(arq);  printf ("Informe o numero do apartamento\n");  scanf ("%d", &;  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if (a == m.cod && b == m.napto ) {      printf ("Nome do moraddor: %s\n", m.morador);      printf ("Area do apartameto: %f", m.area);      fseek(arquivo,&m.morador-1,SEEK_SET);      printf("\n Nome: ");      scanf("%s",&m.morador);      printf("\n Area: ");      scanf("%f",&m.area);      fwrite(&m,sizeof(moradores),1,arquivo);      break;    }    else      printf ("Nao ha morador nesse apartamento");  }  fclose (arquivo);}void gera_boleto() {  FILE *arquivo;  FILE *arq;  FILE *out;  moradores m;  condominio c;  boleto b;  int aaux, mes, ano, i, j;  float rateio, rateio1, rateio2,rateio3;  char boleto[40];  printf ("Informe o codigo do condominio:\n");  scanf ("%d", &aaux);  if ((arq = fopen(ARQ, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQ);    return;  }  while (fread(&c, sizeof(condominio), 1, arq) > 0) {    if (aaux == c.cod)      printf ("Nome do condominio: %s\n", c.nome);    else      printf ("Nao ha condominio cadastarado com este codigo");  }  printf ("\nInforme mes e ano (mm/aaaa):");  scanf ("%d/%d", &mes, &ano);  if ((mes >= 1 && mes <= 12) && (ano>= 1900 && ano <= 2100)) {    printf ("\nInforme o valor de rateio:");    scanf ("%f", &rateio);  } else    printf ("Mes ou ano invalido");  if ((arquivo = fopen(ARQUIVO, "rb")) == NULL) {    fprintf(stderr, "\nErro: nao foi possivel abrir o arquivo\"%s\"!\n", ARQUIVO);    return;  }  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if(aaux == m.cod) {      printf (" %5s %10.2d %10.2f \n", m.morador, m.napto, m.area);      sprintf(boleto, "%d_%d_%d_%d.txt", m.cod, m.napto, ano, mes);      out = fopen(boleto, "w");      fwrite(&boleto, sizeof(boleto), 1, out );      printf("\nimrpimiu!", aaux, m.cod);      fclose(out);    }  }/*  while (fread(&m, sizeof(moradores), 1, arquivo) > 0) {    if(aaux == m.cod) {// não está entrando aqui devido a uma leitura ou gravação errada no arquivo.      sprintf(boleto, "%d_%d_%d_%d.txt", m.cod, m.napto, ano, mes);      printf("%s", boleto);// para testes      out = fopen(boleto, "w");            //fscanf(arq, "%s", c.nome); //      //fseek(arquivo,&m.morador-1,SEEK_SET);      //fscanf(arquivo, "%s", m.morador);      //fscanf(arq, "%s", c.endereco);      //fscanf(arquivo, "%d", &m.napto);      //fscanf(arq, "%d/%d/%d", &c.vencimento, &mes, &ano);      fwrite(&boleto, sizeof(boleto), 1, out );      printf("\nimrpimiu!", aaux, m.cod);      fclose(out);    }    printf("\n\n%d == %d  ??\n\n", aaux, m.cod);//para testes    system("pause");//para testes  }*/  fclose (arquivo);  fclose (arq);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×