print('=' * 25)
x = str(input('Digite o Número da Conta: '))
y = str(input('Nome do Cliente: '))
print(f'{"Bem vindo(a)!":^25}')
print(f'O que deseja fazer hoje {y}?')

cliente1 = Banco(x, y)

while True:
    print('''Para extrato digite 1
Para saque digite 2
Para deposito digite 3
Para sair digite 000''')
    print('=' * 25)
    x = int(input('Opção desejada: '))
    print('=' * 25)
    if x == 1:
        cliente1.extrato()
        print('=' * 25)
    elif x == 2:
        cliente1.sacar()
        print('=' * 25)
    elif x == 3:
        cliente1.depositar()
        print('=' * 25)
    elif x == 000:
        print('Tenha um ótimo dia, até mais.')
        break
    else:
        print('Opção inválida, tente novamente.')
Exemple #2
0
class TestCajeros(unittest.TestCase):

    def setUp(self):
        self.banco = Banco("Seguritas")
        self.rut1 = "18.375.852-2"
        self.nombre1 = "Alberto Rodriguez"
        self.clave1 = 2345
        self.rut2 = "13.432.113-k"
        self.nombre2 = "Fernanda Pereira"
        self.clave2 = 5912
        self.banco.agregar_usuario(self.rut1, self.nombre1, self.clave1)
        self.banco.agregar_usuario(self.rut2, self.nombre2, self.clave2)
        self.cajero = CajeroAutomatico(self.banco)

    def test_credenciales(self):
        # primer caso: rut y clave correctos
        self.cajero.login(self.rut1, self.clave1)
        rutingresado = self.banco.usuarioactual.rut
        self.assertEqual(self.rut1, rutingresado)
        # segundo caso: rut correcto pero clave incorrecta
        self.cajero.login(self.rut1, 1234)
        self.assertIsNone(self.banco.usuarioactual)
        # tercer caso: rut no está en la base de datos del banco
        self.cajero.login("10.000.000-1", 1234)
        self.assertIsNone(self.banco.usuarioactual)

    def test_dinero_disponible(self):
        self.cajero.retirar_dinero(self.rut1, self.clave1, 20000)
        saldo = self.banco.usuarioactual.saldo
        # el usuario debería tener saldo 0, ya que nunca ha depositado
        self.assertEqual(0, saldo)
        # el test falla y se aprecia que el saldo queda en -20.000 cuando
        # debería ser 0

    def test_monto_actualizado(self):
        self.cajero.login(self.rut1, self.clave1)
        # se depositan 10.000 pesos
        self.banco.depositar(self.banco.usuarioactual, 10000)
        # se retiran 5.000 pesos
        self.cajero.retirar_dinero(self.rut1, self.clave1, 5000)
        saldo = self.banco.usuarioactual.saldo
        # deberían quedar 5.000 pesos en el saldo
        self.assertEqual(5000, saldo)

    def test_cuenta_tercero(self):
        # trataremos de transferir a una cuenta que no existe
        self.cajero.login(self.rut1, self.clave1)
        self.banco.depositar(self.banco.usuarioactual, 10000)
        self.cajero.transferir_dinero(
            self.rut1, self.clave1, "1.000.000-3", 5000)
        self.assertIsNone(self.banco.usuariotercero)
        # efectivamente el usuario al que se le va transferir no se crea y no
        # es encontrado

    def test_montos_actualizados(self):
        self.cajero.login(self.rut1, self.clave1)
        # a la cuenta 1 se le deposita 15.0000
        self.banco.depositar(self.banco.usuarioactual, 15000)
        # la cuenta 1 le transfiere 5.000 a la cuenta 2
        self.cajero.transferir_dinero(self.rut1, self.clave1, self.rut2, 3000)
        # la cuenta 1 queda con 12.000 y la cuenta 2 con 3.000. Comprobémoslo
        montoUsuario = self.banco.usuarioactual.saldo
        montoTercero = self.banco.usuariotercero.saldo
        # cuenta 1 tiene 12.000
        self.assertEqual(montoUsuario, 12000)
        # cuenta 2 tiene 3.000
        self.assertEqual(montoTercero, 3000)
        # vemos que no se cumple que el tercero tenga 3.000 (de hecho tiene 0)
        # concluimos que a la cuenta 1 se le retiran 3.000 pero a la
        # cuenta 2 no están llegando los 3.000
        # Falla el test

    def test_comprobar_error(self):
        # un error que podría pasar es que el tercero no exista
        self.cajero.login(self.rut1, self.clave1)
        # a la cuenta 1 se le deposita 10.0000
        self.banco.depositar(self.banco.usuarioactual, 10000)
        # transferimos a una cuenta que no existe
        self.cajero.transferir_dinero(
            self.rut1, self.clave1, "1.000.000-3", 5000)
        # verifiquemos que no se hace la transferencia
        montoUsuario = self.banco.usuarioactual.saldo
        self.assertEqual(montoUsuario, 10000)
