Logo Passei Direto
Buscar

01 David Tobias Nunes - [APA - AB3] - Estrutura de dados (Tecnologia em ADS)

User badge image
Felipe Smitch

em

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

1 
 
AB3 - ATIVIDADE PRÁTICA DE APRENDIZAGEM 
Curso: Tecnologia em Análise e Desenvolvimento de Sistemas 
Disciplina: Estrutura de Dados 
Atividade: APA – Atividade Prática de Aprendizagem (AB3) 
Discente: David Tobias Nunes | RA: 286522 
 
Enunciado: 
As estruturas de dados definem a organização, métodos de acesso e opções de 
processamento para coleções de itens de informação manipulados por determinado 
programa. Elas ajudam a estruturar, organizar, armazenar e acessar os dados. 
Considere o seguinte problema: 
Em determinado momento, você percebeu que guardou todos os livros que leu e que 
ganhou ao longo de sua vida. Com a intenção de organizá-los, criou um programa e 
inseriu os dados de todos os seus livros. 
Passados alguns anos, você resolveu doar alguns livros e com isso veio a necessidade de 
atualizar o seu programa, removendo os que foram doados. Para tanto, vai 
precisar escrever o código para removê-los. 
 
Algoritmo 
Algoritmo: Sistema de Gerenciamento de Biblioteca 
Estrutura de Dados: 
1. Definir estrutura Livro com campos: 
o id (inteiro) 
o titulo (string) 
o autor (string) 
o ano (inteiro) 
Constantes: 
• MAX_LIVROS = 100 (limite máximo de livros) 
• ARQUIVO_BIBLIOTECA = "Database_bibliotecaDavid.csv" 
Funções Principais: 
1. Função configurarAcentuacao(): 
o Configura o suporte a caracteres em português 
o Define codificação de caracteres para entrada e saída 
2 
 
2. Função carregarLivros(): 
o Objetivo: Carregar livros de um arquivo CSV 
o Passos: 
a. Abrir arquivo de biblioteca 
b. Pular linha de cabeçalho 
c. Ler linhas do arquivo 
d. Converter dados para estrutura Livro 
e. Armazenar livros em vetor 
f. Retornar total de livros carregados 
3. Função salvarLivros(): 
o Objetivo: Salvar livros no arquivo CSV 
o Passos: 
a. Abrir arquivo para escrita 
b. Escrever cabeçalho 
c. Percorrer vetor de livros 
d. Escrever cada livro como linha no arquivo 
4. Função cadastrarLivro(): 
o Objetivo: Adicionar novo livro 
o Passos: 
a. Verificar limite de livros 
b. Gerar novo ID 
c. Solicitar dados do livro (título, autor, ano) 
d. Adicionar livro ao vetor 
e. Salvar livros no arquivo 
f. Mostrar mensagem de sucesso 
5. Função removerLivroPorId(): 
o Objetivo: Remover livro específico 
o Passos: 
a. Procurar livro pelo ID 
b. Reordenar vetor removendo livro 
c. Atualizar total de livros 
d. Salvar alterações no arquivo 
6. Função exibirLivros(): 
o Objetivo: Mostrar lista de livros 
o Passos: 
a. Verificar se há livros 
b. Exibir lista formatada 
c. Mostrar detalhes de cada livro 
7. Função principal (main()): 
o Objetivo: Gerenciar fluxo do programa 
o Passos: 
a. Configurar ambiente 
b. Carregar livros existentes 
c. Mostrar menu de opções 
d. Processar escolha do usuário: 
▪ Exibir livros 
▪ Cadastrar livro 
▪ Remover livro 
▪ Sair do programa 
3 
 
