https://raw.githubusercontent.com/MARINALDOSOUZA/Alura_Desafios/refs/heads/main/app_restaurante
Título do Projeto: Restaurante Expresso - Sistema de Gerenciamento de Restaurantes
Resumo do Projeto
Restaurante Expresso é uma aplicação de console (CLI - Command-Line Interface) desenvolvida em Python para gerenciar o cadastro e o status operacional de restaurantes. O sistema permite realizar as quatro operações fundamentais de gerenciamento de dados (CRUD: Create, Read, Update, Delete) de forma interativa e organizada, oferecendo uma interface de usuário limpa e colorida diretamente no terminal.
Objetivo
O principal objetivo deste projeto foi construir uma aplicação robusta e bem estruturada, aplicando os princípios da Programação Orientada a Objetos (POO) e boas práticas de desenvolvimento de software. A aplicação serve como uma demonstração prática da transição de um script procedural para uma arquitetura de software modular, escalável e de fácil manutenção, ideal para demonstrar competências em design de software.
Funcionalidades Principais
Cadastro de Restaurantes: Adiciona novos restaurantes ao sistema, coletando informações como nome, telefone, tipo de comida, horários e métodos de pagamento.
Listagem Completa: Exibe todos os restaurantes cadastrados em uma tabela formatada e de fácil leitura, ordenada alfabeticamente.
Busca Inteligente: Permite ao usuário buscar por um restaurante específico digitando parte do seu nome.
Alteração de Status: Modifica o status de um restaurante entre "Ativo" e "Inativo", uma funcionalidade crucial para o controle operacional.
Modificação e Exclusão: Permite a edição de informações (como o telefone) e a remoção completa de um restaurante do sistema de forma segura, com confirmação do usuário.
Interface Interativa: Utiliza a biblioteca colorama para fornecer feedback visual ao usuário, com cores para mensagens de sucesso, erro e títulos, melhorando a experiência de uso no console.
Validação de Dados: Garante a integridade dos dados através de regras de validação estritas, como a exigência de que números de telefone contenham exatamente 11 dígitos.
Conceitos e Tecnologias Aplicadas
Esta aplicação foi construída utilizando uma série de conceitos e recursos fundamentais e modernos da linguagem Python.
- Arquitetura e Design de Software
Programação Orientada a Objetos (POO): A base da aplicação. O código foi estruturado em quatro classes distintas, cada uma com uma responsabilidade clara:
Restaurante: Classe de modelo que representa a estrutura de dados de um restaurante.
GerenciadorRestaurantes: Classe de serviço que encapsula toda a lógica de negócio (adicionar, listar, buscar, remover).
UI: Classe de apresentação que lida com toda a interação com o usuário (exibir menus, obter inputs, formatar tabelas).
App: Classe principal que orquestra o fluxo da aplicação, integrando as outras classes.
Princípio da Responsabilidade Única (SRP): Cada classe tem um e apenas um motivo para mudar, tornando o código mais desacoplado e fácil de manter.
Separação de Camadas (Layering): O projeto distingue claramente a camada de Apresentação (UI), da camada de Lógica de Negócios (GerenciadorRestaurantes) e da camada de Modelo de Dados (Restaurante).
- Recursos da Linguagem Python
Classes e Objetos: Utilização extensiva para modelar o domínio do problema.
Estruturas de Dados: Uso de Listas (List) e Dicionários (Dict) para armazenamento e manipulação de dados em memória.
Type Hinting: Adição de dicas de tipo (nome: str -> Optional[Restaurante]) para aumentar a clareza, a robustez e facilitar a depuração.
Properties (@property): Usado na classe Restaurante para criar atributos computados de forma elegante (ex: status_formatado).
Módulos da Biblioteca Padrão:
os: Para limpar a tela do console (os.system).
re: Para validação de dados com Expressões Regulares (Regex) no número de telefone e horário de funcionamento.
datetime: Para registrar a data de cadastro de cada restaurante.
logging: Para registrar eventos importantes da aplicação, como cadastros, erros e encerramento.
- Bibliotecas Externas
colorama: Para criar uma interface de linha de comando mais rica e amigável, fornecendo feedback colorido ao usuário.