###### 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.

:::
> 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!

- [ ] 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)