Funções Auxiliares: 
• limparTela(): Limpar tela do console 
• tocarSom(): Reproduzir som de feedback 
• pausar(): Aguardar pressionamento de tecla 
• limparBuffer(): Limpar buffer de entrada 
• gerarNovoId(): Gerar ID único para novo livro 
Características Especiais: 
• Persistência de dados em arquivo CSV (Planilha) 
• Tratamento de cores no console 
• Suporte a caracteres em português 
• Validações de entrada 
• Feedback sonoro 
Fluxo Principal: 
1. Configurar ambiente 
2. Carregar livros existentes 
3. Apresentar menu interativo 
4. Permitir operações (exibir, cadastrar, remover) 
5. Salvar alterações automaticamente 
6. Encerrar quando solicitado 
 
Pseudocódigo 
 
ALGORITMO GerenciadorBiblioteca 
 
CONSTANTES 
 MAX_LIVROS = 100 
 ARQUIVO_BIBLIOTECA = "Database_bibliotecaDavid.csv" 
 
TIPO Livro 
 id: INTEIRO 
 titulo: CARACTERE 
 autor: CARACTERE 
 ano: INTEIRO 
FIM TIPO 
 
VARIÁVEIS GLOBAIS 
 livros: VETOR[0..MAX_LIVROS] DE Livro 
 totalLivros: INTEIRO 
 
FUNÇÃO configurarAcentuacao() 
 CONFIGURAR suporte a caracteres em português 
FIM FUNÇÃO 
 
FUNÇÃO carregarLivros(): INTEIRO 
 VARIÁVEIS 
 arquivo: ARQUIVO 
 totalCarregados: INTEIRO = 0 
 
 ABRIR arquivo PARA LEITURA 
 SE arquivo NÃO EXISTE ENTÃO 
4 
 
 RETORNAR 0 
 FIM SE 
 
 PULAR linha de cabeçalho 
 
 ENQUANTO NÃO fim do arquivo E totalCarregados maiorId ENTÃO 
 maiorId = livros[i].id 
 FIM SE 
 FIM PARA 
 RETORNAR maiorId + 1 
FIM FUNÇÃO 
 
FUNÇÃO cadastrarLivro() 
 SE totalLivros >= MAX_LIVROS ENTÃO 
 MOSTRAR "Limite máximo de livros atingido" 
 RETORNAR FALSO 
 FIM SE 
 
 novoLivro.id = gerarNovoId() 
 
 SOLICITAR titulo 
 SOLICITAR autor 
 SOLICITAR ano 
 
 livros[totalLivros] = novoLivro 
 totalLivros = totalLivros + 1 
 
 salvarLivros() 
 MOSTRAR "Livro cadastrado com sucesso" 
FIM FUNÇÃO 
 
FUNÇÃO removerLivroPorId(idRemover: INTEIRO) 
 PARA i DE 0 ATÉ totalLivros - 1 FAÇA 
 SE livros[i].id == idRemover ENTÃO 
 PARA j DE i ATÉ totalLivros - 2 FAÇA 
 livros[j] = livros[j + 1] 
 FIM PARA 
 totalLivros = totalLivros - 1 
 salvarLivros() 
 RETORNAR VERDADEIRO 
 FIM SE 
 FIM PARA 
 RETORNAR FALSO 
FIM FUNÇÃO 
5 
 
 
FUNÇÃO exibirLivros() 
 SE totalLivros == 0 ENTÃO 
 MOSTRAR "Nenhum livro cadastrado" 
 RETORNAR 
 FIM SE 
 
 MOSTRAR cabeçalho da tabela 
 PARA i DE 0 ATÉ totalLivros - 1 FAÇA 
 MOSTRAR detalhes do livro livros[i] 
 FIM PARA 
FIM FUNÇÃO 
 
