2
respostas

CRIANDO RESTAURANTE

Eu posso estar entendendo errado, preciso de apoio. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

No caso esta sendo definido cada restaurante que eu quero que apareça, porem eu quero que quando eu cadastre um novo resturante que ele fique salvo e que quando execute o código novamente, este restaurante ja esteja ali, é possivel?

2 respostas

Oii, Marcos!

Você está no caminho certo ao usar listas de dicionários para armazenar os dados dos restaurantes. Porém, ao executar o programa novamente, os dados não são salvos automaticamente, pois ficam apenas na memória temporária (RAM). Assim que o programa é fechado, tudo é perdido.

Para resolver isso, você pode usar um arquivo externo para persistir os dados. Um jeito de fazer isso é usar JSON. Vou te mostrar como salvar e carregar os restaurantes usando o módulo json.

Atualize seu código com essas etapas:

1. Adicione o import json no início:

import json

2. Crie funções para salvar e carregar os dados:

ARQUIVO_RESTAURANTES = 'restaurantes.json'

def carregar_restaurantes():
    try:
        with open(ARQUIVO_RESTAURANTES, 'r') as arquivo:
            return json.load(arquivo)
    except FileNotFoundError:
        return []

def salvar_restaurantes():
    with open(ARQUIVO_RESTAURANTES, 'w') as arquivo:
        json.dump(restaurantes, arquivo, indent=4)

3. Substitua a lista fixa por:

restaurantes = carregar_restaurantes()

4. Depois de qualquer modificação nos dados, salve:

Dentro da função cadastrar_novo_restaurante (e outras que alteram a lista), adicione:

salvar_restaurantes()

Exemplo da função alterada:

def cadastrar_novo_restaurante():
    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)
    salvar_restaurantes()
    print(f'O restaurante {nome_do_restaurante} foi cadastrado com sucesso!')
    voltar_ao_menu_principal()

Com essas mudanças, os dados dos restaurantes ficarão salvos em um arquivo JSON. Sempre que rodar o programa de novo, ele irá carregar a lista do arquivo, permitindo continuar de onde parou.

Vou mandar o código completo na continuação na resposta abaixo.

  • Código completo:
import os
import json

ARQUIVO_RESTAURANTES = 'restaurantes.json'

def carregar_restaurantes():
    try:
        with open(ARQUIVO_RESTAURANTES, 'r') as arquivo:
            return json.load(arquivo)
    except FileNotFoundError:
        return []

def salvar_restaurantes():
    with open(ARQUIVO_RESTAURANTES, 'w') as arquivo:
        json.dump(restaurantes, arquivo, indent=4)

restaurantes = carregar_restaurantes()

def exibir_nome_do_programa():
    print("""
░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░  
""")

def exibir_opcoes():
    print('1. Cadastrar restaurante')
    print('2. Listar restaurantes')
    print('3. Alternar estado do restaurante')
    print('4. Sair\n')

def finalizar_app():
    exibir_subtitulo('Finalizar app')

def voltar_ao_menu_principal():
    input('\nDigite uma tecla para voltar ao menu ')
    main()

def opcao_invalida():
    print('Opção inválida!\n')
    voltar_ao_menu_principal()

def exibir_subtitulo(texto):
    os.system('cls' if os.name == 'nt' else 'clear')
    linha = '*' * len(texto)
    print(linha)
    print(texto)
    print(linha)
    print()

def cadastrar_novo_restaurante():
    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)
    salvar_restaurantes()
    print(f'O restaurante {nome_do_restaurante} foi cadastrado com sucesso!')
    voltar_ao_menu_principal()

def listar_restaurantes():
    exibir_subtitulo('Listando restaurantes')
    print(f'{"Nome do restaurante".ljust(22)} | {"Categoria".ljust(20)} | Status')
    for restaurante in restaurantes:
        nome_restaurante = restaurante['nome']
        categoria = restaurante['categoria']
        ativo = 'ativado' if restaurante['ativo'] else 'desativado'
        print(f'- {nome_restaurante.ljust(20)} | {categoria.ljust(20)} | {ativo}')
    voltar_ao_menu_principal()

def alternar_estado_restaurante():
    exibir_subtitulo('Alterando estado do restaurante')
    nome_restaurante = input('Digite o nome do restaurante que deseja alterar o estado: ')
    restaurante_encontrado = False

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

    if not restaurante_encontrado:
        print('O restaurante não foi encontrado')

    voltar_ao_menu_principal()

def escolher_opcao():
    try:
        opcao_escolhida = int(input('Escolha uma opção: '))

        if opcao_escolhida == 1:
            cadastrar_novo_restaurante()
        elif opcao_escolhida == 2:
            listar_restaurantes()
        elif opcao_escolhida == 3:
            alternar_estado_restaurante()
        elif opcao_escolhida == 4:
            finalizar_app()
        else:
            opcao_invalida()
    except:
        opcao_invalida()

def main():
    os.system('cls' if os.name == 'nt' else 'clear')
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcao()

if __name__ == '__main__':
    main()

Esse arquivo Json será criado:

Print menu VSCODE

Se não for criado logo de primeira você pode fechar o VSCODE e abrir de novo, às vezes ocorrem bugs mesmo.

Espero ter te ajudado.

Um abraço e bons estudos.