2
respostas

[Projeto] Finalização do projeto

Abaixo, todo o código efetuado junto com as aulas da Alura, além dos docstings, procurei uma solução para que os dados cadastrados sejam armazenados após finalização do app e conheci o .json (amor à primeira vista), mas enfim, abaixo consta o código puro.

(Parte 1)

import os
import json

try:
    with open('restaurantes.json', 'r') as arquivo:
        restaurantes = json.load(arquivo)
except FileNotFoundError:
    restaurantes = [{'nome':'Hizza Put', 'categoria':'Pizzaria', 'ativo':False},
                    {'nome':'Iendag', 'categoria':'Japonesa', 'ativo':True},
                    {'nome':'Dam Monalds', 'categoria':'Hamburgueria', 'ativo':False}]






#Tela Inicial

def exibir_nome_do_programa():
    '''
    Esta função apresenta o nome do restaurante de uma forma visualmente agradavel
    ''' 
    print('''

█▀ ▄▀█ █▄▄ █▀█ █▀█   █▀▀ ▀▄▀ █▀█ █▀█ █▀▀ █▀ █▀
▄█ █▀█ █▄█ █▄█ █▀▄   ██▄ █░█ █▀▀ █▀▄ ██▄ ▄█ ▄█
''')

def exibir_opcoes_do_restaurante():
    '''
    Esta função apresenta as possíveis opções na qual o usuário pode selecionar
    '''
    print('1. Cadastrar Restaurante')
    print('2. Listar Restaurante')
    print('3. Alternar Status do Restaurante')
    print('4. Sair\n')

#Funções Gerais



def voltar_ao_menu_principal():
    '''
    Esta função serve para o usuário retornar ao menu principal para quando ele estiver realizando alguma atividade e queira retornar
    '''
    input('\nPressione Enter para voltar ao menu ')
    main()

def opcao_invalida():
    '''
    Esta função mostra ao usuário que ele inseriu algum input incorreto no menu principal
    '''
    print('Opção Inválida, digite dentre as opções acima')

    voltar_ao_menu_principal()

def exibir_subtitulo(texto):
    '''
    Função para formatar um padrão nos subtítulos de cada parte do programa

    Nele se limpa o sistema e mostra o texto com "*" acima e abaixo do texto do subtítulo
    '''
    os.system('cls')
    linha = '*' * (len(texto))
    print(linha)
    print(texto)
    print(linha)
    print()

#Funções das opções

def cadastrar_restaurante():
    '''
    Essa função é responsável por cadastrar um novo restaurante
    
    Inputs:
    - Nome do restaurante
    - Categoria

    Outputs:
    - Adiciona um novo Restaurante à lista de restaurantes

    '''
    exibir_subtitulo('Cadastro de novos restaurantes')

    nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
    categoria = input(f'Digite o nome da categoria do restaurante {nome_do_restaurante}: ')

    dados_do_restaurante = {'nome': nome_do_restaurante, 'categoria': categoria, 'ativo': False}

    restaurantes.append(dados_do_restaurante)
    print(f'Restaurante {nome_do_restaurante} cadastrado com sucesso!')
    voltar_ao_menu_principal()
2 respostas

(Parte 2)

def lista_de_restaurantes():
    '''
    Essa função armazenas os restaurantes adicionados e mostra a lista contendo o nome do restaurante, sua categoria e seu status de ativação

    Possui um sistema for para capturar cada um dos elementos na lista restaurantes para apresentar, de maneira organizada, as informações
    '''
    exibir_subtitulo('Lista de Restaurantes')

    print(f'{'Nome do Restaurante'.ljust(22)} | {'Categoria'.ljust(20)} | {'|Status'}\n')
    for r in restaurantes:
        nome_restaurante = r['nome']
        categoria = r['categoria']
        status = 'Ativado' if r['ativo'] else 'Desativado'
        print(f'- {nome_restaurante.ljust(20)} | {categoria.ljust(20)} | {status}')
        
    voltar_ao_menu_principal()

def alternar_status_restaurante():
    '''
    Esta função serve para ativar ou deseativar o status de um restaurante

    Input:
    - Nome do restaurante que deseja mudar o status

    Output:
    - Alterar o status do restaurante digitado

    '''
    exibir_subtitulo('Alternando estado do restaurante')

    nome_restaurante = input('Digite o nome do restaurante que deseja alternar o status: ')
    restaurante_encontrado = False

    for restaurante in restaurantes:
        if nome_restaurante == restaurante['nome']:
            restaurante_encontrado = True
            restaurante['ativo'] = not restaurante['ativo']
            mensagem = f'O restaurante {nome_restaurante} foi ativado com sucesso' if restaurante['ativo'] else f'O restaurante foi desativado com sucesso'
            print(mensagem)

    if not restaurante_encontrado:
         print('Restaurante não localizado, analise os dados informados e forneça novamente')

    voltar_ao_menu_principal()

#Opções

def escolha_de_opcao():
    '''
    Fazendo parte do menu principal, esta função pede ao usuário para inserir uma das opções para gerenciar o restaurante

    Input:
    - Opção desejada em número, opção transforma a strig do número em um inteiro

    Output:
    - Libera o acesso ao usuário à seção selecionada

    '''
    try:
         opcao_escolhida = int(input('Escolha uma opção: '))
         
         if opcao_escolhida == 1: 
               cadastrar_restaurante()
         elif opcao_escolhida == 2: 
               lista_de_restaurantes()
         elif opcao_escolhida == 3: 
               alternar_status_restaurante()
         elif opcao_escolhida == 4: 
               fechar_app()
         else:
               opcao_invalida()
    except:
         opcao_invalida()

def fechar_app():
    '''
    Esta função encerra as atividades do app
    '''
    exibir_subtitulo('App Encerrado')
    with open('restaurantes.json', 'w') as arquivo:
        json.dump(restaurantes, arquivo)

#Main

def main():
    '''
    Função principal do programa que permite sua inicialização
    '''
    os.system('cls')
    exibir_nome_do_programa()
    exibir_opcoes_do_restaurante()
    escolha_de_opcao()

if __name__ == '__main__':
    main()

[https://github.com/Yhamerith/Sabor-Express.git](Neste link consta meu Github contendo o .json com os dados armazenados)

Oiii Gabriel,

É muito bom poder acompanhar a sua evolução nos estudos junto a Alura. Sua dedicação em ir além do proposto nas atividades é muito importante, testei o seu código e a exportação dos dados para um arquivo JSON funcionou corretamente, como demonstrado no GIF abaixo:

GIF exibindo a execução do código do Aluno

Vejo que você gostou bastante do formato JSON, gostaria de contribuir um pouco mais para seu aprendizado sobre o JSON e recomendar a leitura do seguinte artigo da Alura: Saiba o que é JSON e como utilizar, nele aborda com detalhes sobre o que é JSON e suas regras de utilização.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!