- Alice C. M. Assis - RM 566233
- Leonardo S. Souza - RM 563928
- Lucas B. Francelino - RM 561409
- Pedro L. T. Silva - RM 561644
- Vitor A. Bezerra - RM 563001
Este projeto tem como objetivo desenvolver um mini sistema de gestão de agronegócio, voltado para atender às necessidades de controle e organização no setor. A aplicação permite que o usuário:
- Cadastre fazendas, insumos e maquinários.
- Controle os custos relacionados a insumos e combustível.
- Obtenha rotas otimizadas para colheita na lavoura.
A solução utiliza conceitos de subalgoritmos, estruturas de dados (listas, tuplas, dicionários), manipulação de arquivos (texto e JSON) e conexão com banco de dados Oracle. O foco principal está na inovação, boa usabilidade e relevância para o setor do agronegócio, proporcionando uma ferramenta prática e eficiente para os usuários.
-
Subalgoritmos: O projeto utiliza funções e procedimentos com passagem de parâmetros para modularizar e organizar o código, promovendo reutilização e clareza. Exemplos podem ser observados em diversas partes do código, como:
- O procedimento
main()no arquivo main.py, que organiza o fluxo principal da aplicação. - O procedimento
log()no arquivo loggers.py, que implementa diferentes níveis de log com parâmetros comomessage,levele outros opcionais. - O método
execute_sql()no arquivo database.py, que executa comandos SQL com parâmetros comosql,max_retriesecommit. - A função
makeRed()no arquivo color_text.py, que transforma o texto em vermelho e devolve uma string para ser printada para o user.
Esses subalgoritmos são fundamentais para garantir a modularidade, a reutilização de código e a manutenção eficiente do sistema.
- O procedimento
-
Estruturas de dados: O projeto faz uso de diferentes estruturas de dados para organizar e manipular informações de forma eficiente. Exemplos incluem:
-
Listas: Utilizadas para obter coleções de dados, como no arquivo query.py.
-
Tuplas: Empregadas para representar conjuntos imutáveis de dados, como no retorno de múltiplos valores em funções no arquivo senha.py.
-
Dicionários: Usados para mapear pares chave-valor, como na serialização e desserialização de dados no arquivo senha.py.
-
Tabelas de memória: Implementadas no contexto de manipulação de dados em memória, como no uso de
pandaspara exibir e processar tabelas no arquivo model.py. -
Classes e Dataclasses: O arquivo model.py é um exemplo central do uso de dataclasses para representar modelos de dados. Ele utiliza:
- Dataclasses: Para definir modelos de dados com campos fortemente tipados, como
ide outros atributos específicos. - Métodos utilitários: Como
to_dict()efrom_dict()para converter instâncias em dicionários e vice-versa. - Enums: Para representar valores fixos e categóricos, garantindo consistência nos dados.
- Pandas DataFrames: Para exibir e manipular dados em formato tabular, como no método
get_dataframe().
- Dataclasses: Para definir modelos de dados com campos fortemente tipados, como
Essas estruturas são essenciais para organizar os dados de forma clara e eficiente, permitindo que o sistema seja escalável e de fácil manutenção.
-
-
Manipulação de arquivos: texto e JSON: A manipulação de arquivos é um dos pilares deste projeto, permitindo exportar e importar dados no formato JSON, além de registrar logs em arquivos de texto. Os principais arquivos relacionados a essa funcionalidade são:
- loggers.py: Responsável por registrar logs em um arquivo de texto (
log.txt). A funçãolog()permite gravar mensagens com diferentes níveis de severidade (INFO, WARNING, ERROR, etc.), enquanto as funções auxiliares (log_info,log_error, etc.) simplificam o uso. O arquivo de log é atualizado automaticamente sempre que uma mensagem é registrada. - exportar_json_generico.py: Implementa a exportação de dados de modelos para arquivos JSON. A função
exportar_json_generico()obtém os dados do banco de dados, os exibe em formato tabular e os salva em um arquivo JSON no diretório configurado (EXPORTS_DIR). Logs são gerados para informar o progresso e possíveis erros durante o processo. - importar_json_generico.py: Gerencia a importação de dados de arquivos JSON para o banco de dados. A função
importar_json_generico()lê arquivos JSON do diretório configurado (IMPORTS_DIR), valida os dados e os insere no banco de dados. Logs detalhados são gerados para registrar sucessos e falhas.
- loggers.py: Responsável por registrar logs em um arquivo de texto (
-
Conexão com banco de dados: Oracle: A conexão com o banco de dados Oracle é um ponto central do projeto e pode ser observada nos seguintes arquivos:
- main.py: A função
main()chamainiciar_database()para estabelecer a conexão inicial com o banco de dados echeck_or_create_tables()para verificar ou criar as tabelas necessárias. - iniciar_database.py: Contém a lógica para inicializar a conexão com o banco de dados Oracle, utilizando as credenciais fornecidas pelo usuário ou armazenadas em um arquivo codificado. A função
Database.init_oracledb()é usada para estabelecer a conexão. - init_tables.py: Verifica e cria as tabelas no banco de dados, chamando os métodos
check_or_create_table()das classes de modelo. - model.py: Define a estrutura das tabelas e implementa métodos como
check_or_create_table()esave()para interagir diretamente com o banco de dados Oracle, incluindo a criação, atualização e exclusão de registros.
Esses arquivos trabalham em conjunto para garantir que a aplicação se conecte ao banco de dados Oracle e gerencie as tabelas e dados de forma eficiente.
- main.py: A função
O projeto segue uma estrutura modular bem organizada, com cada funcionalidade separada em arquivos e classes específicas. A lógica é clara e objetiva, com funções bem definidas para cada etapa, como:
- Conexão ao banco de dados.
- Manipulação de dados (cadastro, edição, exclusão, listagem).
- Interação com o usuário.
Essa abordagem facilita a compreensão, manutenção e escalabilidade do código.
O projeto atende diretamente aos requisitos solicitados, incluindo:
- Conexão com o banco de dados Oracle.
- Manipulação de dados: cadastro, edição, exclusão e listagem.
- Exportação/Importação em JSON.
- Apresentação de relatórios.
Todas as funcionalidades foram implementadas de forma alinhada ao objetivo principal: criar um sistema de gestão eficiente para o agronegócio.
Para evitar inconsistências nos dados, o código utiliza funções específicas de validação, como:
input_intinput_strinput_boolinput_enum
Essas funções garantem que os dados inseridos pelo usuário sejam do tipo correto, evitando erros durante a gravação no banco de dados. Além disso:
- Mensagens de erro claras são exibidas em caso de entradas inválidas.
Mesmo em um ambiente de linha de comando, o projeto prioriza a boa usabilidade:
- Utiliza a biblioteca pandas para exibir dados em formato tabular, tornando a apresentação mais organizada e fácil de entender.
- Mensagens informativas e logs guiam o usuário durante a interação com o sistema, proporcionando uma experiência fluida e intuitiva.
- Prints coloridos deixam a apresentação mais agradável e fácil de ler.
Dentre os arquivos e pastas presentes na raiz do projeto, definem-se:
- .github: Nesta pasta ficarão os arquivos de configuração específicos do GitHub que ajudam a gerenciar e automatizar processos no repositório.
- assets: aqui estão os arquivos relacionados a elementos não-estruturados deste repositório, como imagens.
- src: Todo o código fonte criado para o desenvolvimento do projeto ao longo de todas as fases.
- database: Execução dos comandos de banco de dados, como Conectar, Cadastrar, Listar, Editar e Excluir. (database)
- file_exports: Arquivos exportados do Bando de Dados no formato JSON. (file_exports)
- file_imports: Arquivos no formato JSON para importar no Banco de Dados. (file_imports)
- logger: Arquivos de formatação da aplicação. (logger)
- menu: Exibição e configuração de todos os menus da aplicação, como o da fazenda (fazenda), insumos (insumos) e maquinário (maquinario). Obs: a pasta generico compartilha funcionalidades padrões utilizadas por todos os menus. (menu)
- README: arquivo que serve como guia e explicação geral sobre o projeto (o mesmo que você está lendo agora).
- Recomendamos utilizar o python versão 3.12.6 para executar o código.
- Para iniciar a aplicação é necessário instalar algumas bibliotecas, que são: (arquivo: requirements.txt)
- oracledb==3.1.0*
- pandas==2.2.3*
- matplotlib==3.10.1
- Execute a função abaixo para instalar as bibliotecas (obs.: a instalação pode ocorrer de forma autamática a depender do seu ambiente):
- pip install -r requirements.txt
- Inicie a aplicação no main.py:
- Informe o usuário do Banco de Dados (exemplo: RM000000) e logo em seguida informe a senha (exemplo: XXXXXX) e posteriormente o dsn. Obs.: caso não haja um usuário, senha e dsn válidos, não será possível seguir.
- Após a conexão com o Bando de Dados será exibido o menu da aplicação:
- Importante: Nessa etapa as tabelas FAZENDA, INSUMO e MAQUINARIO serão criadas no Banco de Dados para que os dados possam ser inseridos. A aplicação também verifica caso já tenham sido criadas antes.
- Manutenção de Fazendas
- Manutenção de Insumos
- Manutenção de Maquinários
- Relatórios
- Sair
Opção 1: Manutenção de Fazendas: (menu_fazenda.py)
- Cadastrar Fazenda
- Listar Fazendas
- Editar Fazenda
- Excluir Fazenda
- Exportar Fazendas para JSON
- Importar Fazendas de um JSON
- Aqui é possível gerenciar todos os dados da Fazenda, como Cadastrar, Listar, Editar, Excluir, além da Exportação ou Importação dos dados no formato JSON.
Opção 2: Manutenção de Insumos: (menu_insumos.py)
- Cadastrar Insumos
- Listar Insumos
- Editar Insumos
- Excluir Insumos
- Exportar Insumos para JSON
- Importar Insumos de um JSON
- Aqui é possível gerenciar todos os dados dos Insumos, como Cadastrar, Listar, Editar, Excluir, além da Exportação ou Importação dos dados no formato JSON.
Opção 3: Manutenção de Maquinário: (menu_maquinario.py)
- Cadastrar Maquinário
- Listar Maquinário
- Editar Maquinário
- Excluir Maquinário
- Exportar Maquinário para JSON
- Importar Maquinário de um JSON
- Aqui é possível gerenciar todos os dados do Maquinário, como Cadastrar, Listar, Editar, Excluir, além da Exportação ou Importação dos dados no formato JSON.
Opção 4: Relatórios: (menu_relatorio.py)
- Relatório de Fazendas
- Relatório de Maquinários
- Relatório de Insumos
- Em cada opção de relatório selecionada será exibido a lista de Fazendas, Maquinários ou Insumos cadastrados no Banco de Dados através das opções anteriores do Menu.
Exemplos de Relatórios:
- --- Relatório da Fazenda ---
- Nome: Joaozinho
- Tipo de Cultura: cana
- Formato: retangulo
- Base (m): 250.0
- Altura (m): 500.0
- Área (m²): 125000.0
- --- Relatório de Maquinário ---
- Fazenda: Joaozinho
- Maquinário: Colheitadeira
- Área da fazenda (m²): 125000.0
- Formato da fazenda: Retângulo
- Largura do equipamento (m): 4.0
- Velocidade máxima (km/h): 10.0
- Distância total (km): 3907.24
- Eficiência (km/l): 20.0
- Consumo estimado (litros): 195.36
- Tempo estimado: 558h 10min
- Número de voltas: 125
- Rota gerada: Ver arquivo Rota_Colheitadeira_Joaozinho_*.png (aqui é gerado uma imagem com o desenho da rota realizada pelo maquinário, o arquivo é disponibillizado na pasta file_exports.)
- --- Relatório de Insumos ---
- Fazenda: Joaozinho
- Insumo: Fosforo
- Tipo de Cultura: cana
- Área total (hectares): 12.5
- Unidade de medida: kg
- Consumo por hectare: 50.0 kg/ha
- Consumo total estimado: 625.0
- Custo por unidade: R$150.0/kg
- Custo total estimado: R$93750.0
- Detalhes: Equivalente a 625.0 kg
- 0.1.3 - 21/04/2025 - Atualização do readme para a inclusão das informações sobre os relatórios.
- 0.1.2 - 18/04/2025 - Inclusão dos relatórios na aplicação.
- 0.1.1 - 17/04/2025 - Atualização do readme para a inclusão de informações sobre o projeto e melhorias na formatação do código.
- 0.1.0 - 15/04/2025 - Versão preliminar da nossa aplicação que inclui a geração do script de Banco de Dados
MODELO GIT FIAP por Fiap está licenciado sobre Attribution 4.0 International.
