-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransacao.py
153 lines (133 loc) · 4.69 KB
/
transacao.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
dados = []
def criar_arquivo():
arquivo = open('transacoes.csv', 'w')
def arquivar():
"""Ler o arquivo CSV e transforma cada linha em um dicionário que fica armazenado em uma lista"""
with open('transacoes.csv', 'r') as arquivo:
for index, dado in enumerate(arquivo):
dado = dado.rstrip('\n')
colunas = dado.split(',')
valor = float(colunas[2])
dict = {
"id": index + 1,
"nome": colunas[0].replace("*",","),
"categoria": colunas[1],
"valor": valor
}
dados.append(dict)
return dados
def extrato():
"""Printa cada dicionário"""
print("----------------------- EXTRATO -----------------------")
print(f'ID'.ljust(15), 'NOME'.ljust(15), 'CATEGORIA'.ljust(15), 'VALOR'.ljust(15))
for dict in dados:
for chave, valor in dict.items():
valor = str(valor)
print(valor.ljust(15), end=' ')
print()
def filtrar():
"""Filtra o dicionário de acordo com categoria. (Se não existir continua pedindo input do user)"""
while True:
try:
categoria = input("Digite a categoria que deseja filtrar: ").title()
categoria_encontrada = False
print("----------------------- EXTRATO -----------------------")
print(f'ID'.ljust(15), 'NOME'.ljust(15), 'CATEGORIA'.ljust(15), 'VALOR'.ljust(15))
for dict in dados:
if categoria in dict['categoria']:
categoria_encontrada = True
for chave, valor in dict.items():
valor = str(valor)
print(valor.ljust(15), end=' ')
print()
if not categoria_encontrada:
raise ValueError
except ValueError:
print("Categoria não encontrada.")
else:
break
def add():
"""Adiciona uma transação"""
try:
with open('transacoes.csv', 'a') as arquivo:
print("Adicione uma transação: ")
nome = input("Nome: ").title()
# tratar erro nome com ,
if ',' in nome:
nome = nome.replace(',','*')
categoria = input("Categoria: ").title()
valor = input("Valor: ")
arquivo.write(f'{nome},{categoria},{valor}\n')
finally:
print("Transação adicionada com sucesso!")
def atualizar():
"""Atualiza os dados de uma transação. Se ID não existir continua pedindo input do user"""
extrato()
while True:
id = int(input("Digite o ID da transação deseja alterar: "))
id_encontrado = False
try:
for dict in dados:
if id == dict['id']:
id_encontrado = True
print("Atualize uma transação: ")
nome = input("Nome: ").title()
categoria = input("Categoria: ").title()
valor = input("Valor: ")
dados[id-1] = {
"id": id,
"nome": nome,
"categoria": categoria,
"valor": valor
}
with open('transacoes.csv', 'w') as arquivo:
for dict in dados:
# tratar erro nome com ,
dict['nome'] = dict['nome'].replace(',','*')
arquivo.write(f"{dict['nome']},{dict['categoria']},{dict['valor']}\n")
break
if not id_encontrado:
raise ValueError
except ValueError:
print("Transação não existe.")
else:
print("Transação atualizada com sucesso!")
break
def deletar():
"""Deleta uma transação. Se ID não existir, continua pedindo input do user"""
extrato()
while True:
id = int(input("Digite o ID da transação que deseja deletar: "))
id_encontrado = False
try:
for dict in dados:
if id == dict['id']:
id_encontrado = True
if not id_encontrado:
raise ValueError
# tira a transação dos dados e reescreve o arquivo csv
dados.pop(id - 1)
with open('transacoes.csv', 'w') as arquivo:
for dict in dados:
# tratar erro nome com ,
dict['nome'] = dict['nome'].replace(',','*')
arquivo.write(f"{dict['nome']},{dict['categoria']},{dict['valor']}\n")
except ValueError:
print("Transação não existe.")
else:
print("Transação deletada com sucesso!")
break
def budget():
"""User coloca input de um orçamento. É calculado o valor total já gasto e o valor poupado"""
while True:
try:
budget = float(input("Digite seu budget: "))
total = 0
for dict in dados:
total += dict['valor']
sobra = budget - total
print(f"BUDGET".ljust(15), "GASTO".ljust(15), "POUPADO")
print(str(budget).ljust(15), str(total).ljust(15), str(sobra).ljust(15))
break
except ValueError:
print("Digite um valor.")