Ir para conteúdo

POWERED BY:

Arquivado

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

lucasfontes

Programa de biblioteca

Recommended Posts

Uma determinada biblioteca possui obras de ciências exatas, ciências humanas e ciências biomédicas, totalizando 30 (trinta) volumes, 10 de cada área. O proprietário resolveu informatiza-la e para tal, agrupou as informações sobre cada livro do seguinte modo:

Código - Livro doado ou não - Nome da obra - Autor da obra - Editora - Número de páginais

Os menus de cadastrados de cada livro são similares e devem contemplar as informações descritas no inicio deste projeto.

Após a inclusão dos dados, retornar ao menu Cadastra Livros

OBS: O usuário pode cadastrar quantos livros quiser até o limite de 10 livros por área (IMPORTANTE). Uma mensagem deve ser enviada ao usuário caso ele tente cadastrar mais livros e o limite tenha chegado ao fim.
DICA: a função de cadastra livros pode receber como parâmetros de entrada um contador de livros daquela área e o código da área.
Para realizar uma consulta na base de livros cadastrados basta informar os seguintes dados:

Meu código que está rodando porém com defeito é esse aqui:

#include <stdio.h>
#include <stdlib.h>
#include "biblioteca1.h"
#include "biblioteca2.h"
#include "biblioteca3.h"

int total;
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int npaginas, codigo_catalogacao, tipo;}
livro[30];
#define TotalExatas 10
#define TotalBiomedicas 10
#define TotalHumanas 10

