Boa noite pessoal,
Seguinte, eu preciso fazer um programa onde eu faco o cadastro de varias pessoas e depois tenho que informar e comparar o mes e ano de aniversario, e na tela precisa mostrar os registros das pessoas que fazer aniversario naqueles mes e ano respectivo.
Segue code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct reg_pessoa
{
char nome[30];
int dia,mes,ano;
};
FILE *parq;
struct reg_pessoa p;
void abrir_arquivo()
{
parq = fopen("teste","ab+");
if(parq == NULL){
printf("Erro ao acessar o arquivo");
}
else{
printf("Arquivo aberto com sucesso");
}
}
void ler_arquivo()
{
parq = fopen("teste","r");
if(parq == NULL){
printf("Erro ao acessar o arquivo");
}
else{
printf("Arquivo lido com sucesso\n");
}
}
void leitura()
{
int i;
char nome;
long tamanho;
int op;
int excluido = 1;
do{
printf("\nREGISTRO \n");
printf("Informe o nome\n");
scanf("%s", &p.nome);
printf("Informe o dia \n");
scanf("%i",&p.dia);
printf("Informe o mes \n");
scanf("%i",&p.mes);
printf("Informe o ano \n");
scanf("%i", &p.ano);
op = resposta();
escreverNoArquivo(p,parq);
tamanho++;
}while (op != 'N');
fclose(parq);
}
void listar_nascidos()
{
int logico = 0;
long tamanho;
char r;
int mes,ano;
struct reg_pessoa p;
printf("Informe o mes ");
scanf("%i", &mes);
printf("Informe o ano ");
scanf("%i", &ano);
while (parq != EOF)
{
fread(&p,sizeof(struct reg_pessoa),1,parq);
if (mes == p.mes && ano == p.ano && logico == 0)
{
printf("pessoas nascidas:");
printf("nome",p.nome);
printf("dia",p.dia);
printf("mes",p.mes);
printf("ano",p.ano);
logico = 1;
logico++;
fseek(parq, (tamanho)*sizeof(struct reg_pessoa), SEEK_SET);
fwrite(&p, sizeof(struct reg_pessoa), 1, parq);
}
else
{
printf("Nao ha pessoas nascidas");
}
}
fclose(parq);
}
void listar_nascidos()
{
int logico = 0;
long tamanho;
char r;
int dia,mes,ano;
fseek(parq,sizeof(p),SEEK_END);
tamanho = (ftell(parq)/sizeof(p))-2;
do{
printf("Informe o dia ");
scanf("%i", &dia);
printf("Informe o mes ");
scanf("%i", &mes);
printf("Informe o ano ");
scanf("%i", &ano);
while (feof(parq) == 0 && logico == 0)
{
fread(&p,sizeof(struct reg_pessoa),1,parq);
if (mes == p.mes && ano == p.ano && logico == 0)
{
logico++;
printf("pessoas nascidas:");
printf("nome",p.nome);
printf("dia",p.dia);
printf("mes",p.mes);
printf("ano",p.ano);
logico = 1;
}
else
{
printf("Nao ha pessoas nascidas");
}
}
}while(r == 'N');
fclose(parq);
}
void main()
{
abrir_arquivo();
leitura();
listar_nascidos();
return 0;
}
void resposta()
{
char resp;
printf ("\nDeseja Continuar <S/N> ?");
do
{
scanf("%c", &resp);
}while (resp!='S' && resp!='N');
return (resp);
}
void escreverNoArquivo(struct reg_pessoa p, FILE *arq)
{
long N;
N=(ftell(parq)/sizeof(struct reg_pessoa)-1);
fseek(parq,N*sizeof(struct reg_pessoa),SEEK_CUR);
if(parq != NULL)
{
fwrite(&p, sizeof(struct reg_pessoa), 1, parq);
}
else
{
printf("\nErro ao abrir o arquivo para escrita!\n");
exit(1); // aborta o programa
}
}
O cadastro esta dando certo, problema eh no procedimento listar_contatos(), eu ja fiz 2 procedimentos mas nenhum esta dando certo. Preciso de ajuda para fazer essa comparacao de um campo da minha struct com as variaveis locais do listar_contatos.
Obrigado desde ja
OBS: Nao posso utilizar vetor.