def transfere(cnta:str,valor:float,destino:str,cursor,sinc)->bool: if Conta.saca(cnta,valor,cursor,False): if Conta.deposita(destino,valor,cursor,False,sinc): cursor.execute('SELECT titular,numero FROM contas') for num_cont in cursor: if(num_cont[1] == destino): aux = num_cont[0] cursor.execute('SELECT nome,cpf FROM pessoas') for nome in cursor: if(nome[1] == aux): cliente = nome[0] nova_transacao = 'Transferencia para {} -- Data: {} Valor: {}'.format(cliente,datetime.now().strftime('%d/%m/%Y %H:%M'),valor) Historico.adicionar_transacao(cnta,nova_transacao,cursor) cursor.execute('SELECT titular,numero FROM contas') for num_cont2 in cursor: if(num_cont2[1] == cnta): aux2 = num_cont2[0] cursor.execute('SELECT nome,cpf FROM pessoas') for nome2 in cursor: if(nome2[1] == aux): cliente2 = nome2[0] nova_transacao = 'Tranferencia recebida de "{}" -- Data: {} Valor: {} '.format(cliente2,datetime.now().strftime('%d/%m/%Y %H:%M'),valor) Historico.adicionar_transacao(destino,nova_transacao,cursor) return True return False
def saca(cnta:str,valor:float,cursor,controle)->bool: saldo = 0.0 cursor.execute('SELECT numero,saldo FROM contas') for conta in cursor: conta[0] == cnta saldo = conta[1] if valor <= saldo and valor > 0: saldo -= valor cursor.execute('UPDATE contas SET saldo = %s WHERE numero = %s',(float(saldo),cnta)) if controle: nova_transacao = 'Saque -- Data: {} Valor: {}'.format((datetime.now().strftime('%d/%m/%Y %H:%M')),valor) Historico.adicionar_transacao(cnta,nova_transacao,cursor) return True return False
def deposita(cnta:str,valor:float,cursor,controle,sinc)->bool: saldo = 0.0 sinc.acquire() cursor.execute('SELECT numero,saldo FROM contas') sinc.release() for conta in cursor: conta[0] == cnta saldo = conta[1] if valor > 0: saldo += valor sinc.acquire() cursor.execute('UPDATE contas SET saldo = %s WHERE numero = %s',(float(saldo),cnta)) sinc.release() if controle: nova_transacao = 'Deposito -- Data: {} Valor: {}'.format(datetime.now().strftime('%d/%m/%Y %H:%M'),valor) Historico.adicionar_transacao(cnta,nova_transacao,cursor) return True return False
class Conta: __slots__ = [ '_numero', '_senha', '_saldo', '_cliente', '_limite', '_historico' ] cont = 0 #contador da classe def __init__(self, cliente, senha, saldo=0, limite=5000): self._numero = str((Conta.cont + 1) * 1000) self._saldo = float(saldo) self._cliente = cliente self._senha = str(senha) self._limite = float(limite) self._historico = Historico() Conta.cont += 1 #metodos de acesso @property def numero(self): return self._numero @property def senha(self): return self._senha @senha.setter def senha(self, s): self._senha = s @property def cliente(self): return self._cliente @cliente.setter def cliente(self, c): self._cliente = c @property def limite(self): return self._limite @limite.setter def limite(self, l): self._limite = l @property def saldo(self): return self._saldo @saldo.setter def saldo(self, s): self._saldo = s @property def historico(self): return self._historico #Metodos def saque(self, valor): if self._saldo < valor: #return 'Valor não disponível para saque!' return False else: self._saldo -= valor self._limite += valor self._historico.adicionar_transacao('Saque', valor) #return 'Saque realizado com sucesso!\nSaldo restante = {}'.format(self._saldo) return True def depositar(self, valor): if valor > self._limite: return False else: self._saldo += valor self._limite -= valor self._historico.adicionar_transacao('Deposito', valor) #return 'Deposito realizado com sucesso!\nSaldo da conta = {}'.format(self._saldo) return True ''' def extrato(self): print("numero: {} saldo: {}".format(self._numero, self._saldo)) self._historico.adicionar_transacao("tirou extrato - saldo de {}".format(self._saldo)) ''' def transfere_para(self, c, valor): if valor > self._saldo: #return 'Valor a ser transferido não pode ser negativo!' #return 'Valor não disponível para transferencia!' return False else: self._saldo -= valor self._limite += valor c._saldo += valor c._limite -= valor self._historico.adicionar_transacao( f'Transferencia para {c.cliente.nome}', valor) c._historico.adicionar_transacao( f'Transferencia recebida de {self._cliente.nome}', valor) #return 'Transferencia realizada com sucesso!' return True def imprimir_transacoes(self): historico = '' transacoes = self._historico._transacoes for transacao in transacoes: historico += transacao return historico def imprimir_conta(self): print('Titular = ', self._cliente.nome, 'Numero = ', self._numero, 'Saldo = ', self._saldo, 'Limite = ', self._limite)
class Conta: ''' Essa classe representa uma conta do banco Attributes: numero (str): numero da conta (id) saldo (float): qnt de dinheiro disponivel cliente (Cliente): objeto Cliente com os dados do titular senha (str): senha para realizar operacoes na conta limite (float): valor maximo para depositar na conta historico (Historico): objeto historico que armazena as operacoes feitas na conta ''' __slots__ = [ '_numero', '_senha', '_saldo', '_cliente', '_limite', '_historico' ] cont = 0 #contador da classe def __init__(self, cliente, senha, saldo=0, limite=5000): self._numero = str((Conta.cont + 1) * 1000) self._saldo = float(saldo) self._cliente = cliente self._senha = str(senha) self._limite = float(limite) self._historico = Historico() Conta.cont += 1 #metodos de acesso @property def numero(self): return self._numero @property def senha(self): return self._senha @senha.setter def senha(self, s): self._senha = s @property def cliente(self): return self._cliente @cliente.setter def cliente(self, c): self._cliente = c @property def limite(self): return self._limite @limite.setter def limite(self, l): self._limite = l @property def saldo(self): return self._saldo @saldo.setter def saldo(self, s): self._saldo = s @property def historico(self): return self._historico #Metodos def saque(self, valor): ''' Metodo para retirar um valor da conta Args: valor(float): valor a ser retirado da conta Returns: 1. Se o saldo for menor que o valor: 'False,saldo,limite' 2. Caso contrario: 'True,saldo,limite' ''' if self._saldo < valor: #return 'Valor não disponível para saque!' return f'False,{self._saldo},{self._limite}' else: self._saldo -= valor self._limite += valor self._historico.adicionar_transacao('Saque', valor) #return 'Saque realizado com sucesso!\nSaldo restante = {}'.format(self._saldo) return f'True,{self._saldo},{self._limite}' def depositar(self, valor): ''' Metodo que realiza o deposito na conta Args: valor(float): valor a ser depositado Returns: 1. Se o valor for maior que o limite: 'False,saldo,limite' 2. Caso contrario: 'True,saldo,limite' ''' if valor > self._limite: return f'False,{self._saldo},{self._limite}' else: self._saldo += valor self._limite -= valor self._historico.adicionar_transacao('Deposito', valor) #return 'Deposito realizado com sucesso!\nSaldo da conta = {}'.format(self._saldo) return f'True,{self._saldo},{self._limite}' def transfere_para(self, c, valor): ''' Metodo que faz a transferencia de um valor para outra conta Args: c (Conta): conta que vai receber o valor valor (float): valor a ser transferido Returns: 1. Se o saldo for menor que o valor: 'False,saldo,limite' 2. Caso contrario: 'True,saldo,limite' ''' if valor > self._saldo: #return 'Valor a ser transferido não pode ser negativo!' #return 'Valor não disponível para transferencia!' return f'False,{self._saldo},{self._limite}' else: self._saldo -= valor self._limite += valor c._saldo += valor c._limite -= valor self._historico.adicionar_transacao( f'Transferencia para {c.cliente.nome}', valor) c._historico.adicionar_transacao( f'Transferencia recebida de {self._cliente.nome}', valor) #return 'Transferencia realizada com sucesso!' return f'True,{self._saldo},{self._limite}' def imprimir(self): ''' Metodo que retorna uma string com o extrato da conta ''' transacoes = self._historico._transacoes lista = [item + ',' for item in transacoes] historico = ''.join(lista) return historico