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}' )
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!')
class Servidor(): def __init__(self): self.conexao = None self.serv = None self.banco = Banco() self.iniciar() self.menu() def iniciar(self): 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): dados_recebidos = self.conexao.recv(1024).decode() dados = list(dados_recebidos.split(',')) #print(f'Recebido: {dados}') return dados def enviar_dados(self, dados): 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: d = self.recebe_dados() print(d) 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) else: print('cliente encerrado') self.conexao = None print('aguardando conexao...') con, client = self.serv.accept() print(f'Conectado a {client}') self.conexao = con # lista: [1,cpf,nome,sobrenome,senha] def cadastro(self, d): if not self.banco._bd.busca(d[1]): if self.banco.cadastrar_conta(d[1], d[2], d[3], d[4]): numero = self.banco._bd.numero(d[1]) self.enviar_dados('True,{}'.format(numero)) else: self.enviar_dados('False') else: self.enviar_dados('False') #lista: [2,cpf,senha] def login(self, d): if self.banco.login(d[1], d[2]): dados = str(self.banco.conta_atual).strip('[]') self.enviar_dados(dados) else: self.enviar_dados(False) #lista: [3,valor] def deposito(self, d): d[1] = float(d[1]) dep = self.banco.depositar(d[1]) self.enviar_dados(dep) #lista: [4,valor] def saque(self, d): d[1] = float(d[1]) saq = self.banco.saque(d[1]) self.enviar_dados(saq) #lista = [5,cpf] def extrato(self): self.enviar_dados(self.banco.extrato()) #lista: [6,cpf_dest,valor] def transferencia(self, d): d[2] = float(d[2]) self.enviar_dados(self.banco.transfere(d[1], d[2]))