int main()
{
    char verificarsim;
    int registradosh=0, registradosbm=0, registradose=0, rodando=1, opcao1, opcao2, existe=0, achado=0, carga, letras, valor1, valor2, valor3;
    total = registradosh + registradosbm + registradose;
    while(rodando==1)
    {
        printf("Menu Principal\n1- Cadastrar os livros\n2- Consultar livros por codigo e area\n3- Cosultar livros doadas em cada area\n4- Alterar Registro\n5- Excluir Registro\n6- Sair\n");
        scanf("%d", &opcao1);
        system("cls");
        switch (opcao1)
        {
            case 1:
                printf("Menu Cadastrar Livros\n1- Cadastrar livros de ciencias humanas\n2- Cadastrar livros de ciencias exatas\n3- Cadastrar livros de ciencias biomedicas\n4- Retornar ao menu\n");
                scanf("%d", &opcao2);
                system("cls");
                switch(opcao2)
                {
                    case 1: if (registradosh < TotalHumanas)
                        {
                            registradosh++;
                            livro[total].tipo = 1;
                            completadados(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                        else
                        {
                            printf("Ja estao cadastrados 10 livros\n");
                        }
                        break;
                    case 2:    if (registradose < TotalExatas)
                        {
                            registradose++;
                            livro[total].tipo = 2;
                            completadados(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                        else
                        {
                            printf("Ja estao cadastrados 10 livros\n");
                        }
                        break;

                    case 3: if (registradosbm < TotalBiomedicas)
                        {
                            registradosbm++;
                            livro[total].tipo = 3;
                            completadados(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);

                        }
                        else
                        {
                            printf("Ja estao cadastrados 10 livros\n");
                        }
                        break;


                    case 4:
                        system("cls");
                        break;
                    default:
                        printf("Opcao Inexistente\n");
                }
                break;
            case 2:
                biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas, valor1, valor2, existe, achado);
                break;
            case 3:
                printf("Digite o codigo da area (1, 2 ou 3)\n");
                scanf("%d", &valor3);
                if (valor3 >= 1 && valor3<= 3)
                {
                    for(total=1; total<=30; total++)
                    {
                        if(livro[total].tipo==valor3 && livro[total].doacao == 's')
                        {
                            biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                    }
                }
                else printf("Area inexistente\n");
                break;
            case 4:
                biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas, valor1, valor2, existe, achado);
                if (existe==1 && achado==1)
                {
                    printf("1- Mudar codigo para catalogacao\n2- Mudar o nome da obra\n3- Mudar nome do autor\n4- Mudar editora do livro\n5- Mudar numero de paginas do livro\n6- Voltar ao menu\n");
                    scanf("%d", &valor3);
                    system("cls");
                    switch(valor3)
                    {
                        case 1:
                            printf("Escreva o codigo para catalogacao:\n");
                            scanf("%d", &livro[carga].codigo_catalogacao);
                            system("cls");
                            break;
                        case 2:
                            printf("Escreva o nome da obra:\n");
                            scanf("%s", &livro[carga].nome_obra[letras]);
                            system("cls");
                            break;
                        case 3:
                            printf("Escreva o nome do autor:\n");
                            scanf("%s", &livro[carga].nome_autor[letras]);
                            system("cls");
                            break;
                        case 4:
                            printf("Escreva o nome da editora do livro:\n");
                            scanf("%s", &livro[carga].editora[letras]);
                            system("cls");
                            break;
                        case 5:
                            printf("Escreva o numero de paginas do livro:\n");
                            scanf("%d", &livro[carga].npaginas);
                            system("cls");
                            break;
                        case 6:
                            break;
                        default:
                            printf("Opcao invalida\n");
                    }
                }
                break;
            case 5:
                biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas, valor1, valor2, existe, achado);
                printf("Confirma a exclusao?\n");
                scanf("%s", &verificarsim);
                if(verificarsim == 's')
                {
                    livro[carga].codigo_catalogacao = 0;
                    switch(livro[carga].tipo)
                    {
                        case 1:
                            registradosh--;
                            livro[carga].doacao = 'n';
                            livro[carga].codigo_catalogacao = 0;
                            livro[carga].tipo = 0;
                            break;
                        case 2:
                            registradose--;
                            livro[carga].doacao = 'n';
                            livro[carga].codigo_catalogacao = 0;
                            livro[carga].tipo = 0;
                            break;
                        case 3:
                            registradosbm--;
                            livro[carga].doacao = 'n';
                            livro[carga].codigo_catalogacao = 0;
                            livro[carga].tipo = 0;
                            break;
                    }
                }
                system("cls");
                break;
            case 6:
                rodando=0;
                break;
            default:
                printf("Opcao Inexistente\n");
        }
    }
    return 0;
}

BIBLIOTECA1.C

#include <stdio.h>
#include <stdlib.h>
int total, letras;
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int npaginas, codigo_catalogacao, tipo;}
livro[30];
int completadados()
{
    printf("Escreva o codigo para catalogacao:\n");
    scanf("%d", &livro[total].codigo_catalogacao);
    printf("Escreva se o livro foi doado (S/N):\n");
    scanf("%s", &livro[total].doacao);
    printf("Escreva o nome da obra:\n");
    scanf("%s", &livro[total].nome_obra[letras]);
    printf("Escreva o nome do autor:\n");
    scanf("%s", &livro[total].nome_autor[letras]);
    printf("Escreva o nome da editora do livro:\n");
    scanf("%s", &livro[total].editora[letras]);
    printf("Escreva o numero de paginas do livro:\n");
    scanf("%d", &livro[total].npaginas);
    return 0;
}

BIBLIOTECA2.C

#include <stdio.h>
#include <stdlib.h>
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int npaginas, codigo_catalogacao, tipo;}
livro[30];
int total, existe, achado, carga, valor1, valor2;
int biblioteca2()
{
    printf("Digite o codigo para catalogacao:\n");
    scanf("%d", &valor1);
    for(total=1; total<30 && existe==0; total++){
        if(valor1 == livro[total].codigo_catalogacao)
        {
            existe=1;

        }
    }
    if(existe==1)
    {
        printf("Digite o codigo da area(1, 2 ou 3)\n");
        scanf("%d", &valor2);
        switch(valor2)
        {
            case 1:
            for(total=1; total<=30 && achado==0; total++)
            {
                if(valor1 == livro[total].codigo_catalogacao && livro[total].tipo == 1)
                {
                    biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                    achado=1;
                    carga=total;

                }
            }
            break;
            case 2:
            for(total=1; total<=30 && achado==0; total++)
            {
                if(valor1 == livro[total].codigo_catalogacao && livro[total].tipo == 2)
                {
                    biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                    achado=1;
                    carga=total;
                }
            }
            break;
            case 3:
            for(total=1; total<=30 && achado==0; total++)
            {
                if(valor1 == livro[total].codigo_catalogacao && livro[total].tipo == 3)
                {
                    biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                    achado=1;
                    carga=total;
                }
            }
            break;
            default:
            printf("Area inexistente\n");
        }
        if(achado==0)
        {
            printf("Nao existe nenhum livro de codigo %d na area %d\n", valor1, valor2);
        }
    }
    else printf("O codigo digitado nao esta registrado no sistema\n");
    return 0;

}