FUNÇÃO principal() 
 configurarAcentuacao() 
 totalLivros = carregarLivros() 
 
 REPITA 
 LIMPAR tela 
 MOSTRAR menu: 
 "1. Exibir Livros" 
 "2. Cadastrar Livro" 
 "3. Remover Livro" 
 "4. Sair" 
 
 LER opcao 
 
 ESCOLHA opcao 
 CASO 1: 
 exibirLivros() 
 
 CASO 2: 
 cadastrarLivro() 
 
 CASO 3: 
 SE totalLivros > 0 ENTÃO 
 MOSTRAR lista de livros 
 SOLICITAR ID para remover 
 SE removerLivroPorId(idSolicitado) ENTÃO 
 MOSTRAR "Livro removido com sucesso" 
 SENÃO 
 MOSTRAR "Livro não encontrado" 
 FIM SE 
 SENÃO 
 MOSTRAR "Não há livros para remover" 
 FIM SE 
 
 CASO 4: 
 MOSTRAR "Encerrando programa" 
 
 CASO CONTRÁRIO: 
 MOSTRAR "Opção inválida" 
 FIM ESCOLHA 
 ATÉ opcao == 4 
 
FIM ALGORITMO 
 
 
6 
 
Linguagem C 
#include 
#include 
#include 
#include 
#include 
#include 
 
/* Definições de cores para terminal Windows usando system color */ 
#define COR_PADRAO system("color 07") 
#define COR_ERRO system("color 0C") 
#define COR_SUCESSO system("color 0A") 
#define COR_ALERTA system("color 0E") 
#define COR_INFO system("color 0B") 
 
#define MAX_LIVROS 100 
#define MAX_TITULO 200 
#define MAX_AUTOR 200 
#define ARQUIVO_BIBLIOTECA "Database_bibliotecaDavid.csv" 
 
/* Estrutura para representar um livro */ 
typedef struct { 
 int id; 
 char titulo[MAX_TITULO];char autor[MAX_AUTOR]; 
 int ano; 
} Livro; 
 
/* Protótipos de funções */ 
void configurarAcentuacao(void); 
int carregarLivros(Livro livros[]); 
void salvarLivros(Livro livros[], int totalLivros); 
int removerLivroPorId(Livro livros[], int *totalLivros, int idRemover); 
void exibirLivros(Livro livros[], int totalLivros); 
int cadastrarLivro(Livro livros[], int *totalLivros); 
int gerarNovoId(Livro livros[], int totalLivros); 
void limparBuffer(void); 
void pausar(void); 
void limparTela(void); 
void tocarSom(int frequencia, int duracao); 
void exibirListaSimples(Livro livros[], int totalLivros); 
 
/* Função para limpar a tela */ 
void limparTela(void) { 
 system("cls"); 
 COR_PADRAO; 
} 
 
7 
 
/* Função para tocar som */ 
void tocarSom(int frequencia, int duracao) { 
 Beep(frequencia, duracao); 
} 
 
/* Função para configurar acentuação */ 
void configurarAcentuacao(void) { 
 SetConsoleCP(1252); 
 SetConsoleOutputCP(1252); 
 setlocale(LC_ALL, "Portuguese"); 
} 
 
/* Função para pausar o programa */ 
void pausar(void) { 
 printf("\n\nPressione qualquer tecla para continuar..."); 
 getch(); 
} 
 
/* Função para limpar buffer de entrada */ 
void limparBuffer(void) { 
 int c; 
 while ((c = getchar()) != '\n' && c != EOF); 
} 
 
/* Função para exibir lista simples de livros */ 
void exibirListaSimples(Livro livros[], int totalLivros) { 
 int i; 
 printf("===============================================================\n"); 
 printf("| ID | Titulo | Autor | Ano |\n"); 
 printf("|-----|----------------------|-------------------|------------|\n"); 
 
 for (i = 0; i maiorId) { 
 maiorId = livros[i].id; 
 } 
8 
 
 } 
 return maiorId + 1; 
} 
 
