- Éverson Alisson Queiroz Silva
- Nattan Ferreira Lopes
- Pedro Lucas de Sousa Ferreira
- Rubens Alexandre de Sousa Ferreira
Neste arquivo você verá:
- IA's utilizadas
- Introdução
- Organização do código
- Problemática
- Descrição
- Árvore de busca binária
- Tabela Hash
- Heap
- Funções
- Pré-requisitos para compilar
- Execução do Projeto
- Github Copilot: O GitHub Copilot é uma ferramenta de programação baseada em inteligência artificial, desenvolvida pela GitHub e pela OpenAI. Ele fornece sugestões de código em tempo real enquanto você escreve, usando modelos de linguagem avançados para aumentar a produtividade dos desenvolvedores.
Um sistema usado para gerenciar uma loja de jogos, com os seguintes atributos, cadastrar/buscar/remover clientes, cadastrar/buscar/remover mercadoria, ter o controle de estoque e realizar vendas.
📁 - PixelPoint
│
└─── include
│
├──clientes.h
├──jogos.h
├──sistema.h
│
└─── src
│
├──clientes.c
├──jogos.c
├──main.c
├──sistema.c
│
└───README.md
Projete um sistema em alguma linguagem que faça uso de ponteiros para gerenciar uma loja de jogos. Seu sistema deve ser capaz de manipular informações dos jogos e possiveis clientes
- Cadastrar, buscar e remover jogos
- Cadastrar, buscar e remover clientes
- Ter o controle de estoque
- Realizar vendas
- Arvore de busca binária ou AVL
- Tabela Hash
- Heap
Uma árvore de busca binária é uma estrutura de dados em forma de árvore que armazena elementos de forma hierárquica, facilitando operações como busca, inserção e remoção. Cada nó de uma árvore binária de busca tem no máximo dois filhos: um filho à esquerda e um filho à direita.
Ela ficará responsavel por burcar, inserir e remover mercadorias e clientes da loja.
Uma tabela hash é uma estrutura de dados que mapeia chaves a valores de maneira muito eficiente, usando uma técnica conhecida como hashing. É amplamente usada quando se precisa de buscas rápidas, inserções e remoções de elementos, geralmente com complexidade próxima de O(1).
Mapear as mercadorias por categoria, facilitando o controle de estoque da loja.
A estrutura de dados heap, também conhecida como heap binária, é uma árvore binária que organiza um conjunto de elementos. É uma estrutura útil para implementar filas de prioridade, pois permite adicionar e extrair o elemento de maior prioridade em tempo O(logn).
Ela armazena os jogos e coloca como prioridade o que está com menos itens no estoque
---------------------------------
MENU
1 - Adicionar Cliente
2 - Remover Cliente
3 - Buscar Clientes
4 - Cadastrar Jogo
5 - Remover Jogo
6 - Estoque
7 - Buscar Jogo
8 - Realizar Venda
9 - Reabastecer Estoque
0 - SAIR
---------------------------------
---------------------------------
1 - Adicionar Cliente
2 - Remover Cliente
3 - Buscar Clientes
---------------------------------
As funções como adicionar/buscar e remover clientes, foram implementadas usando Arvore de Busca Binária(AVL). O que nos levou a usar ela, foi o fato de que os elementos são inseridos de forma hierarquica, facilitando assim as operações como por exemplo a de busca
Node* Inserir(Node* node, Cliente cliente);
A função Inserir insere um novo nó em uma árvore AVL com base no ID do cliente, realiza a inserção normal de uma árvore binária de busca e aplica rotações para manter o balanceamento da árvore. Ela lida com a atualização da altura e do fator de balanceamento após a inserção.
Node* Deletar_node(Node* raiz, int id);
A função Deletar_node remove um nó de uma árvore AVL com base no ID fornecido, realiza a remoção normal de uma árvore binária de busca e aplica rotações para manter o balanceamento da árvore. Ela lida com nós com nenhum, um ou dois filhos e atualiza a altura e o fator de balanceamento após a remoção.
Node* Buscar(Node* raiz, int id);
A função Buscar busca um nó em uma árvore AVL com base no ID do cliente. Ela percorre a árvore recursivamente, comparando o ID fornecido com o ID dos nós, até encontrar o nó correspondente ou chegar a um nó nulo. Se o cliente for encontrado, a função retorna o nó correspondente; caso contrário, retorna NULL.
---------------------------------
4 - Cadastrar Jogo
5 - Remover Jogo
6 - Estoque
7 - Buscar Jogo
8 - Realizar Venda
9 - Reabastecer Estoque
---------------------------------
As 5 funções referentes aos jogos, utilizaram duas estruturas de dados, a tabela Hash e a Heap. A escolha da tabela hash vem pelo fato que ela mapeia os jogos dando valores a eles, assim facilitando na hora das buscas que seriam utilizadas para as demais funções como por exemplo a de realizar venda e a Heap fui utilizada para armazenar os jogos e colocar como prioridade os que tem menos estoque
Jogo* criarJogo(int id, const char* nome, float preco, int quantidade);
A função criarJogo aloca memória para um novo jogo, inicializa seus campos com os valores fornecidos (ID, nome, preço e quantidade) e retorna um ponteiro para o novo jogo. Se a alocação de memória falhar, a função imprime uma mensagem de erro e encerra o programa.
void excluirJogo(Lista tabela[], const char* nome);
A função excluirJogo remove um jogo de uma tabela hash com base no nome fornecido. Ela calcula o índice usando uma função hash, percorre a lista encadeada no índice correspondente, encontra o jogo com o nome especificado, remove o nó da lista e libera a memória alocada para o jogo e o nó.
void imprimirTabela(Lista tabela[]);
A função imprimirTabela percorre todas as listas em uma tabela hash e imprime o conteúdo de cada lista. Para cada índice da tabela, a função chama imprimirLista para imprimir os elementos da lista correspondente.
int buscarNaTabela(Lista tabela[], const char *nome);
A função buscarNaTabela busca um jogo em uma tabela hash com base no nome fornecido. Ela calcula o índice usando uma função hash e chama a função buscarNaLista para procurar o jogo na lista encadeada no índice correspondente. Retorna um valor indicando se o jogo foi encontrado.
void realizarVenda(Lista tabela[], Heap *heap, const char *nome, int quantidade);
A função realizarVenda realiza a venda de um jogo, atualizando a quantidade em estoque e a heap. Ela busca o jogo na tabela hash pelo nome, verifica se há quantidade suficiente em estoque, decrementa a quantidade vendida e atualiza a heap removendo e reinserindo o jogo. Se o jogo não for encontrado ou a quantidade for insuficiente, a função imprime uma mensagem de erro.
void reabastecerEstoque(Lista tabela[], Heap *heap, const char *nome, int quantidade);
A função reabastecerEstoque reabastece o estoque de um jogo na tabela hash com base no nome fornecido. Ela busca o jogo na tabela, incrementa a quantidade em estoque e atualiza a heap removendo e reinserindo o jogo. Se o jogo não for encontrado, a função imprime uma mensagem de erro.
Para executar o código é necessário um compilador C instalado. Recomendamos o uso do GCC.
Para compilar o código, abra o terminal e navegue até a pasta linguagem_c e execute o seguinte comando:
gcc main.c clientes.c jogos.c sistema.c -o main
Para executar o código, digite o comando:
./main