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
- Desarrollar un sistema bancario básico que permita la gestión de cuentas de clientes.
- Implementar operaciones bancarias comunes como depósitos, retiros y consultas de saldo.
- Utilizar archivos secuenciales para almacenar y recuperar datos de clientes.
- 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:
- División de Identificación
- División de Entorno
- División de Datos
- División de Procedimientos
- División de Identificación
Esta sección identifica el programa y su autor.
- 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.
- 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.
- 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
- Agregar Funcionalidad de Transferencia:
- Modifique el programa para permitir la transferencia de fondos entre dos cuentas de clientes.
- 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).
- 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
- 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.
- 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.
- 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.
Curso de Programación COBOL
Módulo 1: Introducción a COBOL
- ¿Qué es COBOL?
- Historia de COBOL
- Configuración del Entorno COBOL
- Estructura Básica de un Programa COBOL
Módulo 2: Sintaxis Básica de COBOL y Tipos de Datos
Módulo 3: Estructuras de Control
Módulo 4: Trabajando con Datos
- Manejo de Archivos en COBOL
- Procesamiento de Archivos Secuenciales
- Procesamiento de Archivos Indexados
- Procesamiento de Archivos Relativos
Módulo 5: Manejo Avanzado de Datos
Módulo 6: Subprogramas y Programación Modular
Módulo 7: Manejo de Errores y Depuración
Módulo 8: COBOL y Bases de Datos
Módulo 9: Temas Avanzados
- COBOL Orientado a Objetos
- COBOL y Servicios Web
- Optimización del Rendimiento
- Mejores Prácticas en Programación COBOL