Ir ao conteúdo
  • Cadastre-se

problema biblioteca em c++


marseli

Posts recomendados

Preciso de ajuda neste problema, só falta esta parte onde tenho que fazer um cálculo (o associado da biblioteca que tiver mais de 10 multas no período de 1 ano(360 dias)fica impossibilitado de realizar emprestimos durante 180 dias). Se alguem puder ajudar agradeço desde já.

struct associado

{
char nome_aluno[40];
char endereco[25];
int codigo[3];
char email[30];
int telefone[10];
};
typedef struct disponivel
{
int nvezes;
} disponivel;

typedef struct emprestado
{
int leitor;
int dia;
int mes;
int ano;
} emprestado;

typedef struct livro
{
int num;
char tit[50];
int status;
char aut[30];
union
{
disponivel disp;
emprestado empr;
};
} livro;

FILE *arq;
livro liv;

char opcao_menu()
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\n\n\n\n\n\n\n\n\n");
printf(" (A)tualizar exemplares\n");
printf(" (E)mprestar livro\n");
printf(" (R)eceber livro\n");
printf(" (F)im\n");
printf(" > ");
return (toupper(getche()));
}

int encontra_livro(int n)
{
fread(&liv,sizeof(livro),1,arq);
while (!feof(arq))
{
if (liv.num == n)
{
fseek(arq,-sizeof(livro),SEEK_CUR);
return 1;
}
fread(&liv,sizeof(livro),1,arq);
}
return 0;
}

void atualizar_exemplares()
{
int num;

arq = fopen("exemplares.dat","a+b");
if (arq == NULL)
{
printf("\nErro ao abrir arquivo\n");
return;
}
printf("\n");
printf("Numero do livro: ");
scanf("%d",&num);
if (encontra_livro(num) == 1)
printf("Ja existe livro com este numero!\n");
else
{
liv.num = num;
printf("Titulo do livro: ");
fflush(stdin);
gets(liv.tit);
liv.status = 0; // livro disponivel
liv.disp.nvezes = 0; // numero de emprestimos
printf("Autor do livro: ");
fflush(stdin);
gets(liv.aut);
fwrite(&liv,sizeof(livro),1,arq);
printf("Livro %d incorporado aos exemplares.\n",num);
}
fclose(arq);
}

}

void emprestar()
{
int num;

arq = fopen("exemplares.dat","r+b");
if (arq == NULL)
{
printf("\nErro ao abrir arquivo\n");
return;
}
printf("\n");
printf("Numero do livro ..... ");
scanf("%d",&num);
if (encontra_livro(num) == NULL)
printf("Este livro nao existe!\n");
else
{
fread(&liv,sizeof(livro),1,arq);
if (liv.status == 1)
printf("Livro ja emprestado (devolucao ate %02d/%02d/%04d)\n",
liv.empr.dia,liv.empr.mes,liv.empr.ano);
else
{
liv.status = 1;
liv.empr.leitor = liv.disp.nvezes+1;
printf("Data de devolucao ... ");
scanf("%d/%d/%d",&liv.empr.dia,&liv.empr.mes,&liv.empr.ano);
fseek(arq,-sizeof(livro),SEEK_CUR);
fwrite(&liv,sizeof(livro),1,arq);
printf("Emprestimo OK!\n");
}
}
fclose(arq);
}

void receber()
{
int num;

arq = fopen("exemplares.dat","r+b");
if (arq == NULL)
{
printf("\nErro ao abrir arquivo\n");
return;
}
printf("\n");
printf("Numero do livro ..... ");
scanf("%d",&num);
if (encontra_livro(num) == 0)
printf("Este livro nao existe!\n");
else
{
fread(&liv,sizeof(livro),1,arq);
if (liv.status == 0)
printf("Este livro ja esta disponivel.\n");
else
{
liv.status = 0;
liv.disp.nvezes = liv.empr.leitor;
fseek(arq,-sizeof(livro),SEEK_CUR);
fwrite(&liv,sizeof(livro),1,arq);
printf("Devolucao OK!\n");
}
}
fclose(arq);
}

int main(int args, char * arg[])
{
char op;

do
{
op = opcao_menu();
switch (op)
{
case 'A': atraso(); break;
case 'I': impossibilitado(); break;
case 'M': multa(); break;
}
printf("\n");
system("Pause");
}
while (op != 'I');
return 0;
}

Link para o comentário
Compartilhar em outros sites

A questão é esta, eu até tentei fazer o codigo, mas acho que ainda não esta certo!!!:(

Se puder dar uma luz?

O acervo de uma biblioteca é composto por exemplares de livros. Cada livro é caracterizado por um ou mais autores, um título, uma editora, local de edição, um código ISBN e um conjunto de palavras-chave. A biblioteca possui pelo menos um exemplar de cada livro, numerados seqüencialmente (1, 2, 3, etc). Os associados da biblioteca podem retirar exemplares dos livros. Cada associado pode retirar no máximo três exemplares. Para cada empréstimo é registrada a data em que este foi realizado e a data de devolução. Um empréstimo pode ser renovado até a data de devolução desde que não exista uma reserva. Caso ocorra atraso na devolução deve-se cobrar uma multa de X reais por exemplar. O associado que tiver mais de 10 multas no período de 1 ano (360 dias) fica impossibilitado de realizar empréstimos pelo período de 180 dias. Cada associado possui um código, nome e endereço, telefone e e-mail.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!