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