/* Função para cadastrar um novo livro */ 
int cadastrarLivro(Livro livros[], int *totalLivros) { 
 Livro novoLivro; 
 char buffer[MAX_TITULO]; 
 
 if (*totalLivros >= MAX_LIVROS) { 
 COR_ERRO; 
 printf("Limite maximo de livros atingido!\n"); 
 tocarSom(500, 300); 
 pausar(); 
 return 0; 
 } 
 
 limparTela(); 
 COR_INFO; 
 novoLivro.id = gerarNovoId(livros, *totalLivros); 
 
 printf("Digite o titulo do livro: "); 
 gets(buffer); 
 strncpy(novoLivro.titulo, buffer, MAX_TITULO - 1); 
 novoLivro.titulo[MAX_TITULO - 1] = '\0'; 
 
 printf("Digite o autor do livro: "); 
 gets(buffer); 
 strncpy(novoLivro.autor, buffer, MAX_AUTOR - 1); 
 novoLivro.autor[MAX_AUTOR - 1] = '\0'; 
 
 printf("Digite o ano de publicacao: "); 
 scanf("%d", &novoLivro.ano); 
 limparBuffer(); 
 
 livros[*totalLivros] = novoLivro; 
 (*totalLivros)++; 
 salvarLivros(livros, *totalLivros); 
 
 COR_SUCESSO; 
 printf("\nLivro cadastrado com sucesso! ID: %d\n", novoLivro.id); 
 tocarSom(1000, 200); 
 pausar(); 
 return 1; 
} 
 
/* Função para carregar livros do arquivo CSV */ 
int carregarLivros(Livro livros[]) { 
 FILE *arquivo; 
9 
 
 int totalLivros = 0; 
 char linha[500]; 
 char *token; 
 
 arquivo = fopen(ARQUIVO_BIBLIOTECA, "r"); 
 if (arquivo == NULL) { 
 COR_ALERTA; 
 printf("Sem arquivo de biblioteca existente. Iniciando novo.\n"); 
 return 0; 
 } 
 
 /* Pular a linha de cabeçalho */ 
 fgets(linha, sizeof(linha), arquivo); 
 
 while (fgets(linha, sizeof(linha), arquivo) && totalLivroslimparTela(); 
 COR_INFO; 
 printf("=== Lista de Livros Disponiveis para Remocao 
===\n\n"); 
 exibirListaSimples(livros, totalLivros); 
 printf("\n"); 
 
 /* Pede o ID para remover */ 
 printf("Digite o ID do livro que deseja remover: "); 
 scanf("%d", &idRemover); 
 limparBuffer(); 
 
 /* Tenta remover o livro */ 
 if (removerLivroPorId(livros, &totalLivros, idRemover)) { 
 COR_SUCESSO; 
 printf("Livro removido com sucesso!\n"); 
 } else { 
 COR_ERRO; 
 printf("Livro nao encontrado.\n"); 
 tocarSom(500, 300); 
 } 
 pausar(); 
 } 
 break; 
 
 case 4: 
 COR_ALERTA; 
 printf("Encerrando o programa...\n"); 
 tocarSom(700, 500); 
 break; 
 
 default: 
 COR_ERRO; 
 printf("Opcao invalida!\n"); 
 tocarSom(500, 300); 
 pausar(); 
 } 
 } while (opcao != 4); 
 
 return 0; 
13 
 
} 
 
Captura de tela 
 
 
 
 
 
 
 
 
14 
 
 
 
 
 
 
15 
 
 
 
 
 
16 
 
 
 
 
17 
 
 
 
 
18 
 
 
 
 
19 
 
 
 
 
 
 
Código fonte versão sem fundo 
#include 
#include 
#include 
#include 
#include 
#include 
 
/* Definições de cores para terminal Windows usando system color */ 
#define COR_PADRAO system("color 07") 
20 
 
#define COR_ERRO system("color 0C") 
#define COR_SUCESSO system("color 0A") 
#define COR_ALERTA system("color 0E") 
#define COR_INFO system("color 0B") 
 
#define MAX_LIVROS 100 
#define MAX_TITULO 200 
#define MAX_AUTOR 200 
#define ARQUIVO_BIBLIOTECA "Database_bibliotecaDavid.csv" 
 
/* Estrutura para representar um livro */ 
typedef struct { 
 int id; 
 char titulo[MAX_TITULO]; 
 char autor[MAX_AUTOR]; 
 int ano; 
} Livro; 
 