BIBLIOTECA3.C

 

#include <stdio.h>
#include <stdlib.h>
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int npaginas, codigo_catalogacao, tipo;}
livro[30];
int total;
int biblioteca3()
{
    printf("Codigo para catalogacao: %d\n", livro[total].codigo_catalogacao);
    printf("Livro doado: %c\n", livro[total].doacao);
    printf("Nome da obra: %s\n", livro[total].nome_obra);
    printf("Nome do autor: %s\n", livro[total].nome_autor);
    printf("Editora do livro: %s\n", livro[total].editora);
    printf("Numero de paginas do livro: %d\n",livro[total].npaginas);
    system ("cls");
    return 0;
}

Eu consigo cadastrar o livro apenas quanto não coloco espaço entre as palavras, só que depois não estou cosneguindo realizar a consulta, alguém que colocar o programa para rodar verá exatamente o que estou dizendo, se alguém puder me ajudar, obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma olhada primeiro em como vc está tentando modularizar o programa... Tem 3 headers de biblioteca ali, com a mesma definição de tipo de livro repetida em cada um e dentro do próprio arquivo principal (contendo o main). Primeiro organize as ideias antes de codificar.

 

 

 

Eu consigo cadastrar o livro apenas quanto não coloco espaço entre as palavras, só que depois não estou cosneguindo realizar a consulta,

 

Porque o delimitador do scanf p/ dados é o espaço em branco. Use fgets.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Isis, consertei aqui, agora tudo está rodando, só que ainda não consegui resolver isso do espaço entre as palavras. Infelizmente não sei usar o "fgets", podia me indicar algum material que me ajude ou me explicar mais detalhadamente como proceder? Obrigado.

 

O código ficou assim:

