Beispiel #1
0
class Main(QMainWindow, Ui_Main):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUI(self)
        self.banco = Banco()
        #tela inicial
        self.tela_inicial.ButtonCadastrar.clicked.connect(
            self.abrirTelaCadastro)
        self.tela_inicial.ButtonLogin.clicked.connect(self.abrirTelaLogin)
        #Tela cadastro
        self.tela_cadastro.ButtonConfirmar.clicked.connect(self.cadastro)
        self.tela_cadastro.ButtonVoltar.clicked.connect(self.abrirTelaInicial)
        #Tela login
        self.tela_login.ButtonEntrar.clicked.connect(self.botaoLogin)
        self.tela_login.ButtonVoltar.clicked.connect(self.abrirTelaInicial)
        #Tela opcoes
        self.tela_opcoes.ButtonExtrato.clicked.connect(self.abrirTelaExtrato)
        self.tela_opcoes.ButtonSaque.clicked.connect(self.abrirTelaSaque)
        self.tela_opcoes.ButtonDeposito.clicked.connect(self.abrirTelaDeposito)
        self.tela_opcoes.ButtonTransferir.clicked.connect(
            self.abrirTelaTransferencia)
        self.tela_opcoes.ButtonVoltar.clicked.connect(self.sairOpcoes)
        #Tela extrato
        self.tela_extrato.ButtonVoltar.clicked.connect(self.abrirTelaOpcoes)
        #Tela saque
        self.tela_saque.ButtonVoltar.clicked.connect(self.abrirTelaOpcoes)
        self.tela_saque.ButtonConfirmar.clicked.connect(self.botaoSaque)
        #Tela deposito
        self.tela_deposito.ButtonVoltar.clicked.connect(self.abrirTelaOpcoes)
        self.tela_deposito.ButtonConfirmar.clicked.connect(self.botaoDeposito)
        #tela transferencia
        self.tela_transferencia.ButtonVoltar.clicked.connect(
            self.abrirTelaOpcoes)
        self.tela_transferencia.ButtonTransferir.clicked.connect(
            self.botaoTransfere)

    #tela inicial
    def abrirTelaInicial(self):
        self.QtStack.setCurrentIndex(0)

    #tela cadastro
    def abrirTelaCadastro(self):
        self.tela_cadastro.lineEditNome.setText('')
        self.tela_cadastro.lineEditSobrenome.setText('')
        self.tela_cadastro.lineEditCpf.setText('')
        self.tela_cadastro.lineEditSenha.setText('')
        self.QtStack.setCurrentIndex(1)

    def cadastro(self):
        nome = self.tela_cadastro.lineEditNome.text()
        sobrenome = self.tela_cadastro.lineEditSobrenome.text()
        cpf = self.tela_cadastro.lineEditCpf.text()
        senha = self.tela_cadastro.lineEditSenha.text()
        if not (nome == '' or sobrenome == '' or cpf == '' or senha == ''):
            if cpf not in self.banco.clientes:
                c = Cliente(nome, sobrenome, cpf)
                if (self.banco.cadastrar_cliente(c)):
                    conta = Conta(c, senha)
                    if self.banco.cadastrar_conta(conta):
                        QMessageBox.information(
                            None, '$Bank',
                            f'O seu cadastro foi realizado!\nNumero da conta: {conta.numero}'
                        )
                        self.abrirTelaInicial()
                else:
                    QMessageBox.information(None, '$Bank',
                                            'Erro ao cadastrar dados')
            else:
                QMessageBox.information(None, '$Bank',
                                        'O CPF informado já está cadastrado!')
        else:
            QMessageBox.information(
                None, '$Bank', 'É obrigatório preencher todos os campos!')

    #tela login
    def abrirTelaLogin(self):
        self.tela_login.lineEditCpf.setText('')
        self.tela_login.lineEditSenha.setText('')
        self.QtStack.setCurrentIndex(2)

    def botaoLogin(self):
        cpf = self.tela_login.lineEditCpf.text()
        senha = self.tela_login.lineEditSenha.text()
        if (cpf != '' and senha != ''):
            if self.banco.login(cpf, senha):
                #QMessageBox.information(None, "$Bank", f'{self.banco.conta_atual.cliente.cpf}\n{self.banco.conta_atual.numero}')
                self.abrirTelaOpcoes()
            else:
                QMessageBox.information(None, "$Bank", "Falha no login")
        else:
            QMessageBox.information(
                None, '$Bank', 'É obrigatório preencher todos os campos!')

    #tela_opcoes
    def abrirTelaOpcoes(self):
        self.tela_opcoes.lineEditNome.setText(
            f'{self.banco.conta_atual.cliente.nome} {self.banco.conta_atual.cliente.sobrenome}'
        )
        self.tela_opcoes.lineEditSaldo.setText(
            f'Saldo: R$ {(self.banco.conta_atual.saldo)}')
        self.QtStack.setCurrentIndex(3)

    def sairOpcoes(self):
        self.banco.conta_atual = None
        self.QtStack.setCurrentIndex(0)

    #tela extrato
    def abrirTelaExtrato(self):
        self.tela_extrato.lineEditNome.setText(
            f'   {self.banco.conta_atual.cliente.nome} {self.banco.conta_atual.cliente.sobrenome}'
        )
        self.tela_extrato.lineEditNumero.setText(
            f'   {self.banco.conta_atual.numero}')
        self.tela_extrato.lineEditSaldo.setText(
            f'  R$ {self.banco.conta_atual.saldo}')
        self.tela_extrato.lineEditLimite.setText(
            f'  R$ {self.banco.conta_atual.limite}')
        self.tela_extrato.textEdit.setText(
            self.banco.conta_atual.imprimir_transacoes())
        self.QtStack.setCurrentIndex(4)

    #tela saque
    def abrirTelaSaque(self):
        self.tela_saque.lineEditValor.setText('')
        self.QtStack.setCurrentIndex(5)

    def botaoSaque(self):
        valor = self.tela_saque.lineEditValor.text()
        if (valor != ''):
            if self.banco.conta_atual.saque(float(valor.replace(',', '.'))):
                self.tela_saque.lineEditValor.setText('')
                QMessageBox.information(None, '$Bank',
                                        'O seu saque foi realizado!')
                self.abrirTelaOpcoes()
            else:
                QMessageBox.information(None, '$Bank',
                                        'Valor não disponível para saque!')
        else:
            QMessageBox.information(
                None, '$Bank', 'É obrigatório preencher todos os campos!')

    #tela deposito
    def abrirTelaDeposito(self):
        self.tela_deposito.lineEditValor.setText('')
        self.QtStack.setCurrentIndex(6)

    def botaoDeposito(self):
        valor = self.tela_deposito.lineEditValor.text()
        if (valor != ''):
            if self.banco.conta_atual.depositar(float(valor.replace(',',
                                                                    '.'))):
                self.tela_saque.lineEditValor.setText('')
                QMessageBox.information(None, '$Bank',
                                        'O seu depósito foi realizado!')
                self.abrirTelaOpcoes()
        else:
            QMessageBox.information(
                None, '$Bank', 'É obrigatório preencher todos os campos!')

    #tela transferir
    def abrirTelaTransferencia(self):
        self.tela_transferencia.lineEditConta.setText('')
        self.tela_transferencia.lineEditCpf.setText('')
        self.tela_transferencia.lineEditValor.setText('')
        self.QtStack.setCurrentIndex(7)

    def botaoTransfere(self):
        conta = self.tela_transferencia.lineEditConta.text()
        cpf = self.tela_transferencia.lineEditCpf.text()
        valor = self.tela_transferencia.lineEditValor.text()
        if not (conta == '' or cpf == '' or valor == ''):
            conta_dest = self.banco.busca(cpf)
            if (conta_dest != 0):
                if (self.banco.conta_atual.transfere_para(
                        conta_dest, float(valor.replace(',', '.')))):
                    QMessageBox.information(
                        None, '$Bank',
                        f'Transferência foi realizada!\nDestinatario:{conta_dest.cliente.nome}, CPF {conta_dest.cliente.cpf}\nValor: R${valor}'
                    )
                    self.tela_transferencia.lineEditConta.setText('')
                    self.tela_transferencia.lineEditCpf.setText('')
                    self.tela_transferencia.lineEditValor.setText('')
                    self.abrirTelaOpcoes()
                else:
                    QMessageBox.information(
                        None, '$Bank', 'Erro ao realizar a transferencia')
            else:
                QMEssageBox.information(None, "$Bank", 'Conta invalida!')
        else:
            QMessageBox.information(
                None, '$Bank', 'É obrigatório preencher todos os campos!')