/* Protótipos de funções */ 
void configurarAcentuacao(void); 
int carregarLivros(Livro livros[]); 
void salvarLivros(Livro livros[], int totalLivros); 
int removerLivroPorId(Livro livros[], int *totalLivros, int idRemover); 
void exibirLivros(Livro livros[], int totalLivros); 
int cadastrarLivro(Livro livros[], int *totalLivros); 
int gerarNovoId(Livro livros[], int totalLivros); 
void limparBuffer(void); 
void pausar(void); 
void limparTela(void); 
void tocarSom(int frequencia, int duracao); 
void exibirListaSimples(Livro livros[], int totalLivros); 
 
/* Função para limpar a tela */ 
void limparTela(void) { 
 system("cls"); 
 COR_PADRAO; 
} 
 
/* Função para tocar som */ 
void tocarSom(int frequencia, int duracao) { 
 Beep(frequencia, duracao); 
} 
 
/* Função para configurar acentuação */ 
void configurarAcentuacao(void) { 
 SetConsoleCP(1252); 
 SetConsoleOutputCP(1252); 
 setlocale(LC_ALL, "Portuguese"); 
} 
 
/* Função para pausar o programa */ 
void pausar(void) { 
 printf("\n\nPressione qualquer tecla para continuar..."); 
 getch(); 
} 
 
