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 valoresdébito():
cantidad_inicialmente = 20000;
Entrada : 200Salida: 19800
// La cantidad inicial era 20000. Pide debitar 200 de ella// entonces el monto final se convierte en
final = 20000 – 200 => 19800cré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 clientesEntrada: muestra los detalles de todas las cuentas.
Salida:
Los detalles del cliente sonNombres 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:
1234Salida: 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