コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
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)
コード例 #5
0
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