class TestCajeros(unittest.TestCase):
    def setUp(self):
        self.banco = Banco("Seguritas")
        self.rut1 = "18.375.852-2"
        self.nombre1 = "Alberto Rodriguez"
        self.clave1 = 2345
        self.rut2 = "13.432.113-k"
        self.nombre2 = "Fernanda Pereira"
        self.clave2 = 5912
        self.banco.agregar_usuario(self.rut1, self.nombre1, self.clave1)
        self.banco.agregar_usuario(self.rut2, self.nombre2, self.clave2)
        self.cajero = CajeroAutomatico(self.banco)

    def test_credenciales(self):
        # primer caso: rut y clave correctos
        self.cajero.login(self.rut1, self.clave1)
        rutingresado = self.banco.usuarioactual.rut
        self.assertEqual(self.rut1, rutingresado)
        # segundo caso: rut correcto pero clave incorrecta
        self.cajero.login(self.rut1, 1234)
        self.assertIsNone(self.banco.usuarioactual)
        # tercer caso: rut no está en la base de datos del banco
        self.cajero.login("10.000.000-1", 1234)
        self.assertIsNone(self.banco.usuarioactual)

    def test_dinero_disponible(self):
        self.cajero.retirar_dinero(self.rut1, self.clave1, 20000)
        saldo = self.banco.usuarioactual.saldo
        # el usuario debería tener saldo 0, ya que nunca ha depositado
        self.assertEqual(0, saldo)
        # el test falla y se aprecia que el saldo queda en -20.000 cuando
        # debería ser 0

    def test_monto_actualizado(self):
        self.cajero.login(self.rut1, self.clave1)
        # se depositan 10.000 pesos
        self.banco.depositar(self.banco.usuarioactual, 10000)
        # se retiran 5.000 pesos
        self.cajero.retirar_dinero(self.rut1, self.clave1, 5000)
        saldo = self.banco.usuarioactual.saldo
        # deberían quedar 5.000 pesos en el saldo
        self.assertEqual(5000, saldo)

    def test_cuenta_tercero(self):
        # trataremos de transferir a una cuenta que no existe
        self.cajero.login(self.rut1, self.clave1)
        self.banco.depositar(self.banco.usuarioactual, 10000)
        self.cajero.transferir_dinero(self.rut1, self.clave1, "1.000.000-3",
                                      5000)
        self.assertIsNone(self.banco.usuariotercero)
        # efectivamente el usuario al que se le va transferir no se crea y no
        # es encontrado

    def test_montos_actualizados(self):
        self.cajero.login(self.rut1, self.clave1)
        # a la cuenta 1 se le deposita 15.0000
        self.banco.depositar(self.banco.usuarioactual, 15000)
        # la cuenta 1 le transfiere 5.000 a la cuenta 2
        self.cajero.transferir_dinero(self.rut1, self.clave1, self.rut2, 3000)
        # la cuenta 1 queda con 12.000 y la cuenta 2 con 3.000. Comprobémoslo
        montoUsuario = self.banco.usuarioactual.saldo
        montoTercero = self.banco.usuariotercero.saldo
        # cuenta 1 tiene 12.000
        self.assertEqual(montoUsuario, 12000)
        # cuenta 2 tiene 3.000
        self.assertEqual(montoTercero, 3000)
        # vemos que no se cumple que el tercero tenga 3.000 (de hecho tiene 0)
        # concluimos que a la cuenta 1 se le retiran 3.000 pero a la
        # cuenta 2 no están llegando los 3.000
        # Falla el test

    def test_comprobar_error(self):
        # un error que podría pasar es que el tercero no exista
        self.cajero.login(self.rut1, self.clave1)
        # a la cuenta 1 se le deposita 10.0000
        self.banco.depositar(self.banco.usuarioactual, 10000)
        # transferimos a una cuenta que no existe
        self.cajero.transferir_dinero(self.rut1, self.clave1, "1.000.000-3",
                                      5000)
        # verifiquemos que no se hace la transferencia
        montoUsuario = self.banco.usuarioactual.saldo
        self.assertEqual(montoUsuario, 10000)
Exemple #4
0
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]))