/* Função para limpar buffer de entrada */ 
void limparBuffer(void) { 
 int c; 
 while ((c = getchar()) != '\n' && c != EOF); 
} 
21 
 
 
/* Função para exibir lista simples de livros */ 
void exibirListaSimples(Livro livros[], int totalLivros) { 
 int i; 
 
printf("===============================================================\n")
; 
 printf("| ID | Titulo | Autor | Ano 
|\n"); 
 printf("|-----|----------------------|-------------------|------------
|\n"); 
 
 for (i = 0; i maiorId) { 
 maiorId = livros[i].id; 
 } 
 } 
 return maiorId + 1; 
} 
 
/* Função para cadastrar um novo livro */ 
int cadastrarLivro(Livro livros[], int *totalLivros) { 
 Livro novoLivro; 
 char buffer[MAX_TITULO]; 
 
 if (*totalLivros >= MAX_LIVROS) { 
 COR_ERRO; 
 printf("Limite maximo de livros atingido!\n"); 
 tocarSom(500, 300); 
 pausar(); 
 return 0; 
 } 
 
 limparTela(); 
 COR_INFO; 
 novoLivro.id = gerarNovoId(livros, *totalLivros); 
 
 printf("Digite o titulo do livro: "); 
 gets(buffer); 
 strncpy(novoLivro.titulo, buffer, MAX_TITULO - 1); 
 novoLivro.titulo[MAX_TITULO - 1] = '\0'; 
 
 printf("Digite o autor do livro: "); 
 gets(buffer); 
 strncpy(novoLivro.autor, buffer, MAX_AUTOR - 1); 
22 
 
 novoLivro.autor[MAX_AUTOR - 1] = '\0'; 
 
 printf("Digite o ano de publicacao: "); 
 scanf("%d", &novoLivro.ano); 
 limparBuffer(); 
 
 livros[*totalLivros] = novoLivro; 
 (*totalLivros)++; 
 salvarLivros(livros, *totalLivros); 
 
 COR_SUCESSO; 
 printf("\nLivro cadastrado com sucesso! ID: %d\n", novoLivro.id); 
 tocarSom(1000, 200); 
 pausar(); 
 return 1; 
} 
 
/* Função para carregar livros do arquivo CSV */ 
int carregarLivros(Livro livros[]) { 
 FILE *arquivo; 
 int totalLivros = 0; 
 char linha[500]; 
 char *token; 
 
 arquivo = fopen(ARQUIVO_BIBLIOTECA, "r"); 
 if (arquivo == NULL) { 
 COR_ALERTA; 
 printf("Sem arquivo de biblioteca existente. Iniciando novo.\n"); 
 return 0; 
 } 
 
 /* Pular a linha de cabeçalho */ 
 fgets(linha, sizeof(linha), arquivo); 
 
 while (fgets(linha, sizeof(linha), arquivo) && totalLivros< *totalLivros; i++) { 
 if (livros[i].id == idRemover) { 
 for (j = i; j < *totalLivros - 1; j++) { 
 livros[j] = livros[j + 1]; 
 } 
 (*totalLivros)--; 
 salvarLivros(livros, *totalLivros); 
 tocarSom(800, 200); 
 return 1; 
 } 
 } 
 return 0; 
} 
 
/* Função para exibir todos os livros */ 
void exibirLivros(Livro livros[], int totalLivros) { 
 if (totalLivros == 0) { 
 COR_ALERTA; 
 printf("Nenhum livro cadastrado.\n"); 
 pausar(); 
 return; 
 } 
 
 COR_INFO; 
24 
 
 printf("=== Lista Completa de Livros ===\n\n"); 
 exibirListaSimples(livros, totalLivros); 
 tocarSom(600, 200); 
 pausar(); 
} 
 
/* Função principal */ 
int main(void) { 
 Livro livros[MAX_LIVROS]; 
 int totalLivros = 0; 
 int opcao; 
 
 configurarAcentuacao(); 
 totalLivros = carregarLivros(livros); 
 
 do { 
 limparTela(); 
 COR_INFO; 
 
 printf("=== Gerenciador de Biblioteca ===\n\n"); 
 printf("1. Exibir Livros\n"); 
 printf("2. Cadastrar Livro\n"); 
 printf("3. Remover Livro\n"); 
 printf("4. Sair\n\n"); 
 printf("Escolha uma opcao: "); 
 
 scanf("%d", &opcao); 
 limparBuffer(); 
 
 switch (opcao) { 
 case 1: 
 limparTela(); 
 exibirLivros(livros, totalLivros); 
 break; 
 
 case 2: 
 limparTela(); 
 cadastrarLivro(livros, &totalLivros); 
 break; 
 
 case 3: 
 { 
 int idRemover; 
 
 /* Verifica se há livros para remover */ 
 if (totalLivros == 0) { 
 limparTela(); 
 COR_ERRO; 
 printf("Nao ha livros cadastrados para 
remover!\n"); 
 tocarSom(500, 300); 
 pausar(); 
 break; 
 } 
 
 /* Mostra a lista de livros primeiro */ 
 limparTela(); 
 COR_INFO; 
 printf("=== Lista de Livros Disponiveis para Remocao 
===\n\n"); 
 exibirListaSimples(livros, totalLivros); 
25 
 
 printf("\n"); 
 
 /* Pede o ID para remover */ 
 printf("Digite o ID do livro que deseja remover: "); 
 scanf("%d", &idRemover); 
 limparBuffer(); 
 
 /* Tenta remover o livro */ 
 if (removerLivroPorId(livros, &totalLivros, idRemover)) 
{ 
 COR_SUCESSO; 
 printf("Livro removido com sucesso!\n"); 
 } else { 
 COR_ERRO; 
 printf("Livro nao encontrado.\n"); 
 tocarSom(500, 300); 
 } 
 pausar(); 
 } 
 break; 
 
 case 4: 
 COR_ALERTA; 
 printf("Encerrando o programa...\n"); 
 tocarSom(700, 500); 
 break; 
 
 default: 
 COR_ERRO; 
 printf("Opcao invalida!\n"); 
 tocarSom(500, 300); 
 pausar(); 
 } 
 } while (opcao != 4); 
 
 return 0; 
} 
 
	AB3 - ATIVIDADE PRÁTICA DE APRENDIZAGEM
	Algoritmo
	Pseudocódigo
	Linguagem C
	Captura de tela
	Código fonte versão sem fundo

Mais conteúdos dessa disciplina