3
I have a work at the college to do that consists of creating a structure of "Library Register"(cataloging code, name of the work, name of the author, publisher, donated works of each area, number of pages) and menu, with options "Register book, search by cataloging code and area, display donated books, change a register and delete a register". The books should be divided into 3 areas( human, exact and biomedical) and each area houses a maximum of 30 books. Ah, 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.
-The part of struct q is char is not changed, when the option is selected
-I have no idea how to delete a book entry ( in 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");
}
You even posted a call for help with better work than people usually do. But it seems that much of the code posted is not necessary for the problem. See: http://answall.com/help/mcve. In addition it seems to me that you have 3 unrelated problems. This would possibly make the question too broad. Perhaps it would be nice to separate the 3 problems into different questions. It would be easier to create the minimal, fully verifiable code and help people to help you objectively. Let’s see other opinions on this.
– Maniero
Thank you so much, I came here today and I’m still learning...
– yasser
@Welcome to Stackoverflow in English! Although your answer has been closed, I see you got off to a good start. Feel free to post new questions to help you solve specific problems. Just avoid questions "3 in 1" and with lots of code as it makes it difficult for those who will answer.
– utluiz