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); }

Built With

Share this project:

Updates