My inspiration for make this project, was have started a university and to have problem to find books in my local library
This project sign up books in a TXT file
I built this with a little help from my friends (Yeah, I'm a Beatles fan)
My big challenge to make this project, was put books in a TXT file
Here is the Source Code:
/* Programa Para Cadastro de livros em uma Biblioteca*/
include
include
include
include
include
//-- Struct cadastro ------------------
struct cadastro { int quantidadePaginas,ex;//esta variável ex serve para saber se o cadastro está excluído ou não. se for 1 está excluído se for 0 não está. char nome[50]; int status; char editora[50]; int categoria; };
//-- Variáveis do tipo: global -----------
FILE *cadastros; struct cadastro cadast;// É a estrutura de dados.
//-- Declarando funções ------------
void abre_arquivo() // função que abre o arquivo de cadastros {
cadastros=fopen("cadastros.txt","rb+"); // tenta abrir o arquivo (rb+)
if(cadastros == NULL) // se ele ainda não existe
cadastros=fopen("cadastros.txt","wb+");// então criamos ele (wb+)
if(cadastros == NULL) // se a criação também não funcionar
printf("\nErro ao abrir ou criar arquivo de cadastros"); // então uma mensagem de erro é mostrada
}
//------ Pesquisa de Clientes --------------------------------
char pesquisa_cadast(char nome2[30]) {
rewind(cadastros);// coloca o ponteiro no inicio do arquivo para pesquisar desde o começo
while(feof(cadastros) == 0) // enquanto não chega no fim do arquivo...
{
fread(&cadast, sizeof(struct cadastro), 1, cadastros);// lê uma struct cadastro do arquivo e copia ela para a variável global cadast
if(strcmp(cadast.nome,nome2) == 0 && cadast.ex == 0)return 1;// se o codigo do cadastro que eu acabei de ler (cadast.nome) é igual ao código que passei pra função (cod) E o cadastro não foi excluído...
} // então encerro a função retornando uma resposta positiva (1)
return 0;// se o while terminou sem passar pelo "return 1" então o código não existe. Neste caso retorno uma resposta negativa (0)
}
//------- Cadastro de Clientes -------------------------------
void cad_cadast() { int pos; struct cadastro aux;
system("cls");
printf("\t_________________\n");
printf("\tCADASTRO DE LIVRO\n");
printf("\t_________________\n\n");
setlocale(LC_ALL, "portuguese");
printf("\nNome do livro: ");
fflush(stdin);
gets(aux.nome); //assim que recebo o nome digitado pelo usuário
if(pesquisa_cadast(aux.nome) == 0) // chamo a pesquisa pra saber se já existe. Se não existir (== 0) então...
{
do{
printf("_____________________________\n");
printf("\nSituação do livro:\n\n[1] Disponivel\n[2] Alugado\n[3] Reservado\n\n");
fflush(stdin);
scanf("%d",&aux.status);
}while(aux.status<=0 || aux.status>=4);
printf("_____________________________\n");
printf("\nQuantidade de páginas: ");
fflush(stdin);
scanf("%d",&aux.quantidadePaginas);
printf("_____________________________\n");
do{
printf("\nCategoria:\n\n[1] Infantil\n[2] Ciêntifico\n[3] Curiosidades\n[4] Artigos\n[5] Fição\n\n");
fflush(stdin);
scanf("%d", &aux.categoria);
}while(aux.categoria<=0 || aux.categoria>=6);
printf("_____________________________\n");
setlocale(LC_ALL, "portuguese");
printf("\nAutor(a): ");
fflush(stdin);
scanf(" %[^\n]s", &aux.editora);
aux.ex=0; // indica que o cadastro não está excluído
fseek(cadastros, 0, SEEK_END);// posiciono o ponteiro no final do arquivo
fwrite(&aux, sizeof(struct cadastro), 1, cadastros);// e gravo a variável aux que eu acabei de preencher
system("cls");
printf("Cadastro efetuado com sucesso!");
getch();
}
else
{
printf("\n\nCadastro ja existente.");// se a pesquisa retornar o valor 1 e que o cadastro já existe
getch();
}
}
//--------- Alteração de Cadastros ---------------------------------------------------------------------
void alt_cadast() { struct cadastro aux; int resp, flag=1, pos;
system("cls");
printf("\t________________\n");
printf("\tALTERAR CADASTRO\n");
printf("\t________________\n");
printf("\nDigite o nome do livro já cadastrado: ");
fflush(stdin);
gets(aux.nome);
if(pesquisa_cadast(aux.nome) == 0)
{
printf("\nCadastro nao encontrado!");
getch();
}
else
{
fseek(cadastros, -sizeof(struct cadastro), SEEK_CUR); // se o cadastro existe então posiciono o ponteiro para o inicio dele
fread(&aux, sizeof(struct cadastro), 1, cadastros); // assim eu posso fazer a leitura no arquivo e colocar os dados na variável aux
printf("\n\nDados encontrado desse livro\n\n");
printf("\n\nLivro: %s", aux.nome);
printf("\n_____________________________\n");
switch (aux.status){
case 1:
printf("\n[1] Disponivel");
break;
case 2:
printf("\n[2] Alugado");
break;
case 3:
printf("\n[3] Reservado");
break;
}
printf("\n_____________________________\n");
printf("\nPáginas: [%d paginas]", aux.quantidadePaginas);
printf("\n_____________________________\n");
switch (aux.status){
case 1:
printf("\n[1] Infantil");
break;
case 2:
printf("\n[2] Ciêntifico");
break;
case 3:
printf("\n[3] Curiosidades");
break;
case 4:
printf("\n[4] Artigos");
break;
case 5:
printf("\n[5] Ficção");
}
printf("\n_____________________________\n");
printf("\nAutor(a): %s", aux.editora);
printf("\n\nDeseja mesmo alterar esse livro?\n\n[1] Para sim ou [0] Para não: ");
scanf("%d", &resp);
do
{
switch(resp)
{
case 0:
flag=0;
break;
case 1: // se a resposta for sim (1)...
system("cls");
printf("\t___________\n");
printf("\tNovos Dados\n");
printf("\t___________\n\n");
printf("\nNome do livro: ");
fflush(stdin);
gets(aux.nome);
do{
printf("_____________________________\n");
printf("\nSituação do livro:\n\n[1] Disponivel\n[2] Alugado\n[3] Reservado\n\n");
fflush(stdin);
scanf("%d",&aux.status);
}while(aux.status<=0 || aux.status>=4);
printf("_____________________________\n");
printf("\nQuantidade de páginas: ");
fflush(stdin);
scanf("%d",&aux.quantidadePaginas);
do{
printf("_____________________________\n");
printf("\nCategoria:\n\n[1] Infantil\n[2] Ciêntifico\n[3] Curiosidades\n[4] Artigos\n[5] Fição\n\n");
fflush(stdin);
scanf("%d", &aux.categoria);
}while(aux.categoria<=0 || aux.categoria>=6);
printf("_____________________________\n");
setlocale(LC_ALL, "portuguese");
printf("\nEditora: ");
fflush(stdin);
scanf(" %[^\n]s", &aux.editora);
fseek(cadastros, -sizeof(struct cadastro), SEEK_CUR); // volto o ponteiro para o início da ficha
fwrite(&aux, sizeof(struct cadastro), 1, cadastros); //e gravo os novos dados que o usuário acabou de digitar
system("cls");
printf("Dados alterados com sucesso!");
getch();
flag=0;
break;
default:
printf("\nOpção inválida! Digite novamente: ");
scanf("%d", &resp);
}
}
while(flag);
}
}
//------ Busca/Pesquisa de Cadastros --------------------------------
void mostra_cadast() { int pos; struct cadastro aux; system("cls"); printf("\t_______________________\n"); printf("\tCONSULTAR LIVRO CADASTRADO\n"); printf("\t_______________________\n"); printf("\nDigite o nome do livro já cadastrado: "); fflush(stdin); gets(aux.nome);
if(pesquisa_cadast(aux.nome) == 0)
{
printf("\nCadastro não encontrado!");
getch();
}
else
{
fseek(cadastros, -sizeof(struct cadastro), SEEK_CUR); // se o cadastro existe eu volto o ponteiro para o início da ficha
fread(&aux, sizeof(struct cadastro), 1, cadastros);
setlocale(LC_ALL, "portuguese");
printf("\n\nLivro: %s", aux.nome);
printf("\n_____________________________\n");
switch (aux.status){
case 1:
printf("\n[1] Disponivel");
break;
case 2:
printf("\n[2] Alugado");
break;
case 3:
printf("\n[3] Reservado");
break;
}
printf("\n_____________________________\n");
printf("\nPáginas: [%d paginas]", aux.quantidadePaginas);
printf("\n_____________________________\n");
switch (aux.status){
case 1:
printf("\n[1] Infantil");
break;
case 2:
printf("\n[2] Ciêntifico");
break;
case 3:
printf("\n[3] Curiosidades");
break;
case 4:
printf("\n[4] Artigos");
break;
case 5:
printf("\n[5] Ficção");
}
printf("\n_____________________________\n");
printf("\nAutor(a): %s", aux.editora);
getch();
}
}
void exc_cadast() {
struct cadastro aux;
int resp, flag=1, pos;
system("cls");
printf("\t________________\n");
printf("\tExcluir cadastro\n");
printf("\t________________\n");
printf("\nDigite o nome do livro já cadastrado: ");
fflush(stdin);
gets(aux.nome);
if(pesquisa_cadast(aux.nome) == 0)
{
printf("\nCadastro nao encontrado!");
getch();
}
else
{
fseek(cadastros, -sizeof(struct cadastro), SEEK_CUR); // se o cadastro existe então posiciono o ponteiro para o inicio dele
fread(&aux, sizeof(struct cadastro), 1, cadastros); // assim eu posso fazer a leitura no arquivo e colocar os dados na variável aux
printf("\nDados encontrado desse livro\n\n");
printf("\n\nLivro: %s", aux.nome);
printf("\n_____________________________\n");
switch (aux.status){
case 1:
printf("\n[1] Disponivel");
break;
case 2:
printf("\n[2] Alugado");
break;
case 3:
printf("\n[3] Reservado");
break;
}
printf("\n_____________________________\n");
printf("\nPáginas: [%d paginas]", aux.quantidadePaginas);
printf("\n_____________________________\n");
switch (aux.status){
case 1:
printf("\n[1] Infantil");
break;
case 2:
printf("\n[2] Ciêntifico");
break;
case 3:
printf("\n[3] Curiosidades");
break;
case 4:
printf("\n[4] Artigos");
break;
case 5:
printf("\n[5] Ficção");
}
printf("\n_____________________________\n");
printf("\nAutor(a): %s", aux.editora);
printf("\n_____________________________\n");
printf("\nDeseja mesmo excluir esse livro?\n\n[1] Para sim ou [0] Para não: ");
scanf("%d", &resp);
do
{
switch(resp)
{
case 0:
flag=0;
break;
case 1: // se a resposta for sim (1)...
aux.ex=1; // altero o campo ex para 1
fseek(cadastros, -sizeof(struct cadastro), SEEK_CUR);// ponho o ponteiro no início da ficha
fwrite(&aux, sizeof(struct cadastro), 1, cadastros); // e a gravo novamente mas agora com o campo ex valendo 1, o que faz com que a pesquisa não o encontre
system("cls");
printf("Cadastro excluido com sucesso!");
getch();
flag=0;
break;
default:
printf("\nOpção inválida! Digite novamente: ");
scanf("%d", &resp);
}
}
while(flag);
}
}
void menu_principal() {
int op;
do
{
setlocale(LC_ALL, "portuguese");
system("cls");
system("color 33");
printf("\t\t\t\t\t------------------------------\n");
printf("\t\t\t\t\t CADASTRO E CONTROLE DE LIVROS\n");
printf("\t\t\t\t\t------------------------------\n\n\n");
printf("\n[1] Cadastro de livro\n");
printf("\n[2] Consulta de livros\n");
printf("\n[3] Alterar cadastro\n");
printf("\n[4] Excluir cadastro\n");
printf("\n[0] Sair\n");
printf("\n\nPor favor, escolha uma das opções acima: ");
fflush(stdin);
scanf("%d", &op);
switch(op)
{
case 1:
cad_cadast();
break;
case 2:
mostra_cadast();
break;
case 3:
alt_cadast();
break;
case 4:
exc_cadast();
break;
case 0:
printf("\n\n\n\tObrigado por usar o nosso sistema de cadastros\n\n\n\t\tVolte sempre!");
getch();
break;
default:
printf("\n\nOpcao Invalida!\n\n");
getch();
}
}
while(op);
}
//-- programa ------------------------
int main() { abre_arquivo(); menu_principal(); fclose(cadastros); }
Log in or sign up for Devpost to join the conversation.