int total;
#include <stdio.h>
#include <stdlib.h>
#include "biblioteca1.h"
#include "biblioteca3.h"
#include "biblioteca2.h"
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int npaginas, codigo_catalogacao, tipo;
}
livro[30];
#define TotalExatas 10
#define TotalBiomedicas 10
#define TotalHumanas 10
#define padrao "inexistente"
int main()
{
    char verificarsim;
    int registradosh=0, registradosbm=0, registradose=0, rodando=1, opcao1, opcao2, existe=0, achado=0, carga, letras, valor1, valor2, valor3;
    while(rodando==1)
    {
        printf("Menu Principal\n1- Cadastrar os livros\n2- Consultar livros por codigo e area\n3- Cosultar livros doadas em cada area\n4- Alterar Registro\n5- Excluir Registro\n6- Sair\n");
        scanf("%d", &opcao1);
        system("cls");
        switch (opcao1)
        {
            case 1:
                printf("Menu Cadastrar Livros\n1- Cadastrar livros de ciencias humanas\n2- Cadastrar livros de ciencias exatas\n3- Cadastrar livros de ciencias biomedicas\n4- Retornar ao menu\n");
                scanf("%d", &opcao2);
                system("cls");
                switch(opcao2)
                {
                    case 1: if (registradosh < TotalHumanas)
                        {
                            registradosh++;
                            total = registradosh + registradosbm + registradose;
                            livro[total].tipo = 1;
                            completadados(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                        else
                        {
                            printf("Ja estao cadastrados 10 livros\n");
                        }
                        break;
                    case 2:    if (registradose < TotalExatas)
                        {
                            registradose++;
                            total = registradosh + registradosbm + registradose;
                            livro[total].tipo = 2;
                            completadados(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                        else
                        {
                            printf("Ja estao cadastrados 10 livros\n");
                        }
                        break;

                    case 3: if (registradosbm < TotalBiomedicas)
                        {
                            registradosbm++;
                            total = registradosh + registradosbm + registradose;
                            livro[total].tipo = 3;
                            completadados(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                        else
                        {
                            printf("Ja estao cadastrados 10 livros\n");
                        }
                        break;
                    case 4:
                        break;
                    default:
                        printf("Opcao Inexistente\n");
                }
                system("cls");
                break;
            case 2:
                biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas, valor1, valor2, existe, achado);
                break;
            case 3:
                printf("Digite o codigo da area (1, 2 ou 3)\n");
                scanf("%d", &valor3);
                if (valor3 >= 1 && valor3<= 3)
                {
                    for(total=1; total<=30; total++)
                    {
                        if(livro[total].tipo==valor3 && (livro[total].doacao == 's' || livro[total].doacao == 'S'))
                        {
                            biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                        }
                    }
                }
                else printf("Area inexistente\n");
                break;
            case 4:
                biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas, valor1, valor2, existe, achado);
                if (existe==1 && achado==1)
                {
                    printf("1- Mudar codigo para catalogacao\n2- Mudar o nome da obra\n3- Mudar nome do autor\n4- Mudar editora do livro\n5- Mudar numero de paginas do livro\n6- Voltar ao menu\n");
                    scanf("%d", &valor3);
                    system("cls");
                    switch(valor3)
                    {
                        case 1:
                            printf("Escreva o codigo para catalogacao:\n");
                            scanf("%d", &livro[carga].codigo_catalogacao);
                            system("cls");
                            break;
                        case 2:
                            printf("Escreva o nome da obra:\n");
                            scanf("%s", &livro[carga].nome_obra[letras]);
                            system("cls");
                            break;
                        case 3:
                            printf("Escreva o nome do autor:\n");
                            scanf("%s", &livro[carga].nome_autor[letras]);
                            system("cls");
                            break;
                        case 4:
                            printf("Escreva o nome da editora do livro:\n");
                            scanf("%s", &livro[carga].editora[letras]);
                            system("cls");
                            break;
                        case 5:
                            printf("Escreva o numero de paginas do livro:\n");
                            scanf("%d", &livro[carga].npaginas);
                            system("cls");
                            break;
                        case 6:
                            break;
                        default:
                            printf("Opcao invalida\n");
                    }
                }
                break;
            case 5:
                biblioteca3(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas, valor1, valor2, existe, achado);
                printf("Confirma a exclusao?\n");
                scanf("%s", &verificarsim);
                if(verificarsim == 's' || verificarsim== 'S')
                {
                    livro[carga].codigo_catalogacao = 0;
                    switch(livro[carga].tipo)
                    {
                        case 1:
                            registradosh--;
                            livro[carga].doacao = 'n';
                            livro[carga].codigo_catalogacao = 0;
                            livro[carga].tipo = 0;
                            break;
                        case 2:
                            registradose--;
                            livro[carga].doacao = 'n';
                            livro[carga].codigo_catalogacao = 0;
                            livro[carga].tipo = 0;
                            break;
                        case 3:
                            registradosbm--;
                            livro[carga].doacao = 'n';
                            livro[carga].codigo_catalogacao = 0;
                            livro[carga].tipo = 0;
                            break;
                    }
                }
                system("cls");
                break;
            case 6:
                rodando=0;
                break;
            default:
                printf("Opcao Inexistente\n");
        }
    }
    return 0;
}

BIBLIOTECA1.C

#include <stdio.h>
#include <stdlib.h>
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int codigo_catalogacao, npaginas, tipo;}
livro[30];
int total, letras;
int completadados()
{
    printf("Escreva o codigo para catalogacao:\n");
    scanf("%d", &livro[total].codigo_catalogacao);
    printf("Escreva se o livro foi doado (S/N):\n");
    scanf("%s", &livro[total].doacao);
    printf("Escreva o nome da obra:\n");
    scanf("%s", &livro[total].nome_obra[letras]);
    printf("Escreva o nome do autor:\n");
    scanf("%s", &livro[total].nome_autor[letras]);
    printf("Escreva o nome da editora do livro:\n");
    scanf("%s", &livro[total].editora[letras]);
    printf("Escreva o numero de paginas do livro:\n");
    scanf("%d", &livro[total].npaginas);
    return 0;
}

BIBLIOTECA2.C
#include <stdio.h>
#include <stdlib.h>
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int codigo_catalogacao, npaginas, tipo;}
livro[30];
int total;
int biblioteca2()
{
    printf("Codigo para catalogacao: %d\n", livro[total].codigo_catalogacao);
    printf("Livro doado: %c\n", livro[total].doacao);
    printf("Nome da obra: %s\n", livro[total].nome_obra);
    printf("Nome do autor: %s\n", livro[total].nome_autor);
    printf("Editora do livro: %s\n", livro[total].editora);
    printf("Numero de paginas do livro: %d\n",livro[total].npaginas);
    return 0;
}

BIBLIOTECA3.C

#include <stdio.h>
#include <stdlib.h>
#include "biblioteca2.h"
struct
{
    char doacao, nome_autor[50], editora[50], nome_obra[50];
    int codigo_catalogacao, npaginas, tipo;}
livro[30];
int total, existe, achado, carga, valor1, valor2;
int biblioteca3()
{
    printf("Digite o codigo para catalogacao:\n");
    scanf("%d", &valor1);
    for(total=1; total<30 && existe==0; total++){
        if(valor1 == livro[total].codigo_catalogacao)
        {
            existe=1;

        }
    }
    if(existe==1)
    {
        printf("Digite o codigo da area(1, 2 ou 3)\n");
        scanf("%d", &valor2);
        switch(valor2)
        {
            case 1:
            for(total=1; total<=30 && achado==0; total++)
            {
                if(valor1 == livro[total].codigo_catalogacao && livro[total].tipo == 1)
                {
                    biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                    achado=1;
                    carga=total;

                }
            }
            break;
            case 2:
            for(total=1; total<=30 && achado==0; total++)
            {
                if(valor1 == livro[total].codigo_catalogacao && livro[total].tipo == 2)
                {
                    biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                    achado=1;
                    carga=total;
                }
            }
            break;
            case 3:
            for(total=1; total<=30 && achado==0; total++)
            {
                if(valor1 == livro[total].codigo_catalogacao && livro[total].tipo == 3)
                {
                    biblioteca2(livro[total].codigo_catalogacao, livro[total].doacao, livro[total].nome_obra, livro[total].nome_autor, livro[total].editora, livro[total].npaginas);
                    achado=1;
                    carga=total;
                }
            }
            break;
            default:
            printf("Area inexistente\n");
        }
        if(achado==0)
        {
            printf("Nao existe nenhum livro de codigo %d na area %d\n", valor1, valor2);
        }
    }
    else printf("O codigo digitado nao esta registrado no sistema\n");
    return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Digite fgets no google.

 

Cara, sério... O que é "biblioteca3"? O que "biblioteca2" faz? Se eu tiver que ler o código inteiro p/ entender o propósito de uma função, é porque o nome dela não diz nada de significativo. Estou falando sério: reescreva esse código inteiro.

 

- Divisão desnecessária da API (3 headers)

- Nomes não significativos p/ funções

- Acúmulo de lógica de negócio com entrada de dados simples

- Várias chamadas ao system

- Repetição desnecessária de tipo de dados

- Variáveis globais

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.