I have a job of the faculty to do that is to create a struct of "Library Register" (cataloging code, name of the work, name of the author, publisher, donated works of each area, number of pages) with options of "Register book, search for cataloging code and area, display donated books, change a register and delete a record". The books should be divided into 3 areas (human, exact and biomedical) and each area houses a maximum of 30 books. Oh, and main has to be as small as possible, using functions for everything. But I have some problems ...
-When I print the books, some information does not appear or is exchanged with other fields.
-A part of struct q is char is not changed when option is selected
- I do not have the slightest idea how to delete a bookmark (in this case a position in the array)
MAIN.C
//Grupo #x: Lucas Machado, Luís Felipe Zaban, Yasser Guimaraes.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "menus.h"
#define SAIR 6
struct Cadastro
{
int Codigo_area;
int Codigo_de_catalogacao;
char Doacao;
char Nome_obra[50];
char Nome_autor[50];
char Editora[50];
int Num_paginas;
} livro_exatas[10],livro_humanas[10],livro_biomedicas[10];
int main()
{
int op;
op = Menu_principal();
while (op < SAIR)
{
switch(op)
{
case 1:
Menu_cadastra_livros();
system("cls");
break;
case 2:
Consulta_por_area();
system("cls");
break;
case 3:
verifica_doacao();
system("cls");
break;
case 4:
system("cls");
printf("\n***Alterar Dados***\n\n");
Menu_Alteracao();
}
op = Menu_principal();
}
return 0;
}
MENUS.C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "funcoes.h"
int Menu_principal()
{
int opcao_principal;
printf("\nMENU PRINCIPAL\n\n\n");
printf(" 1 - CADASTRAR LIVRO\n");
printf(" 2 - CONSULTAR OBRA POR CODIGO E AREA\n");
printf(" 3 - CONSULTAR OBRA DOADAS DE CADA AREA\n");
printf(" 4 - ALTERAR UM REGISTRO\n");
printf(" 5 - EXCLUIR UM REGISTRO\n");
printf(" 6 - SAIR\n\n");
printf("Digite sua opcao: ");
scanf("%d", &opcao_principal);
system("cls");
return opcao_principal;
}
int Menu_cadastra_livros()
{
system("cls");
int opcao;
printf("\nMENU DE CADASTRO\n\n\n");
printf(" 1 - LIVRO DE CIENCIAS EXATAS\n");
printf(" 2 - LIVRO DE CIENCIAS HUMANAS\n");
printf(" 3 - LIVRO DE CIENCIAS BIOMEDICAS\n");
printf(" 4 - RETORNAR AO MENU PRINCIPAL\n\n");
printf("Digite sua opcao: ");
scanf("%d", &opcao);
while(opcao<4)
{
switch(opcao)
{
case 1:
Cadastro_livro_EXATAS();
system("cls");
break;
case 2:
Cadastro_livro_HUMANAS();
system("cls");
break;
case 3:
Cadastro_livro_BIOMEDICAS();
system("cls");
break;
case 4:
return 0;
break;
}
return(opcao);
}
return 0;
}
int Menu_Alteracao()
{
int opcao_alt;
printf("Selecione uma opcao: \n");
printf(" 1 - Alterar Codigo de Catalogacao\n");
printf(" 2 - Alterar Nome da Obra\n");
printf(" 3 - Alterar Nome do Autor\n");
printf(" 4 - Alterar Editora\n");
printf(" 5 - Alterar Numero de Paginas\n");
printf(" 6 - Retornar ao Menu anterior\n");
printf("Digite sua opcao: ");
scanf("%d", &opcao_alt);
system("cls");
while(opcao_alt<6)
{
switch(opcao_alt)
{
case 1:
altera_codigo_de_catalogacao();
break;
case 2:
altera_nome_da_obra();
break;
case 3:
altera_nome_do_autor();
break;
case 4:
altera_editora();
break;
case 5:
altera_paginas();
break;
}
return (opcao_alt);
}
return 0;
}
FUNCTIONS.C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int exatas=0,humanas=0,biomedicas=0,contador_e=0, contador_h=0,contador_b=0;
struct Cadastro
{
int Codigo_area;
int Codigo_de_catalogacao;
char Doacao;
char Nome_obra[50];
char Nome_autor[50];
char Editora[50];
int Num_paginas;
} livro_exatas[10],livro_humanas[10],livro_biomedicas[10];
int Cadastro_livro_EXATAS()
{
if(contador_e<10)
{
livro_exatas[exatas].Codigo_area=1;
printf("\nDigite o codigo de catalogacao: \n");
scanf("%d",&livro_exatas[exatas].Codigo_de_catalogacao);
printf("Digite os dados de aquisicao da obra-doado(S/N): \n");
scanf("%s",&livro_exatas[exatas].Doacao);
printf("Digite o nome da obra: \n");
scanf("%s",&livro_exatas[exatas].Nome_obra[50]);
printf("Digite o nome do autor: \n");
scanf("%s",&livro_exatas[exatas].Nome_autor[50]);
printf("Digite a editora: \n");
scanf("%s",&livro_exatas[exatas].Editora[50]);
printf("Digite o numero de paginas: \n");
scanf("%d",&livro_exatas[exatas].Num_paginas);
contador_e ++;
exatas++;
return 0;
}
else
{
printf("\nLimite de livros cadastrados atingido!\n");
system("pause");
return 0;
}
}
int Cadastro_livro_HUMANAS()
{
if(contador_h<10)
{
livro_humanas[humanas].Codigo_area=2;
printf("\nDigite o codigo de catalogacao: \n");
scanf("%d",&livro_humanas[humanas].Codigo_de_catalogacao);
printf("Digite os dados de aquisicao da obra-doado(S/N): \n");
scanf("%s",&livro_humanas[humanas].Doacao);
printf("Digite o nome da obra: \n");
scanf("%s",&livro_humanas[humanas].Nome_obra[50]);
printf("Digite o nome do autor: \n");
scanf("%s",&livro_humanas[humanas].Nome_autor[50]);
printf("Digite a editora: \n");
scanf("%s",&livro_humanas[humanas].Editora[50]);
printf("Digite o numero de paginas: \n");
scanf("%d",&livro_humanas[humanas].Num_paginas);
contador_h ++;
humanas++;
return 0;
}
else
{
printf("\nLimite de livros cadastrados atingido!\n");
system("pause");
return 0;
}
}
int Cadastro_livro_BIOMEDICAS()
{
if(contador_b<10)
{
livro_biomedicas[biomedicas].Codigo_area=3;
printf("\nDigite o codigo de catalogacao: \n");
scanf("%d",&livro_biomedicas[biomedicas].Codigo_de_catalogacao);
printf("Digite os dados de aquisicao da obra-doado(S/N): \n");
scanf("%s",&livro_biomedicas[biomedicas].Doacao);
printf("Digite o nome da obra: \n");
scanf("%s",&livro_biomedicas[biomedicas].Nome_obra[50]);
printf("Digite o nome do autor: \n");
scanf("%s",&livro_biomedicas[biomedicas].Nome_autor[50]);
printf("Digite a editora: \n");
scanf("%s",&livro_biomedicas[biomedicas].Editora[50]);
printf("Digite o numero de paginas: \n");
scanf("%d",&livro_biomedicas[biomedicas].Num_paginas);
contador_b ++;
biomedicas++;
return 0;
}
else
{
printf("\nLimite de livros cadastrados atingido!\n");
system("pause");
return 0;
}
}
void Consulta_por_area()
{
int i, a, b,cont=0;
printf("\n\nDigite o Codigo de area da obra:\n [1] para exatas\n [2] para humanas\n [3] para biomedicas \n Sua opcao: ");
scanf("%d",&a);
printf("\n\nDigite o Codigo de Catalogacao: \n");
scanf("%d",&b);
for(i=0; i<10; i++)
{
switch(a)
{
case 1:
if(b==livro_exatas[i].Codigo_de_catalogacao)
{
system("cls");
imprime_dados_exatas(i);
}
else
{
cont++;
};
break;
case 2:
if(b==livro_humanas[i].Codigo_de_catalogacao)
{
system("cls");
imprime_dados_humanas(i);
}
else
{
cont++;
};
break;
case 3:
if(b==livro_biomedicas[i].Codigo_de_catalogacao)
{
system("cls");
imprime_dados_biomedicas(i);
}
else
{
cont++;
};
break;
}
}
if(cont==10)
{
system("cls");
printf("\nLivro nao encontrado!\n");
}
system("pause");
}
int imprime_dados_exatas(int i)
{
printf("Codigo de area: %d\n",livro_exatas[i].Codigo_area);
printf("Codigo de catalogacao: %d\n",livro_exatas[i].Codigo_de_catalogacao);
printf("Doacao: %c\n",livro_exatas[i].Doacao);
printf("Nome da obra: %s\n",livro_exatas[i].Nome_obra);
printf("Nome do autor: %s\n",livro_exatas[i].Nome_autor);
printf("Editora: %s\n",livro_exatas[i].Editora);
printf("Numero de paginas: %d\n\n\n",livro_exatas[i].Num_paginas);
return 0;
}
int imprime_dados_humanas(int i)
{
printf("Codigo de area: %d\n",livro_humanas[i].Codigo_area);
printf("Codigo de catalogacao: %d\n",livro_humanas[i].Codigo_de_catalogacao);
printf("Doacao: %c\n",livro_humanas[i].Doacao);
printf("Nome da obra: %s\n",livro_humanas[i].Nome_obra);
printf("Nome do autor: %s\n",livro_humanas[i].Nome_autor);
printf("Editora: %s\n",livro_humanas[i].Editora);
printf("Numero de paginas: %d\n\n\n",livro_humanas[i].Num_paginas);
return 0;
}
int imprime_dados_biomedicas(int i)
{
printf("\n\n\nCodigo de area: %d\n",livro_biomedicas[i].Codigo_area);
printf("Codigo de catalogacao: %d\n",livro_biomedicas[i].Codigo_de_catalogacao);
printf("Doacao: %c\n",livro_biomedicas[i].Doacao);
printf("Nome da obra: %s\n",livro_biomedicas[i].Nome_obra);
printf("Nome do autor: %s\n",livro_biomedicas[i].Nome_autor);
printf("Editora: %s\n",livro_biomedicas[i].Editora);
printf("Numero de paginas: %d\n\n\n",livro_biomedicas[i].Num_paginas);
return 0;
}
void verifica_doacao()
{
int i,j,cont=0;
for(j=0; j<3; j++)
{
for(i=0; i<10; i++)
{
switch(j)
{
case 1:
if('s'==livro_exatas[i].Doacao)
{
printf("\nObra doadas da area de ciencias exatas\n\n\n");
imprime_dados_exatas(i);
}
else
{
cont++;
}
case 2:
if('s'==livro_humanas[i].Doacao)
{
printf("\nObra doadas da area de ciencias humanas\n\n\n");
imprime_dados_humanas(i);
}
else
{
cont++;
}
case 3:
if('s'==livro_biomedicas[i].Doacao)
{
printf("\nObra doadas da area de ciencias biomedicas\n\n\n");
imprime_dados_biomedicas(i);
}
else
{
cont++;
}
}
}
}
if(cont==30)
{
printf("\nNenhum livro doado!\n");
system("cls");
}
system("pause");
}
int altera_registro()
{
int i, a, b,cont=0;
printf("\n\nDigite o Codigo de area da obra:\n [1] para exatas\n [2] para humanas\n [3] para biomedicas \n Sua opcao: ");
scanf("%d",&a);
printf("\n\nDigite o Codigo de Catalogacao: \n");
scanf("%d",&b);
for(i=0; i<10; i++)
{
switch(a)
{
case 1:
if(b==livro_exatas[i].Codigo_de_catalogacao)
{
system("cls");
printf("\nLIVRO SELECIONADO: \n");
imprime_dados_exatas(i);
return i;
}
else
{
cont++;
};
break;
case 2:
if(b==livro_humanas[i].Codigo_de_catalogacao)
{
system("cls");
printf("\nLIVRO SELECIONADO: \n");
imprime_dados_humanas(i);
return i;
}
else
{
cont++;
};
break;
case 3:
if(b==livro_biomedicas[i].Codigo_de_catalogacao)
{
system("cls");
printf("\nLIVRO SELECIONADO: \n");
imprime_dados_biomedicas(i);
return i;
}
else
{
cont++;
};
break;
}
}
if(cont==10)
{
printf("\nLivro nao encontrado!\n");
system("cls");
}
return 0;
}
void altera_codigo_de_catalogacao()
{
int novo_codigo, posicao;
posicao=altera_registro();
printf("\nDigite o novo Codigo de Catalogacao: ");
scanf("%d", &novo_codigo);
livro_exatas[posicao].Codigo_de_catalogacao=novo_codigo;
system("cls");
}
void altera_nome_da_obra()
{
char novo_nome[50];
int posicao;
posicao=altera_registro();
printf("\nDigite o novo Nome da Obra: ");
scanf("%s", &novo_nome[50]);
livro_exatas[posicao].Nome_obra[50]=novo_nome[50];
system("cls");
}
void altera_nome_do_autor()
{
char novo_autor[50];
int posicao;
posicao=altera_registro();
printf("\nDigite o novo Nome do Autor: ");
scanf("%s", &novo_autor[50]);
livro_exatas[posicao].Nome_autor[50]=novo_autor[50];
system("cls");
}
void altera_editora()
{
char nova_editora[50];
int posicao;
posicao=altera_registro();
printf("\nDigite a nova Editora: ");
scanf("%s", &nova_editora[50]);
strcpy(livro_exatas[posicao].Editora[50],nova_editora[50]);
system("cls");
}
void altera_paginas()
{
int novo_paginas, posicao;
posicao=altera_registro();
printf("\nDigite o novo Numero de Paginas: ");
scanf("%d", &novo_paginas);
livro_exatas[posicao].Num_paginas=novo_paginas;
system("cls");
}