-1
I created 2 functions, a menu function and another incluirRegistroDeObras
which can be enabled by the menu. However. By enabling the incluirRegistroDeObras
, i can perform the function, but at the end of it the program closes and does not return to the menu.
I have tried the solution proposed in the question How to return to the menu after performing function?, but it didn’t work.
Follow the problem statement and the code below:
José, university professor of Architecture and Urbanism, has in his office boxes and more boxes of books and magazines, which are gradually being catalogued by his secretary Vanessa. Vanessa is cataloging in an electronic spreadsheet the main data of Books and Magazines, such as (title of the work, edition, name of the author, publisher, isbn, number of copies, box where the work is stored and year).
The purpose of the map activity is to develop a small system to control where the architect’s works are stored. To build this system, you must use the C language, storing the data in a text file.
The system to be built will need to meet the functional requirements below:
Have your ID (RA-Name-Course)
Have an option menu.
2.1. Include registration of works.
2.2. List all books.
2.3. List all magazines.
2.4. List works by box.
#include <stdlib.h>
#include <stdio.h>
// constantes com os dados do aluno
#define nome "Alexandre Guerreiro";
#define RA "19110675-5";
//Prototipacao (definicao do prototipo das funcoes que serao utilizadas)
//O sistema a ser construído necessitará atender aos requisitos funcionais abaixo:
//
//1 - Possuir a sua identificação (RA-Nome-Curso)
//2 - Possuir um menu de opção.
//2.1 - Incluir o registro das obras.
//2.2 - Listar todos os livros.
//2.3 - Listar todas as revistas.
//2.4- Listar as obras por caixa.
void menuOpcao();
void incluirRegistroDeObras();
void listarLivros();
void listarRevistas();
void listasObrasPorCaixa();
int main() {
menuOpcao();
}
// estrutura obra(para livro e revistas). Deve conter:
// título da obra, edição, nome do autor, editora, isbn, quantidade de exemplares, caixa onde a obra está armazenada e ano.
typedef struct obra {
int tipo; //aqui sera definido se a obra é um livro ou revista
char autor[500];
char titulo[500];
char editora[500];
int edicao;
int isbn;
int qtdExemplares;
int anoLancamento;
struct obra *anterior;
struct obra *seguinte;
} obra;
obra *obras;
// estrutura da caixa onde sera armazenado os livros e revistas
typedef struct caixa {
int capacidade;
int qtdObrasArmazenadas;
obra *inicio;
obra *fim;
} caixa;
caixa *caixa1;
caixa *caixa2;
caixa *caixa3;
void incluirRegistroDeObras() {
obra *novaObra;
char getBuffer;
novaObra = malloc(sizeof(obra));
printf("\nRevista ou Livro? (1 para revista e 2 para livro): ");
scanf("%d", &novaObra->tipo);
scanf("%c", &getBuffer);
printf("%d",novaObra->tipo);
printf("\nTítulo da obra: ");
fgets(novaObra->titulo,sizeof novaObra->titulo,stdin);
printf("%s",novaObra->titulo);
printf("\nAutor da obra: ");
fgets(novaObra->autor,sizeof novaObra->autor,stdin);
printf("%s",novaObra->autor);
printf("\nEditora da obra: ");
fgets(novaObra->editora,sizeof novaObra->editora,stdin);
printf("%s",novaObra->editora);
printf("\nNúmero da edicao da obra: ");
// fgets(novaObra->edicao,sizeof novaObra->edicao,stdin);
scanf("%d", &novaObra->edicao);
scanf("%c", &getBuffer);
printf("%d",novaObra->edicao);
printf("\nNúmero ISBN: ");
// fgets(novaObra->isbn,sizeof novaObra->isbn,stdin);
scanf("%d", &novaObra->isbn);
scanf("%c", &getBuffer);
printf("%d",novaObra->isbn);
printf("\nQuantidade de exemplares disponíveis: ");
// fgets(novaObra->qtdExemplares,sizeof novaObra->qtdExemplares,stdin);
scanf("%d", &novaObra->qtdExemplares);
scanf("%c", &getBuffer);
printf("%d",novaObra->qtdExemplares);
printf("\nAno de lancamento: ");
// fgets(novaObra->anoLancamento,sizeof novaObra->anoLancamento,stdin);
scanf("%d", &novaObra->anoLancamento);
scanf("%c", &getBuffer);
printf("%d",novaObra->anoLancamento);
if (caixa1->inicio == NULL) {
caixa1->inicio = novaObra;
} else {
caixa1->fim->anterior = caixa1->fim;
caixa1->fim = novaObra;
caixa1->qtdObrasArmazenadas++;
}
}
void listarLivros() {
caixa *tmp = caixa1;
if (caixa1->qtdObrasArmazenadas > 0) {
for (int i = 0; i < caixa1->qtdObrasArmazenadas; i++) {
printf("%c", tmp->inicio->titulo);
tmp->inicio = tmp->inicio->seguinte;
}
}
}
void menuOpcao() {
int opcao = 0;
do {
printf("1 - Incluir o registro das obras.\n");
printf("2 - Listar todos os livros.\n");
printf("3 - Listar todas as revistas.\n");
printf("4 - Listar as obras por caixa.\n");
printf("5 - Sair.\n");
printf("Opcao: ");
scanf("%d",&opcao);
getchar();
system("cls || clear");
switch(opcao) {
case 1:
incluirRegistroDeObras();
break;
case 2:
listarLivros();
break;
case 3:
// listarRevistas();
break;
case 4:
// listasObrasPorCaixa();
break;
case 5:
printf("\nAté a proxima!");
break;
default:
printf("\nOpcão inválida!\n");
break;
}
} while (opcao!=5);
}
Where are you declaring box 1? And what is the definition of type work?
– aviana
@OGRO2077 edited the question by placing the problem statement and the complete code to be better understood.
– Alexandre Guerreiro
Actually this app is not finished, there are several errors including in the malloc variable where I am not able to finish the same, besides this there are other.
– ClaudioAlves