Prévia do material em texto
2
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:
· id (inteiro)
· titulo (string)
· autor (string)
· ano (inteiro)
Constantes:
· MAX_LIVROS = 100 (limite máximo de livros)
· ARQUIVO_BIBLIOTECA = "Database_bibliotecaDavid.csv"
Funções Principais:
1. Função configurarAcentuacao():
· Configura o suporte a caracteres em português
· Define codificação de caracteres para entrada e saída
2. Função carregarLivros():
· Objetivo: Carregar livros de um arquivo CSV
· 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():
· Objetivo: Salvar livros no arquivo CSV
· 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():
· Objetivo: Adicionar novo livro
· 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():
· Objetivo: Remover livro específico
· 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():
· Objetivo: Mostrar lista de livros
· Passos:
a. Verificar se há livros
b. Exibir lista formatada
c. Mostrar detalhes de cada livro
7. Função principal (main()):
· Objetivo: Gerenciar fluxo do programa
· 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
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
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
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
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;
}
/* 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;
}
}
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;
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) && totalLivrostocarSom(700, 500);
break;
default:
COR_ERRO;
printf("Opcao invalida!\n");
tocarSom(500, 300);
pausar();
}
} while (opcao != 4);
return 0;
}
Captura de tela
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")
#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);
}
/* 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);
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) && totalLivroslimparTela();
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);
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;
}
image4.png
image5.png
image6.png
image7.png
image8.png
image9.png
image10.png
image11.png
image12.png
image13.png
image14.png
image1.png
image2.png
image3.png
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 in
tençã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
pr
ecisar
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
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