En este estudio de caso, desarrollaremos un sistema bancario básico utilizando COBOL. Este proyecto integrará muchos de los conceptos aprendidos a lo largo del curso, desde la manipulación de archivos hasta el uso de subprogramas y estructuras de control. El objetivo es proporcionar una experiencia práctica y comprensiva que simule un entorno de desarrollo real.

Objetivos del Estudio de Caso

  1. Desarrollar un sistema bancario básico que permita la gestión de cuentas de clientes.
  2. Implementar operaciones bancarias comunes como depósitos, retiros y consultas de saldo.
  3. Utilizar archivos secuenciales para almacenar y recuperar datos de clientes.
  4. Aplicar técnicas de manejo de errores y depuración para asegurar la robustez del sistema.

Requisitos del Sistema

El sistema bancario debe cumplir con los siguientes requisitos:

  • Registro de Clientes: Permitir la creación de nuevas cuentas de clientes.
  • Depósitos y Retiros: Facilitar la realización de depósitos y retiros en las cuentas de los clientes.
  • Consulta de Saldo: Permitir a los clientes consultar el saldo de sus cuentas.
  • Manejo de Archivos: Utilizar archivos secuenciales para almacenar la información de las cuentas de los clientes.

Estructura del Programa

El programa se dividirá en varias secciones, cada una responsable de una parte específica del sistema. A continuación, se presenta una estructura básica del programa:

  1. División de Identificación
  2. División de Entorno
  3. División de Datos
  4. División de Procedimientos

  1. División de Identificación

IDENTIFICATION DIVISION.
PROGRAM-ID. BankingSystem.
AUTHOR. YourName.

Esta sección identifica el programa y su autor.

  1. División de Entorno

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT CustomerFile ASSIGN TO 'customers.dat'
    ORGANIZATION IS SEQUENTIAL.

Esta sección define el archivo que se utilizará para almacenar la información de los clientes.

  1. División de Datos

DATA DIVISION.
FILE SECTION.
FD  CustomerFile.
01  CustomerRecord.
    05  CustomerID        PIC 9(5).
    05  CustomerName      PIC X(30).
    05  CustomerBalance   PIC 9(7)V99.

WORKING-STORAGE SECTION.
01  WS-CustomerID        PIC 9(5).
01  WS-CustomerName      PIC X(30).
01  WS-CustomerBalance   PIC 9(7)V99.
01  WS-TransactionAmount PIC 9(7)V99.
01  WS-Choice            PIC 9(1).

Esta sección define la estructura del archivo de clientes y las variables de trabajo necesarias.

  1. División de Procedimientos

PROCEDURE DIVISION.
Main-Procedure.
    PERFORM Initialize
    PERFORM DisplayMenu
    PERFORM ProcessChoice
    PERFORM Terminate
    STOP RUN.

Initialize.
    OPEN I-O CustomerFile
    IF NOT CustomerFile-Status = '00'
        DISPLAY 'Error opening customer file.'
        STOP RUN
    END-IF.

DisplayMenu.
    DISPLAY '1. Register New Customer'
    DISPLAY '2. Deposit'
    DISPLAY '3. Withdraw'
    DISPLAY '4. Check Balance'
    DISPLAY '5. Exit'
    ACCEPT WS-Choice.

ProcessChoice.
    EVALUATE WS-Choice
        WHEN 1
            PERFORM RegisterCustomer
        WHEN 2
            PERFORM Deposit
        WHEN 3
            PERFORM Withdraw
        WHEN 4
            PERFORM CheckBalance
        WHEN 5
            PERFORM Terminate
        WHEN OTHER
            DISPLAY 'Invalid choice. Please try again.'
            PERFORM DisplayMenu
            PERFORM ProcessChoice
    END-EVALUATE.

RegisterCustomer.
    DISPLAY 'Enter Customer ID:'
    ACCEPT WS-CustomerID
    DISPLAY 'Enter Customer Name:'
    ACCEPT WS-CustomerName
    MOVE 0 TO WS-CustomerBalance
    WRITE CustomerRecord FROM WS-CustomerID WS-CustomerName WS-CustomerBalance
    DISPLAY 'Customer registered successfully.'
    PERFORM DisplayMenu
    PERFORM ProcessChoice.

Deposit.
    DISPLAY 'Enter Customer ID:'
    ACCEPT WS-CustomerID
    READ CustomerFile INTO CustomerRecord
        AT END
            DISPLAY 'Customer not found.'
            PERFORM DisplayMenu
            PERFORM ProcessChoice
    END-READ
    DISPLAY 'Enter Deposit Amount:'
    ACCEPT WS-TransactionAmount
    ADD WS-TransactionAmount TO CustomerBalance
    REWRITE CustomerRecord
    DISPLAY 'Deposit successful.'
    PERFORM DisplayMenu
    PERFORM ProcessChoice.

Withdraw.
    DISPLAY 'Enter Customer ID:'
    ACCEPT WS-CustomerID
    READ CustomerFile INTO CustomerRecord
        AT END
            DISPLAY 'Customer not found.'
            PERFORM DisplayMenu
            PERFORM ProcessChoice
    END-READ
    DISPLAY 'Enter Withdrawal Amount:'
    ACCEPT WS-TransactionAmount
    IF WS-TransactionAmount > CustomerBalance
        DISPLAY 'Insufficient funds.'
    ELSE
        SUBTRACT WS-TransactionAmount FROM CustomerBalance
        REWRITE CustomerRecord
        DISPLAY 'Withdrawal successful.'
    END-IF
    PERFORM DisplayMenu
    PERFORM ProcessChoice.

CheckBalance.
    DISPLAY 'Enter Customer ID:'
    ACCEPT WS-CustomerID
    READ CustomerFile INTO CustomerRecord
        AT END
            DISPLAY 'Customer not found.'
            PERFORM DisplayMenu
            PERFORM ProcessChoice
    END-READ
    DISPLAY 'Customer Balance: ' CustomerBalance
    PERFORM DisplayMenu
    PERFORM ProcessChoice.

Terminate.
    CLOSE CustomerFile
    DISPLAY 'Thank you for using the Banking System.'
    STOP RUN.

Esta sección contiene la lógica principal del programa, incluyendo la inicialización, el menú de opciones, y las operaciones bancarias.

Ejercicios Prácticos

  1. Agregar Funcionalidad de Transferencia:
    • Modifique el programa para permitir la transferencia de fondos entre dos cuentas de clientes.
  2. Implementar Validaciones Adicionales:
    • Asegúrese de que los IDs de clientes sean únicos y que los montos de transacción sean válidos (no negativos).
  3. Mejorar la Interfaz de Usuario:
    • Añada mensajes de confirmación y errores más detallados para mejorar la experiencia del usuario.

Soluciones a Ejercicios Prácticos

  1. Agregar Funcionalidad de Transferencia

Transfer.
    DISPLAY 'Enter Source Customer ID:'
    ACCEPT WS-SourceCustomerID
    READ CustomerFile INTO SourceCustomerRecord
        AT END
            DISPLAY 'Source customer not found.'
            PERFORM DisplayMenu
            PERFORM ProcessChoice
    END-READ
    DISPLAY 'Enter Destination Customer ID:'
    ACCEPT WS-DestinationCustomerID
    READ CustomerFile INTO DestinationCustomerRecord
        AT END
            DISPLAY 'Destination customer not found.'
            PERFORM DisplayMenu
            PERFORM ProcessChoice
    END-READ
    DISPLAY 'Enter Transfer Amount:'
    ACCEPT WS-TransactionAmount
    IF WS-TransactionAmount > SourceCustomerBalance
        DISPLAY 'Insufficient funds in source account.'
    ELSE
        SUBTRACT WS-TransactionAmount FROM SourceCustomerBalance
        ADD WS-TransactionAmount TO DestinationCustomerBalance
        REWRITE SourceCustomerRecord
        REWRITE DestinationCustomerRecord
        DISPLAY 'Transfer successful.'
    END-IF
    PERFORM DisplayMenu
    PERFORM ProcessChoice.

  1. Implementar Validaciones Adicionales

RegisterCustomer.
    DISPLAY 'Enter Customer ID:'
    ACCEPT WS-CustomerID
    PERFORM CheckUniqueID
    IF WS-ID-Exists
        DISPLAY 'Customer ID already exists. Please try again.'
        PERFORM RegisterCustomer
    ELSE
        DISPLAY 'Enter Customer Name:'
        ACCEPT WS-CustomerName
        MOVE 0 TO WS-CustomerBalance
        WRITE CustomerRecord FROM WS-CustomerID WS-CustomerName WS-CustomerBalance
        DISPLAY 'Customer registered successfully.'
    END-IF
    PERFORM DisplayMenu
    PERFORM ProcessChoice.

CheckUniqueID.
    SET WS-ID-Exists TO FALSE
    READ CustomerFile INTO CustomerRecord
        AT END
            EXIT PERFORM
        NOT AT END
            IF WS-CustomerID = CustomerID
                SET WS-ID-Exists TO TRUE
            END-IF
    END-READ.

  1. Mejorar la Interfaz de Usuario

DisplayMenu.
    DISPLAY '1. Register New Customer'
    DISPLAY '2. Deposit'
    DISPLAY '3. Withdraw'
    DISPLAY '4. Check Balance'
    DISPLAY '5. Transfer Funds'
    DISPLAY '6. Exit'
    ACCEPT WS-Choice.

Conclusión

Este estudio de caso ha proporcionado una experiencia práctica en el desarrollo de un sistema bancario básico utilizando COBOL. A través de este proyecto, hemos integrado múltiples conceptos y técnicas aprendidas a lo largo del curso, desde la manipulación de archivos hasta el manejo de errores y la depuración. Al completar este estudio de caso, los estudiantes deberían sentirse más cómodos y competentes en el desarrollo de aplicaciones COBOL en un entorno real.

© Copyright 2024. Todos los derechos reservados