Mini Aplicación Bancaria en Java

En cualquier transacción bancaria, hay varias partes involucradas para procesar la transacción, como un comerciante, banco, receptor, etc., por lo que hay varias razones por las que la transacción puede fallar o rechazarse, por lo que para manejar una transacción en Java, hay un JDBC ( Java Database Connectivity) que nos proporciona una API para conectar, ejecutar y obtener datos de cualquier base de datos. Proporciona los estándares de conectividad de bases de datos del lenguaje Java. Se utiliza para escribir programas necesarios para acceder a bases de datos.

Las transacciones en JDBC nos brindan una característica que considera una instrucción SQL completa como una unidad, luego se ejecuta una vez y, si alguna instrucción falla, la transacción completa falla. Para usar la transacción, tenemos que establecer setAutoCommit(false); manualmente, y una vez que todas las sentencias se ejecuten con éxito, será necesario realizar cambios en el método  commit() de la base de datos.

En esta mini aplicación bancaria, para manejar una transacción, estamos utilizando JDBC Transaction para que las transacciones sean consistentes. Esta aplicación proporciona una interfaz de consola basada en menús para que un usuario pueda realizar funciones como crear una cuenta, iniciar sesión, ver el saldo y transferir dinero al otro cliente.

Prerrequisito de software:

  • mysql
  • Eclipse

mysql:

MySQL es un sistema de administración de bases de datos relacionales (RDBMS) con todas las funciones. MySQL es un sistema gratuito de administración de bases de datos relacionales de código abierto que utiliza el lenguaje de consulta estructurado (SQL), el lenguaje más popular para agregar, acceder y procesar datos en una base de datos. MySQL se destaca por su velocidad, confiabilidad y flexibilidad.

Eclipse:

Eclipse es un IDE (entorno de desarrollo interactivo) escrito para desarrollar y depurar (principalmente) código Java. Contiene un espacio de trabajo base y un sistema de complemento extensible para personalizar el entorno. 

Configuración de bases de datos:

Paso 1: crear un banco de nombres de base de datos

Paso 2: Crear cliente de nombre de tabla

// Create a database 
CREATE DATABASE BANK; 


// Create table
CREATE TABLE `customer` (

 `ac_no` int NOT NULL AUTO_INCREMENT,

 `cname` varchar(45) DEFAULT NULL,

 `balance` varchar(45) DEFAULT NULL,

 `pass_code` int DEFAULT NULL,

 PRIMARY KEY (`ac_no`),

 UNIQUE KEY `cname_UNIQUE` (`cname`)

) ;

Configuración del proyecto Eclipse:

  • Crear nuevo proyecto
  • Crear un nombre de paquete bancario

Configuración de archivos

Configuración de archivos

Crear una clase de conexión en el paquete bancario

Paso 1: Incluya el controlador JDBC para MySQL

// register jdbc Driver 
String mysqlJDBCDriver = "com.mysql.cj.jdbc.Driver";
Class.forName(mysqlJDBCDriver);

Paso 2: crear una clase de conexión con el nombre de usuario y la contraseña de MySQL

// Create Connection
String url = "jdbc:mysql://localhost:3306/mydata";
String user = "root";
String pass = "123";
con = DriverManager.getConnection(url, user, pass);

>>conexión.java

Java

package banking;
 
import java.sql.Connection;
import java.sql.DriverManager;
// Global connection Class
public class connection {
    static Connection con; // Global Connection Object
    public static Connection getConnection()
    {
        try {
            
            
            String mysqlJDBCDriver
                = "com.mysql.cj.jdbc.Driver"; //jdbc driver
            String url
                = "jdbc:mysql://localhost:3306/mydata"; //mysql url
            String user = "root";        //mysql username
            String pass = "Pritesh4@";  //mysql passcode
             Class.forName(mysqlJDBCDriver);
            con = DriverManager.getConnection(url, user,
                                              pass);
        }
        catch (Exception e) {
            System.out.println("Connection Failed!");
        }
 
        return con;
    }
}

Propósito: esta clase devuelve una conexión de bases de datos globales utilizando el objeto de conexión, se ejecutarán todos los comandos.

Nota: Cree una clase de gestión bancaria en el paquete bancario

>> gestiónbancaria.java

Java

package banking;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.sql.Statement;
 
public class bankManagement { // these class provides all
                              // bank method
 
    private static final int NULL = 0;
 
    static Connection con = connection.getConnection();
    static String sql = "";
    public static boolean
    createAccount(String name,
                  int passCode) // create account function
    {
        try {
            // validation
            if (name == "" || passCode == NULL) {
                System.out.println("All Field Required!");
                return false;
            }
            // query
            Statement st = con.createStatement();
            sql = "INSERT INTO customer(cname,balance,pass_code) values('"
                  + name + "',1000," + passCode + ")";
 
            // Execution
            if (st.executeUpdate(sql) == 1) {
                System.out.println(name
                                   + ", Now You Login!");
                return true;
            }
            // return
        }
        catch (SQLIntegrityConstraintViolationException e) {
            System.out.println("Username Not Available!");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    public static boolean
    loginAccount(String name, int passCode) // login method
    {
        try {
            // validation
            if (name == "" || passCode == NULL) {
                System.out.println("All Field Required!");
                return false;
            }
            // query
            sql = "select * from customer where cname='"
                  + name + "' and pass_code=" + passCode;
            PreparedStatement st
                = con.prepareStatement(sql);
            ResultSet rs = st.executeQuery();
            // Execution
            BufferedReader sc = new BufferedReader(
                new InputStreamReader(System.in));
 
            if (rs.next()) {
                // after login menu driven interface method
 
                int ch = 5;
                int amt = 0;
                int senderAc = rs.getInt("ac_no");
                ;
                int receiveAc;
                while (true) {
                    try {
                        System.out.println(
                            "Hallo, "
                            + rs.getString("cname"));
                        System.out.println(
                            "1)Transfer Money");
                        System.out.println("2)View Balance");
                        System.out.println("5)LogOut");
 
                        System.out.print("Enter Choice:");
                        ch = Integer.parseInt(
                            sc.readLine());
                        if (ch == 1) {
                            System.out.print(
                                "Enter Receiver  A/c No:");
                            receiveAc = Integer.parseInt(
                                sc.readLine());
                            System.out.print(
                                "Enter Amount:");
                            amt = Integer.parseInt(
                                sc.readLine());
 
                            if (bankManagement
                                    .transferMoney(
                                        senderAc, receiveAc,
                                        amt)) {
                                System.out.println(
                                    "MSG : Money Sent Successfully!\n");
                            }
                            else {
                                System.out.println(
                                    "ERR :  Failed!\n");
                            }
                        }
                        else if (ch == 2) {
 
                            bankManagement.getBalance(
                                senderAc);
                        }
                        else if (ch == 5) {
                            break;
                        }
                        else {
                            System.out.println(
                                "Err : Enter Valid input!\n");
                        }
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            else {
                return false;
            }
            // return
            return true;
        }
        catch (SQLIntegrityConstraintViolationException e) {
            System.out.println("Username Not Available!");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    public static void
    getBalance(int acNo) // fetch balance method
    {
        try {
 
            // query
            sql = "select * from customer where ac_no="
                  + acNo;
            PreparedStatement st
                = con.prepareStatement(sql);
 
            ResultSet rs = st.executeQuery(sql);
            System.out.println(
                "-----------------------------------------------------------");
            System.out.printf("%12s %10s %10s\n",
                              "Account No", "Name",
                              "Balance");
 
            // Execution
 
            while (rs.next()) {
                System.out.printf("%12d %10s %10d.00\n",
                                  rs.getInt("ac_no"),
                                  rs.getString("cname"),
                                  rs.getInt("balance"));
            }
            System.out.println(
                "-----------------------------------------------------------\n");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static boolean transferMoney(int sender_ac,
                                        int reveiver_ac,
                                        int amount)
        throws SQLException // transfer money method
    {
        // validation
        if (reveiver_ac == NULL || amount == NULL) {
            System.out.println("All Field Required!");
            return false;
        }
        try {
            con.setAutoCommit(false);
            sql = "select * from customer where ac_no="
                  + sender_ac;
            PreparedStatement ps
                = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
 
            if (rs.next()) {
                if (rs.getInt("balance") < amount) {
                    System.out.println(
                        "Insufficient Balance!");
                    return false;
                }
            }
 
            Statement st = con.createStatement();
 
            // debit
            con.setSavepoint();
 
            sql = "update customer set balance=balance-"
                  + amount + " where ac_no=" + sender_ac;
            if (st.executeUpdate(sql) == 1) {
                System.out.println("Amount Debited!");
            }
 
            // credit
            sql = "update customer set balance=balance+"
                  + amount + " where ac_no=" + reveiver_ac;
            st.executeUpdate(sql);
 
            con.commit();
            return true;
        }
        catch (Exception e) {
            e.printStackTrace();
            con.rollback();
        }
        // return
        return false;
    }
}

Propósito: esta clase proporcionará todos los métodos de administración bancaria, como transferir dinero, ver el saldo, crear una cuenta e iniciar sesión.

Nota: Cree una clase de menú de usuario (bank.java) en el paquete bancario.

>>banco.java

Java

package banking;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class bank {
    public static void main(String args[]) //main class of bank
        throws IOException
    {
 
        BufferedReader sc = new BufferedReader(
            new InputStreamReader(System.in));
        String name = "";
        int pass_code;
        int ac_no;
        int ch;
 
        while (true) {
            System.out.println(
                "\n ->||    Welcome to InBank    ||<- \n");
            System.out.println("1)Create Account");
            System.out.println("2)Login Account");
 
            try {
                System.out.print("\n    Enter Input:"); //user input
                ch = Integer.parseInt(sc.readLine());
 
                switch (ch) {
                case 1:
                    try {
                        System.out.print(
                            "Enter Unique UserName:");
                        name = sc.readLine();
                        System.out.print(
                            "Enter New Password:");
                        pass_code = Integer.parseInt(
                            sc.readLine());
 
                        if (bankManagement.createAccount(
                                name, pass_code)) {
                            System.out.println(
                                "MSG : Account Created Successfully!\n");
                        }
                        else {
                            System.out.println(
                                "ERR : Account Creation Failed!\n");
                        }
                    }
                    catch (Exception e) {
                        System.out.println(
                            " ERR : Enter Valid Data::Insertion Failed!\n");
                    }
                    break;
 
                case 2:
                    try {
                        System.out.print(
                            "Enter  UserName:");
                        name = sc.readLine();
                        System.out.print(
                            "Enter  Password:");
                        pass_code = Integer.parseInt(
                            sc.readLine());
 
                        if (bankManagement.loginAccount(
                                name, pass_code)) {
                            System.out.println(
                                "MSG : Logout Successfully!\n");
                        }
                        else {
                            System.out.println(
                                "ERR : login Failed!\n");
                        }
                    }
                    catch (Exception e) {
                        System.out.println(
                            " ERR : Enter Valid Data::Login Failed!\n");
                    }
 
                    break;
 
                default:
                    System.out.println("Invalid Entry!\n");
                }
 
                if (ch == 5) {
                    System.out.println(
                        "Exited Successfully!\n\n Thank You :)");
                    break;
                }
            }
            catch (Exception e) {
                System.out.println("Enter Valid Entry!");
            }
        }
        sc.close();
    }
}

Salida: esta clase proporciona una interfaz basada en menús para el cliente donde el cliente puede crear una cuenta, iniciar sesión en una cuenta, transferir dinero, etc. 

Acceso: 

  ->||    Welcome to InBank    ||<- 

    1)Create Account
    2)Login Account

    Enter Input:2
Enter  UserName:pritesh
Enter  Password:123

Ver saldo:

Enter  UserName:pritesh
Enter  Password:123
Hallo, pritesh
1)Transfer Money
2)View Balance
5)LogOut
Enter Choice:2
-----------------------------------------------------------
  Account No       Name    Balance
         112    pritesh          0.00
-----------------------------------------------------------

Transferir dinero :

Hallo, pritesh
1)Transfer Money
2)View Balance
5)LogOut
Enter Choice:1
Enter Receiver  A/c No:110
Enter Amount:5000
Insufficient Balance!
ERR :  Failed!

Cerrar sesión:

Hallo, pritesh
1)Transfer Money
2)View Balance
5)LogOut
Enter Choice:5
MSG : Logout Successfully!
Cosole

Consola

Publicación traducida automáticamente

Artículo escrito por priteshyadav444 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 *