Beispiel #2
0
class Servidor():
    '''
    Classe que representa o servidor do banco

    '''
    def __init__(self):
        self.conexao = None
        self.serv = None
        self.banco = Banco()
        self.iniciar()
        self.menu()

    def iniciar(self):
        '''
            Metodo que inicia a conexao do servidor
        '''
        host = 'localhost'
        port = 8000
        addr = (host, port)
        serv_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serv_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        serv_socket.bind(addr)
        serv_socket.listen(10)
        print('aguardando conexao...')
        con, client = serv_socket.accept()
        print(f'Conectado a {client}')
        self.conexao = con
        self.serv = serv_socket

    def recebe_dados(self):
        '''
            Metodo para converter a string recebida em uma lista
        '''
        dados_recebidos = self.conexao.recv(1024).decode()
        dados = list(dados_recebidos.split(','))
        print('Recebido: ' + dados)
        return dados

    def enviar_dados(self, dados):
        '''
            Metodo para enviar uma string ao cliente
        '''
        self.conexao.send(str(dados).encode())
        print("Enviado!")

    def menu(self):
        '''
            Metodo que recebe dados de um cliente e chama um metodo de acordo com o primeiro item:
            1 - cadastra uma conta
            2 - login
            3 - Deposito
            4 - Saque
            5 - Extrato
            6 - transferencia
            Se o primeiro item nao for uma das opcoes acima, a conexao com o cliente é encerrada
        '''
        while True:
            try:
                d = self.recebe_dados()
                if d[0] == '1':
                    self.cadastro(d)
                elif d[0] == '2':
                    self.login(d)
                elif d[0] == '3':
                    self.deposito(d)
                elif d[0] == '4':
                    self.saque(d)
                elif d[0] == '5':
                    self.extrato()
                elif d[0] == '6':
                    self.transferencia(d)
            except:
                print('cliente encerrado')
                self.conexao = None
                print('aguardando conexao...')
                con, client = self.serv.accept()
                print(f'Conectado a {client}')
                self.conexao = con

    # lista: [1,nome,sobrenome,cpf, senha]
    def cadastro(self, d):
        '''
            Esse metodo cadastra uma conta

            Args:
                d (list): lista com a opcao (1), nome, sobrenome, cpf e senha
        '''
        if self.banco.busca(d[3]) == 0:
            c = Cliente(d[1], d[2], d[3])
            if self.banco.cadastrar_cliente(c):
                conta = Conta(c, d[4])
                if self.banco.cadastrar_conta(conta):
                    self.enviar_dados('True,{}'.format(
                        self.banco.conta_atual.numero))
            else:
                self.enviar_dados('False,0')
        else:
            self.enviar_dados('False,0')

    #lista: [2,cpf,senha]
    def login(self, d):
        '''
            Metodo para fazer login

            Args:
                d (list): lista com a opcao (2), cpf e senha do cliente
        '''
        if self.banco.login(d[1], d[2]):
            dados = f'{self.banco.conta_atual.cliente.nome},{self.banco.conta_atual.cliente.sobrenome},{self.banco.conta_atual.numero},{self.banco.conta_atual.saldo},{self.banco.conta_atual.limite}'
            self.enviar_dados(dados)
        else:
            self.enviar_dados(False)

    #lista: [3,valor]
    def deposito(self, d):
        '''
            Metodo para fazer deposito em uma conta

            Args:
                d (list): lista com a opcao (3), e o valor a ser depositado
        '''
        d[1] = float(d[1])
        dep = self.banco.conta_atual.depositar(d[1])
        self.enviar_dados(dep)

    #lista: [4,valor]
    def saque(self, d):
        '''
            Metodo para realizar o saque em uma conta

            Args:
                d (list): lista com a opcao (4), e o valor a ser sacado
        '''
        d[1] = float(d[1])
        saq = self.banco.conta_atual.saque(d[1])
        self.enviar_dados(saq)

    #lista = [5,cpf]
    def extrato(self):
        '''
            Metodo que retorna o extrato de uma conta

            Args:
                d (list): lista com a opcao(5) e o cpf do cliente
        '''
        self.enviar_dados(self.banco.conta_atual.imprimir())

    #lista: [6,cpf_dest,valor]
    def transferencia(self, d):
        '''
            Metodo que faz a transferencia de um valor para outra conta

            Args:
                d (list): lista com a opcao(6), o cpf do destinatario e o valor a ser transferido       
        '''
        d[2] = float(d[2])
        if self.banco.busca(d[1]):
            self.enviar_dados(
                self.banco.conta_atual.transfere_para(
                    self.banco.conta_transferencia, d[2]))
        else:
            print('erro')
            self.enviar_dados(
                f'False,{self.banco.conta_atual.saldo},{self.banco.conta_atual.limite}'
            )