Skip to content

Instantly share code, notes, and snippets.

@Tsugami
Created July 7, 2022 00:07
Show Gist options
  • Save Tsugami/7c047f53b1d27cedd89807897c926d60 to your computer and use it in GitHub Desktop.
Save Tsugami/7c047f53b1d27cedd89807897c926d60 to your computer and use it in GitHub Desktop.
// Atividade 1 do livro - Pg126
// O problema consiste em elaborar um cadastro para 20 livros, contendo as seguintes informações: código, título, autor, área, ano e editora. Desenvolver um menu com as seguintes opções:
// 1. Cadastrar os livros.
// 2. Imprimir as informações dos livros.
// 3. Pesquisar livros por código.
// 4. Ordenar os livros por ano.
// 5. Sair do programa.
// No Quadro 11, temos o programa para o problema descrito. Na solução, empregamos o conceito de struct para criar a ficha do livro, vetor de struct para armazenar as informações dos 20 livros,
// o método de pesquisa sequencial para efetuar a busca de um livro por código e o método de ordenação da bolha para classificar os livros de acordo com o ano.
#include <stdio.h>
#include <stdlib.h>
struct Book
{
int code, year;
char title[15];
};
int main()
{
int running = 1, page = 0, next_inserted_book_index = 0;
struct Book books[6];
do
{
switch (page)
{
case 0: // home page
printf("\n1. Cadastrar os livros\n2. Imprimir as informações dos livros\n3. Pesquisar livros por código.\n4. Ordenar os livros por ano.\n5. Sair do programa.\n-> ");
int input = 0;
scanf("%d", &input);
system("clear");
if (input > 5 || input < 1)
{
printf("opção invalida, tente normalmente...\n\n");
}
else
{
page = input;
}
break;
case 1: // register book
if (next_inserted_book_index == 19)
{
system("clear");
printf("Você não pode registar mais livros.\n\n");
page = 0;
}
else
{
printf("Cadastre um livro: \n\nTítulo: ");
scanf("%s", &books[next_inserted_book_index].title);
printf("\nAno: ");
scanf("%d", &books[next_inserted_book_index].year);
printf("\nCódigo: ");
scanf("%d", &books[next_inserted_book_index].code);
system("clear");
printf("Livro %d registrado!", books[next_inserted_book_index].code);
next_inserted_book_index++;
page = 0;
}
break;
case 2: // list books
if (next_inserted_book_index == 0)
{
printf("Nenhum livro foi registrado ainda.\n\n");
page = 0;
}
else
{
int i = 0;
for (i = 0; i < 20; i++)
{
if (i == next_inserted_book_index)
{
break;
}
printf("[%d] - %s, %d\n", books[i].code, books[i].title, books[i].year);
}
// alternativa temporaria do system('pause')
int input;
printf("\n\nDigite 0 para voltar.\n\n-> ");
scanf("%d", &input);
page = 0;
}
break;
case 3: // search by code
if (next_inserted_book_index == 0)
{
printf("Nenhum livro foi registado ainda.\n\n");
page = 0;
}
else
{
int code_to_search;
printf("Digite o código do livro que deseja procurar: ");
scanf("%d", &code_to_search);
int i = 0;
for (i = 0; i < 20; i++)
{
if (books[i].code == code_to_search)
{
printf("\nLivro encontrado: %s, %d\n\n", books[i].title, books[i].year);
break;
}
else if (i == next_inserted_book_index)
{
printf("\nLivro não encontrado.\n\n");
break;
}
}
page = 0;
}
break;
case 4:
{
int i = 0;
int cur = 0;
while (cur < next_inserted_book_index)
{
if (cur == i)
{
i++;
}
else if (books[cur].year > books[i].year)
{
struct Book aux = books[cur];
books[cur] = books[i];
books[i] = aux;
}
else if ((i + 1) >= next_inserted_book_index)
{
i = 0;
cur++;
}
else
{
i++;
}
}
printf("\nLivros ordenados por ano! Use 3 para ver.\n\n");
page = 0;
break;
}
default:
printf("página desconhecida, volte para o ínicio...\n\n");
page = 0;
break;
}
} while (running != 0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment