Sistema bancario usando Scala

En este proyecto, construiremos un Sistema de Gestión Bancaria simple utilizando Scala que realizará la siguiente tarea:

1) Mostrar los detalles existentes de todos los clientes o de un cliente específico.

2) Agregar o eliminar una cuenta

3) Depositar o retirar dinero

4) Comprueba el límite de sobregiro

5) Muestra la cantidad de intereses y dividendos

Este programa utiliza los conceptos de Herencia en Scala, Métodos en Scala, If-else, Anulación de métodos, Clases y objetos y ListBuffer.

Para obtener más información sobre los conceptos anteriores, consulte los enlaces a continuación.

a) Herencia en Scala:   https://www.geeksforgeeks.org/inheritance-in-scala/

b) Métodos en Scala:  https://www.geeksforgeeks.org/scala-functions-basics/

c) Anulación de métodos: https://www.geeksforgeeks.org/method-overriding-in-scala/

d) ListBuffer: https://www.geeksforgeeks.org/scala-listbuffer/

Este programa tiene 5 clases denominadas Cuenta, Cuenta de Ahorro, Cuenta Corriente, Banco y la clase principal Sistema_Bancario.

1) Cuenta: es la clase principal y contiene tres métodos, a saber, débito(), crédito() y detalles() . Esta clase contiene 4 ListBuffer que se utilizan para almacenar los detalles de los titulares de cuentas corrientes del banco almacenados en una secuencia tal que el índice del número de cuenta bancaria de un cliente y su número de teléfono correspondiente se almacenarán en el mismo valor de índice de ListBuffer diferente.

Como muestra la imagen, los detalles del primer cliente se almacenarán en el primer índice de todo el ListBuffer y lo mismo ocurrirá con el segundo cliente, etc. El método de crédito() y detalles() se usará más adelante como un método de anulación para mostrar el monto del débito y los detalles de cualquier cliente

El siguiente ejemplo explica cómo funciona.

Scala

class Account{
  
  // Creating four ListBuffer which stores
  // the initial details of customer
  var name = new ListBuffer[String]()
  name += ( "Ankit", "Rohit", "Rahul" )
  var balance_current = new ListBuffer[Int]()
  balance_current += ( 20000, 30000, 40000 )
  var account_number = new ListBuffer[Int]()
  account_number += ( 1234, 5678, 9101 )
  var phone_number = new ListBuffer[Long]()
  phone_number += ( 9998273493L, 5569392838L, 6651299039L )
  
  // details() method is used to show
  // the details of all customer
  def details(): Unit ={
    println("Details of customer is\nNames of customer: " + name +
            "\nBalance list" + "is respectively: " + balance_current +
            "\nAccount number is respectively: " + account_number +
            "\nPhone number" + "is respectively: " + phone_number)
  }
  
  // Used to add money to a particular account
  def credit(): Unit = {
    var credit_amount: Int = 0
    println("Enter the account number you want to credit in: ")
  
    // readInt is used to take integer
    // value as input from user
    val acc_num1 = readInt()
  
    // indexOf() method returns the index
    // of particular element
    val index1 = account_number.indexOf(acc_num1)
    println("Enter the amount you want to credit: ")
    credit_amount = readInt()
    balance_current(index1) += credit_amount
    println("Amount added successfully\nNew Balance is: " +
             balance_current(index1))
  }
  
  // Used to withdraw money from an account
  def debit(): Unit ={
    var debit_amount : Int = 0
    println("Enter the account number " +
            "you want to withdraw from: ")
    val acc_num2 = readInt()
    val index2 = account_number.indexOf(acc_num2)
    println("Enter the amount you want to withdraw: ")
  
    debit_amount = readInt()
    balance_current(index2) -= debit_amount
    println("Money withdrawn successfully\n" +
            "Remaining balance is: " +
            balance_current(index2))
  }
}

Explicación:

ListBuffer: 
el tipo de datos ListBuffer se utiliza para almacenar los valores

débito():

cantidad_inicialmente = 20000;
Entrada : 200

Salida: 19800
// La cantidad inicial era 20000. Pide debitar 200 de ella 

// entonces el monto final se convierte en
final = 20000 – 200 => 19800

crédito():

cantidad_inicialmente = 15000;

Entrada : 2000

Salida: 17000

// El monto inicial era 15000. Pide acreditar 2000 en él, por lo que 

// monto final se convierte en
final = 15000 + 2000 => 17000
 

detalles():
Salida: Detalles de todos los clientes

Entrada: muestra los detalles de todas las cuentas.

Salida: 
Los detalles del cliente son

Nombres del cliente: ListBuffer (Ankit, Rohit, Rahul)

La lista de saldos es respectivamente: ListBuffer (20000, 30000, 40000)

El número de cuenta es respectivamente: ListBuffer(1234, 5678, 9101)

El número de teléfono es respectivamente: ListBuffer (9998273493, 5569392838, 6651299039)
 

2) SavingAccount : es la clase secundaria de la clase Cuenta y contiene un método llamado interés() y un método de anulación llamado detalles(). El método Interest() se usa para mostrar el monto de interés de cualquier cuenta en particular. Le pide al usuario que ingrese el número de cuenta y luego usa la fórmula que se muestra a continuación para mostrar el monto de interés que obtendrá esa cuenta en particular.

cantidad_inicialmente + (cantidad_inicialmente * interés) / 100

El método Details() es un método de anulación de la clase Account y se usa aquí para mostrar los detalles de cualquier cliente en particular. Anteriormente mostraba los detalles de todos los clientes. 

Scala

class SavingsAccount extends Account
{
  var interest : Double = 2
  
  // Method used to calculate interest
  def interest_amount(): Unit = {
    println("Enter the account number " +
            "to see the interest amount: ")
  
    val acc_num3 = readInt()
    val index3 = account_number.indexOf(acc_num3)
    interest =  (balance_current(index3) * 2) / 100
    println("The interest amount is: "+interest)
  }
  
  // Method used to view the details of
  // any particular account
  // using method overriding
  override def details(): Unit ={
    println("Enter the account_number to see its details: ")
    val acc_num4 = readInt()
    val index4 = account_number.indexOf(acc_num4)
  
    println("Details of this account is\n" +
            "Name of customer is: " + name(index4) +
            "\nAccount number is: " + account_number(index4) +
            "\nPhone number is: " + phone_number(index4)  +
            "\nAccount balance is: " + balance_current(index4))
  }
}

Explicación:

interés():

Ingrese: Número de cuenta que desea ver el monto de interés del mes.
1234
Salida: 400.0

// La tasa de interés se fija inicialmente como fijada por

// el Banco. 400 es la cantidad de interés.

detalles():

Entrada: Ingrese el número de cuenta para ver sus detalles: 
1234

Salida: los detalles de esta cuenta son

Nombre del cliente es: Ankit

El número de cuenta es: 1234

El número de teléfono es: 9998273493
El saldo de la cuenta es: 20000

// Muestra los detalles (nombre, número de cuenta,

// número de teléfono y saldo actual) 

// de la cuenta
solicitada por el usuario.
 

3) CurrentAccount: también es una clase secundaria de la clase Account y contiene un método de anulación llamado debit() . Este método se utiliza en caso de que un usuario quiera retirar dinero. Comprueba el límite de sobregiro, que no es más que el límite mínimo establecido por el banco que requiere que cada cuenta tenga un saldo por encima de ese límite de sobregiro para evitar la deducción de efectivo. Utiliza la fórmula:

saldo_actual – cantidad_retirada <límite_sobregiro

Si esta fórmula falla, el banco rechazará la solicitud de retiro de dinero.

Scala

class CurrentAccount extends Account
{
  var overdraft_limit: Int = 2000
  
  // Using method overriding
  // method used to withdraw money
  override def debit(): Unit ={
    println("Enter the account number " +
            "you want to withdraw from: ")
  
    val acc_num5 = readInt()
    val index5 = account_number.indexOf(acc_num5)
    println("Enter the amount you want to withdraw: ")
    var debit_amount = readInt()
  
    if (balance_current(index5) - debit_amount < 2000)
    {
      println("Overdraft limit exceeded " +
              "transaction declined")
    }
    else
    {
      balance_current(index5) -= debit_amount
      println("Transaction successful\n" + "" +
              "Remaining balance is: " +
               balance_current(index5))
    }
  }
}

Explicación:

anular débito():
 

// Toma el número de cuenta como entrada y verifica el límite de sobregiro.

if (saldo_actual(índice2) – monto_débito <límite_sobregiro)

{

    println(«Límite de sobregiro excedido»)

 } 

más

{

    saldo_actual(índice2) -= monto_débito
  

     println(“El saldo restante es: “+saldo_actual(índice2))   

}

// Si por ejemplo el saldo actual es 30000 y 

// el límite de sobregiro es 5000, entonces no puede 

// retirar cualquier cantidad superior a 25000.
 

4) Banco : esta clase también amplía la clase Cuenta y tiene 3 métodos, a saber, apertura(), cierre() . Esta clase se utiliza para abrir, cerrar y encontrar el monto del dividendo.

El método de apertura() se utiliza para abrir cualquier cuenta nueva en el banco. Le pide al usuario su nombre, conjuntos y número de cuenta y le pide al usuario el saldo inicial. Luego agrega todo esto respectivamente a los diferentes ListBuffer usando la funcionalidad de agregar ListBuffer.

List_Buffer += elemento

El método Closing() se usa para cerrar cualquier cuenta existente y todos los detalles relacionados de ListBuffer. Le pide al usuario que ingrese el número de cuenta y luego verifica el índice de ese número de cuenta en particular usando el método indexOf() de ListBuffer y luego elimina ese índice en particular de todos los ListBuffer respectivamente.

List_Buffer -= elemento

Scala

class Bank extends Account
{
  
  // Method to open an account
  def opening(): Unit ={
  
    // readLine() method is used to
    // take a string as input from user
    var new_name = readLine("Enter the name: ")
    name += new_name
    println("Enter the opening balance: ")
    var opening_balance = readInt()
    balance_current += opening_balance
    account_number += 1908
    println("Account added successfully")
  }
  
  // Method used to close an existing account
  def closing(): Unit ={
    println("Enter the account number: ")
    val acc_num6 = readInt()
    val index6 = account_number.indexOf(acc_num6)
    name -= name(index6)
    balance_current -= balance_current(index6)
    account_number -= account_number(index6)
    println("Account removed successfully")
  }
}

Explicación:

apertura():

Entrada: toma el nombre, el número de cuenta y el saldo inicial que desea depositar como entrada

Salida: cuenta agregada con éxito

// Pide al usuario que ingrese el número de cuenta y 

// luego verifica el índice de esa cuenta en particular

// número usando el método indexOf() de ListBuffer 

// y luego elimina ese índice en particular 
de

// todos los ListBuffer respectivamente.
 

clausura():

Entrada: Toma el número de cuenta como entrada

Salida: cuenta eliminada con éxito

// También usa el método similar mostrado arriba en el caso de apertura().
 

5) Sistema bancario/clase principal : funciona como la clase principal y tiene objetos y declaraciones if-else . Esta clase funciona como la función principal y la ejecución del código comienza desde aquí. Contiene 4 objetos, uno para cada clase y declaración de elección. La declaración de elección se utiliza para hacer que el código sea controlado por el usuario y por menús. La opción ingresada por el usuario se verificará y se devolverá esa funcionalidad en particular. Para ello, utiliza una sentencia if-else.

Tiene 1 objeto para cada clase y declaraciones if-else para realizar diferentes tareas.

A continuación se muestra la implementación del problema anterior:

Scala

// Scala program for Banking System
import scala.collection.mutable.ListBuffer
import scala.io.StdIn.{readInt, readLine}
  
class Account{
  
  // Creating four ListBuffer which stores
  // the initial details of customer
  var name = new ListBuffer[String]()
  name += ( "Ankit", "Rohit", "Rahul" )
  var balance_current = new ListBuffer[Int]()
  balance_current += ( 20000, 30000, 40000 )
  var account_number = new ListBuffer[Int]()
  account_number += ( 1234, 5678, 9101 )
  var phone_number = new ListBuffer[Long]()
  phone_number += ( 9998273493L, 5569392838L, 6651299039L )
  
  // details() method is used to show
  // the details of all customer
  def details(): Unit ={
    println("Details of customer is\nNames of customer: " + name +
            "\nBalance list" + "is respectively: " + balance_current +
            "\nAccount number is respectively: " + account_number +
            "\nPhone number" + "is respectively: " + phone_number)
  }
  
  // Used to add money to a particular account
  def credit(): Unit = {
    var credit_amount: Int = 0
    println("Enter the account number you want to credit in: ")
  
    // readInt is used to take integer
    // value as input from user
    val acc_num1 = readInt()
  
    // indexOf() method returns the index
    // of particular element
    val index1 = account_number.indexOf(acc_num1)
    println("Enter the amount you want to credit: ")
    credit_amount = readInt()
    balance_current(index1) += credit_amount
    println("Amount added successfully\nNew Balance is: " +
             balance_current(index1))
  }
  
  // Used to withdraw money from an account
  def debit(): Unit ={
    var debit_amount : Int = 0
    println("Enter the account number " +
            "you want to withdraw from: ")
    val acc_num2 = readInt()
    val index2 = account_number.indexOf(acc_num2)
    println("Enter the amount you want to withdraw: ")
  
    debit_amount = readInt()
    balance_current(index2) -= debit_amount
    println("Money withdrawn successfully\n" +
            "Remaining balance is: " +
            balance_current(index2))
  }
}
  
// Child class of class Account()
class SavingsAccount extends Account
{
  var interest : Double = 2
  
  // Method used to calculate interest
  def interest_amount(): Unit = {
    println("Enter the account number " +
            "to see the interest amount: ")
  
    val acc_num3 = readInt()
    val index3 = account_number.indexOf(acc_num3)
    interest =  (balance_current(index3) * 2) / 100
    println("The interest amount is: "+interest)
  }
  
  // Method used to view the details of
  // any particular account
  // using method overriding
  override def details(): Unit ={
    println("Enter the account_number to see its details: ")
    val acc_num4 = readInt()
    val index4 = account_number.indexOf(acc_num4)
  
    println("Details of this account is\n" +
            "Name of customer is: " + name(index4) +
            "\nAccount number is: " + account_number(index4) +
            "\nPhone number is: " + phone_number(index4)  +
            "\nAccount balance is: " + balance_current(index4))
  }
}
  
// Child class of class Account()
class CurrentAccount extends Account
{
  var overdraft_limit: Int = 2000
  
  // Using method overriding
  // method used to withdraw money
  override def debit(): Unit ={
    println("Enter the account number " +
            "you want to withdraw from: ")
  
    val acc_num5 = readInt()
    val index5 = account_number.indexOf(acc_num5)
    println("Enter the amount you want to withdraw: ")
    var debit_amount = readInt()
  
    if (balance_current(index5) - debit_amount < 2000)
    {
      println("Overdraft limit exceeded " +
              "transaction declined")
    }
    else
    {
      balance_current(index5) -= debit_amount
      println("Transaction successful\n" + "" +
              "Remaining balance is: " +
               balance_current(index5))
    }
  }
}
  
// Child class of class Account()
class Bank extends Account
{
  
  // Method to open an account
  def opening(): Unit ={
  
    // readLine() method is used to
    // take a string as input from user
    var new_name = readLine("Enter the name: ")
    name += new_name
    println("Enter the opening balance: ")
    var opening_balance = readInt()
    balance_current += opening_balance
    account_number += 1908
    println("Account added successfully")
  }
  
  // Method used to close an existing account
  def closing(): Unit ={
    println("Enter the account number: ")
    val acc_num6 = readInt()
    val index6 = account_number.indexOf(acc_num6)
    name -= name(index6)
    balance_current -= balance_current(index6)
    account_number -= account_number(index6)
    println("Account removed successfully")
  }
}
  
// Main class
object Banking_System
{
  def main(args: Array[String]): Unit = {
  
    // Object of all classes
    val obj1 = new Account()
    val obj2 = new SavingsAccount()
    val obj3 = new CurrentAccount()
    val obj4 = new Bank()
  
    println("Enter 1 for account details, " +
            "2 for SavingsAccount, " +
            "3 for CurrentAccount and " +
            "4 for closing or opening account")
  
    val choice = readInt()
    if (choice == 1)
    {
      obj1.details()
    }
  
    if (choice == 2)
    {
      println("Enter 1 for checking the interest " +
              "amount and 2 if you want to see the " +
              "details of any particular account: ")
  
      val choice1 = readInt()
      if (choice1 == 1)
      {
        obj2.interest_amount()
      }
      else if (choice == 2)
      {
        obj2.details()
      }
    }
  
    if(choice == 3)
    {
      println("Enter 1 for credit and 2 for debit: ")
      val choice2 = readInt()
  
      if (choice2 == 1)
      {
        obj3.credit()
      }
      if (choice2 == 2)
      {
        obj3.debit()
      }
    }
  
    if (choice == 4)
    {
      println("Enter 1 for opening account " +
              "and 2 for closing an account: ")
  
      val choice3 = readInt()
      if(choice3 == 1)
      {
        obj4.opening()
      }
      else
      {
        obj4.closing()
      }
    }
  }
}

Producción:

1)Details:Enter 1 for account details, 2 for SavingsAccount, 3 for CurrentAccount 
and 4 for closing or opening account
1
Details of customer is
Names of customer: ListBuffer(Ankit, Rohit, Rahul)
Balance list is respectively: ListBuffer(20000, 30000, 40000)
Account number is respectively: ListBuffer(1234, 5678, 9101)
Phone number is respectively: ListBuffer(9998273493, 5569392838, 6651299039)
----------------------------------------------------------------------------------------

2)SavingsAccount: Input1 
Enter 1 for account details, 2 for SavingsAccount, 
3 for CurrentAccount and 4 for closing or opening account
2
Enter 1 for checking the interest amount and 2 if you want to see the details of any particular account: 
1
Enter the account number to see the interest amount: 
1234
The interest amount is: 400.0
Input2
Enter 1 for account details, 2 for SavingsAccount, 3 for CurrentAccount and 4 for closing or opening account
2
Enter 1 for checking the interest amount and 2 if you want to see the details of any particular account: 
2
Enter the account_number to see its details: 
1234
Details of this account is
Name of customer is: Ankit
Account number is: 1234
Phone number is: 9998273493
Account balance is: 20000
---------------------------------------------------------------------------------------

3)CurrentAccount: Input1
Enter 1 for account details, 2 for SavingsAccount, 3 for CurrentAccount and 4 for closing or opening account
3
Enter 1 for credit and 2 for debit: 
1
Enter the account number you want to credit in: 
1234
Enter the amount you want to credit: 
2000
Amount added successfully
New Balance is: 22000
Input2
Enter 1 for account details, 2 for SavingsAccount, 3 for CurrentAccount and 4 for closing or opening account
3
Enter 1 for credit and 2 for debit: 
2
Enter the account number you want to withdraw from: 
1234
Enter the amount you want to withdraw: 
2000
Transaction successful
Remaining balance is: 18000
---------------------------------------------------------------------------------------

4)Bank: Input1
Enter 1 for account details, 2 for SavingsAccount, 3 for CurrentAccount and 4 for closing or opening account
4
Enter 1 for opening account and 2 for closing an account: 
1
Enter the name: Anshul
Enter the opening balance: 
20000
Account added successfully
Input2
Enter 1 for account details, 2 for SavingsAccount, 3 for CurrentAccount and 4 for closing or opening account
4
Enter 1 for opening account and 2 for closing an account: 
2
Enter the account number: 
1234
Account removed successfully

Publicación traducida automáticamente

Artículo escrito por priyanshshukla4799 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *