---
# System prepended metadata

title: SISTEMA DE CAJERO (UNIDAD 5)
tags: [UML, Python, Ejercicios Programación]

---

###### tags: `Ejercicios Programación` `Python` `UML`

# SISTEMA DE CAJERO (UNIDAD 5)

- Auto-generated Table of Content
[ToC]

## Problema



## Digrama de clases

```plantuml
/'
class Billete{
    +denominacion: double
}
'/
class Cliente{
    +nombres: String 
    +apellidos: String 
    +documento: int
}


class Cuenta{

    +idCuenta: int
    +cliente: Cliente 
    -pass: int
    -saldo: double 
    -ptsViveColombia: double
    -estado: bolean
    
    +setPassword(int password) 
    +getPassword()
    +setSaldo(double saldo) 
    +getSaldo()
    +setPuntosViveColombia(double ptsViveColombia) 
    +getPuntosViveColombia()
    +setEstado(boolean estado) 
    +getEstado()
}

class Cajero{
    +idCajero: int
    -limite_retiro_diario: double
    +setLimiteRetiro(double limite_retiro_diario)
    +void proceso()
    +setLimiteRetiroDiario(double limite_retiro_diario) 
    +getLimiteRetiroDiario()
}

class Banco{
    +nombre: String
    -lista_cuentas: ArrayList<cuenta>
    +retirarDinero(double monto_retiro)
    +consignarDinero(double monto_retiro)
    +cangearPtsViveColomcia(double ptsViveColombia)
    +tranferirDinero(int idCuentaOrigen, idCuentaDestino, double monto_dinero)
}


/'Cajero --> Billete : 1 tiene [0:*]'/
Cliente --> Cuenta : 1 tiene [1:*]
Banco <|--Cajero: Hereda listacuentas
Cliente -->Cajero: 1 usa 1
Banco --> Cliente: 1 tiene [0:*]
Banco --> Cuenta: 1 administra [0:*]
```


## LOGICA DEL CAJERO
- Lógica general del cajero
```plantuml
@startuml
start

repeat
    :ingrese idx_cuenta?;
    :Buscar cuenta;
    if (cuenta existe?) then (yes)
        :imprimir opciones de operaciones;
      switch (opcion?)
        case ( opcion 1)
          :Consultar\nsaldo;
        case ( opcion 2 ) 
          :Retirar\ndienro;
        case ( opcion 3 )
          :Transferir\ndinero;
        case ( opcion 4 )
          :Consultar\npuntos\nvive Colombia;
        case ( condition 5 )
          :Cambiar\npunto\nvive Colombia;
        case ( condition 6 )
          :Salir;
      endswitch
    else (no)
    endif
repeat while (exit?)

stop
@enduml
```
- Lógica consultar saldo (Opción 1)
```plantuml
@startuml
start
:Obtener saldo de la cuenta;
:imprimir saldo;
stop
@enduml
```

```C#
//***** Consultar saldo *****
if (opcion == 1)
{
    double saldo = this.lista_cuentas[idx_cuenta].getSaldo();
    Console.WriteLine("Su saldo es: {0} $COP", saldo);
}
```
- Lógica Retirar dinero (Opción 2)
```plantuml
@startuml
start

:retiro= solicitar valor a retirar;
:saldo = obtener salgo de la cuenta;
if (retiro < tope retiro diario) then (yes)
    :solicitar valor transferencia;
    :consultar saldo\ncuenta origen;
    if(reti < saldo) then (yes)
    :solicitar clave;
        if(clave == clave cuenta origen) then (yes)
        :actualizar cuenta origen;
        :actualizar cuenta destino;
        else (no)
        :imprimir error de clave;
        endif
    else (no)
    :imprimir saldo insufuciente;
    endif
else (no)
    :imprimir valor supera\ntope diario;
endif
:salir;
stop
@enduml
```
```C#
//***** Consultar saldo *****
try
{
    Console.WriteLine("Ingrese el valor a retirar: ");
    double valor_retiro = Convert.ToDouble(Console.ReadLine());

    double saldo = this.lista_cuentas[idx_cuenta].getSaldo();

    if (valor_retiro < tope_retiro_diario)
    {
        if (valor_retiro < saldo)
        {

            Console.WriteLine("Ingrese su clave: ");
            double clave_digitada = Convert.ToInt32(Console.ReadLine());

            if (clave_digitada == this.lista_cuentas[idx_cuenta].getPassword())
            {
                double nuevo_saldo = saldo - valor_retiro;
                this.lista_cuentas[idx_cuenta].setSaldo(nuevo_saldo);

                Console.WriteLine("Espere un momento contando billetes");
                System.Threading.Thread.Sleep(3000);
                Console.WriteLine("Retire su dinero");
                Console.WriteLine("Saliendo");
                Console.WriteLine();

            }

            else
            {

                Console.WriteLine("Clave errada");
                Console.WriteLine("Saliendo");
                Console.WriteLine();

            }

        }
        else
        {
            Console.WriteLine("No cuenta con el saldo suficiente para la operacion");
            Console.WriteLine("Saliendo");
            Console.WriteLine();
        }
    }
    else
    {
        Console.WriteLine("El valor digitado supera el tope máximo de retiro, acerquece a una sucursal física");
        Console.WriteLine("Saliendo");
        Console.WriteLine();
    }


}
catch (Exception e)
{
    Console.WriteLine("--- Hubo una falla de ingreso de parametros o valores ---", e);
}

```
- Lógica Transferrir dinero (Opción 3)
```plantuml
@startuml
start

:solicitar idx_cuenta destino;
:Buscar cuenta destino;
if (cuenta existe?) then (yes)
    :solicitar valor transferencia;
    :consultar saldo cuenta origen;
    if(transferencia < saldo) then (yes)
    :solicitar clave;
    if(clave == clave cuenta origen) then (yes)
    :actualizar cuenta origen;
    :actualizar cuenta destino;
    else (no)
    :imprimir error de clave;
    endif
    else (no)
    :imprimir saldo insufuciente;
    endif
else (no)
    :imprimir cuenta destino no existe;
endif
:salir;
stop
@enduml
```
```C#
{
                try
                {
                    Console.WriteLine("Realizará una transferencia de dinero");
                    Console.WriteLine("Ingrese numero de cuenta a consignar");

                    int cuenta_destino = Convert.ToInt32(Console.ReadLine());
                    bool cuenta_destino_existe = false;
                    int idx_cuenta_destino = 0;

                    foreach (Cuenta cuenta in this.lista_cuentas)
                    {
                        if (cuenta_destino == cuenta.getIdCuenta() && cuenta_destino != idx_cuenta)
                        {
                            cuenta_destino_existe = true;
                            break;
                        }
                        idx_cuenta_destino++;
                    }

                    if (cuenta_destino_existe)
                    {

                        Console.WriteLine("Cuenta de destino existente");
                        //Console.WriteLine("Cuenta No: {} a nombre de {} {}", cuenta_destino, this.lista_cuentas[idx_cuenta_destino].getNombres(), this.lista_cuentas[idx_cuenta_destino].getApellidos());


                        double saldo_origen = this.lista_cuentas[idx_cuenta].getSaldo();

                        Console.WriteLine("Ingrese el valor a transferir");
                        double valor_transferencia = Convert.ToDouble(Console.ReadLine());

                        if (valor_transferencia < saldo_origen)
                        {
                            Console.WriteLine("Ingrese su clave: ");
                            double clave_digitada = Convert.ToInt32(Console.ReadLine());

                            if (clave_digitada == this.lista_cuentas[idx_cuenta].getPassword())
                            {

                                //Actualizacion saldo cuenta origen
                                double nuevo_saldo = saldo_origen - valor_transferencia;
                                this.lista_cuentas[idx_cuenta].setSaldo(nuevo_saldo);

                                //Actualizacion saldo cuenta destino
                                double saldo_destino = this.lista_cuentas[idx_cuenta_destino].getSaldo();
                                double nuevo_saldo_destino = saldo_destino + valor_transferencia;
                                this.lista_cuentas[idx_cuenta_destino].setSaldo(nuevo_saldo_destino);

                                Console.WriteLine("Realizando operacion de transferencia");
                                System.Threading.Thread.Sleep(2000);
                                Console.WriteLine("Su saldo despues de la operación es: {0} $COP", nuevo_saldo);
                                Console.WriteLine("Saliendo");
                                Console.WriteLine();


                            }

                            else
                            {
                                Console.WriteLine("Clave errada");
                                Console.WriteLine("Saliendo");
                                Console.WriteLine();

                            }

                        }

                        else
                        {
                            Console.WriteLine("No cuenta con el saldo suficiente para la operacion");
                            Console.WriteLine("Saliendo");
                            Console.WriteLine();
                        }

                    }

                    else
                    {
                        Console.WriteLine("Cuenta de destino no existe");
                        Console.WriteLine("Operacion cancelada");
                        Console.WriteLine("Saliendo");
                        Console.WriteLine();
                    }

                }

                catch (Exception e)
                {
                    Console.WriteLine("--- Hubo una falla de ingreso de parametros o valores ---", e);
                }

            }
```
- Lógica Cangear puntos vive Colombia (Opción 4)
- 
- Lógica Consultar puntos Vive Colombia (Opción 5)

```plantuml
@startuml
start
:Obtener puntos vive colombia de la cuenta;
:imprimir puntos Vive Colombia;
stop
@enduml
```
- Lógica Salir

## TEST DE LA IMPLEMENTACION

### Step 1: Change the title and add a tag

- [x] Create my first HackMD note (this one!)
- [ ] Change its title
- [ ] Add a tag

:rocket: 

### Step 2: Write something in Markdown

Let's try it out!
Apply different styling to this paragraph:
**HackMD gets everyone on the same page with Markdown.** ==Real-time collaborate on any documentation in markdown.== Capture fleeting ideas and formalize tribal knowledge.

- [x] **Bold**
- [ ] *Italic*
- [ ] Super^script^
- [ ] Sub~script~
- [ ] ~~Crossed~~
- [x] ==Highlight==

:::info
:bulb: **Hint:** You can also apply styling from the toolbar at the top :arrow_upper_left: of the editing area.

![](https://i.imgur.com/Cnle9f9.png)
:::

> Drag-n-drop image from your file system to the editor to paste it!

### Step 3: Invite your team to collaborate!

Click on the <i class="fa fa-share-alt"></i> **Sharing** menu :arrow_upper_right: and invite your team to collaborate on this note!

![permalink setting demo](https://i.imgur.com/PjUhQBB.gif)

- [ ] Register and sign-in to HackMD (to use advanced features :tada: ) 
- [ ] Set Permalink for this note
- [ ] Copy and share the link with your team

:::info
:pushpin: Want to learn more? ➜ [HackMD Tutorials](https://hackmd.io/c/tutorials) 
:::

---

## BONUS: More cool ways to HackMD!

- Table

| Features          | Tutorials               |
| ----------------- |:----------------------- |
| GitHub Sync       | [:link:][GitHub-Sync]   |
| Browser Extension | [:link:][HackMD-it]     |
| Book Mode         | [:link:][Book-mode]     |
| Slide Mode        | [:link:][Slide-mode]    | 
| Share & Publish   | [:link:][Share-Publish] |

[GitHub-Sync]: https://hackmd.io/c/tutorials/%2Fs%2Flink-with-github
[HackMD-it]: https://hackmd.io/c/tutorials/%2Fs%2Fhackmd-it
[Book-mode]: https://hackmd.io/c/tutorials/%2Fs%2Fhow-to-create-book
[Slide-mode]: https://hackmd.io/c/tutorials/%2Fs%2Fhow-to-create-slide-deck
[Share-Publish]: https://hackmd.io/c/tutorials/%2Fs%2Fhow-to-publish-note


> Leave in-line comments! [color=#3b75c6]

- Embed YouTube Videos

{%youtube PJuNmlE74BQ %}

> Put your cursor right behind an empty bracket {} :arrow_left: and see all your choices.

- And MORE ➜ [HackMD Tutorials](https://hackmd.io/c/tutorials)
