-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
190 lines (143 loc) · 6.9 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
'''Importação para poder limpar a tela'''
import os
restaurantes = [{'nome': 'Praça', 'categoria': 'Japonesa', 'ativo': False},
{'nome': 'Pizza Suprema', 'categoria': 'Pizza', 'ativo': True},
{'nome': 'Cantina', 'categoria': 'Italizano', 'ativo': False}]
def exibir_nome_do_programa():
'''
Apresenta o nome estilizado do programa na tela inicial
'''
print('''
░██████╗░█████╗░██████╗░░█████╗░██████╗░ ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗ ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝ █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗ ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║ ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝ ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░
''') # Fsymbols.com
def exibir_opcoes():
'''
Mostrar todas as opções que poderá ser selecionado no menu inicial
'''
print('1. Cadastrar Restaurante')
print('2. Listar Restaurante')
print('3. Alterar Estado do Restaurante')
print('4. Sair')
def finalizar_app():
'''
Mostra a mensagem de finalização do programa
'''
exibir_subtitulo('Finalizando o app')
def voltar_ao_menu_principal():
'''
Solicita uma tecla para retornar ao menu inicial e redireciona para o mesmo
Output:
Retorna ao menu principal
'''
input('\nDigite uma tecla para voltar ao menu principal')
main()
def opcao_invalida(mensagem):
'''
Mostra na tela uma mensagem de erro de acordo com a chamada dessa função
Output:
Retorna ao menu principal
'''
print(mensagem)
voltar_ao_menu_principal()
def exibir_subtitulo(subtitulo):
'''Essa Função tem a resposabilidade de mostrar os subtítulos do programa.
Params:
subtitulo (str): texto que deverá ser mostrado na tela
'''
os.system('cls') # No Windows
linha = '*' * (len(subtitulo) + 4)
print(f'\033[1;034m{linha}\033[0;037m')
print(f' \033[1;032m{subtitulo}\033[0;037m ')
print(f'\033[1;034m{linha}\033[0;037m')
print()
def cadastrar_novo_resteurante():
'''
Cadastra um novo restaurante na lista de restaurantes.
Inputs:
nome_do_restaurante (str): O nome do restaurantte que será adicionado.
categoria (str): A categoria do restaurante que será adicionado.
Output:
Adiciona o novo restaurante na lista de restaurantes.
'''
try:
exibir_subtitulo('Cadastro de novos resteurantes')
nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
# Alt-z para visualizar tudo
if not nome_do_restaurante:
raise ValueError('Nome do restaurante não foi inserido')
categoria = input(f'Digite a categoria do restaurante {nome_do_restaurante}: ')
if not categoria:
raise ValueError('Categoria não foi inserida')
dados_do_restaurante = {'nome': nome_do_restaurante, 'categoria': categoria, 'ativo': False}
restaurantes.append(dados_do_restaurante)
print(f'O restaurante {nome_do_restaurante} foi adicionado com sucesso!')
voltar_ao_menu_principal()
except Exception as ve:
opcao_invalida(ve)
def listar_restaurantes():
'''
Mosta na tela todos os restaurantes cadastrados.
Output:
Exibe a lista de restaurantes na tela
'''
exibir_subtitulo('Listando restaurantes')
print(f'{'Nome do restaurante'.ljust(22)} | {'Categoria'.ljust(20)} | Status ')
for restaurante in restaurantes:
nome = restaurante['nome']
categoria = restaurante['categoria']
ativo = 'ativado' if restaurante['ativo'] else 'desativado'
print(f'- {nome.ljust(20)} | {categoria.ljust(20)} | {ativo}')
voltar_ao_menu_principal()
def alternar_estado_restaurante():
'''
Altera o estado de um restaurante cadastrado.
Inputs:
nome_retaurante (str): nome do restaurante que terá seu estado alterado
Output:
Alteração do estado do restaurante selecionado'''
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 == restaurante['nome']:
restaurante_encontrado = True
restaurante['ativo'] = not restaurante['ativo']
status = 'ativado' if restaurante['ativo'] else 'dessativado'
mensagem = f'O restaurante {nome_restaurante} foi {status} com sucesso'
print(mensagem)
if not restaurante_encontrado:
print(f'O restaurante {nome_restaurante} não foi encontrado')
voltar_ao_menu_principal()
def escolher_opcao():
'''
Requere que uma opção seja escolhida entre as opções da tela.
Inputs:
opcao_escolhida (int): Opção que será selecionada.
Output:
Executa a operação escolhida.
'''
try:
opcao_escolhida = int(input('Escolha uma opção: '))
match opcao_escolhida:
case 1: cadastrar_novo_resteurante()
case 2: listar_restaurantes()
case 3: alternar_estado_restaurante()
case 4: finalizar_app()
case _:opcao_invalida("Opcao inválida!\n")
except Exception:
opcao_invalida("Opcao inválida! \n")
def main():
'''
Inicia o fluxo do programa principal
'''
os.system('cls')
exibir_nome_do_programa()
exibir_opcoes()
escolher_opcao()
if __name__ == '__main__':
main()